《【ch04】汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《【ch04】汇编语言程序设计.docx(5页珍藏版)》请在第一文库网上搜索。
1、第4章汇编语言程序设计1 .简述MCS-51单片机指令的基本格式。M.CS-51单片机的汇编指令格式如下:标号、操作码、目的操作数、源操作数、注释、操作码表示该指令所实现的操作功能,一般由25个英文字母表示。例如OR1ADD,1CA1I等。操作数表示参与操作的数据来源和目的单元。操作数可以是一个立即数,也可以是一个内存单元或者是一个寄存器单元。操作码和第一个操作数之间一般用一个或几个空格隔开,而操作数与操作数之间用逗号隔开。操作数可以有1个,2个,3个或没有。如果需要对指令进行注释说明的话,在最后一个操作数后加一个分号,分号后面是注释。2 .说明下列符号的意义,并指出它们之间的区别。(DRO与
2、RO(2)AR1与A(R1)3 3)DPTR与DPTR(4)30H与#30H答:(1)Ro是工作寄存器。当RS1RSO(在PSW中)=0时RO的直接地址是OOH;当工作寄存器区为1区时RO的直接地址是08H;工作寄存器区为2区时RO的直接地址是IOH;工作寄存器区为3区时RO的直接地址是18H;R0表示间接寻址,即以RO中内容为地址的存储单元中的数据.RO的寻址范围是内RAMOoHFFH和外RAM00HFFH;(2) A-R1表示将R1中的内容传送至A。A-(RI)表示将以R1中内容为地址的存储单元中的数据传送至A。(3)DPTR是16位数据指针,是特殊功能寄存器。DPTR是用DPTR间接寻址
3、,寻址范围是外RAM0000HFFFFHo3.什么是寻址方式?80C51单片机指令系统有几种寻址方式?试述各种寻址方式所能访问的存储空间。80C51单片机的寻址方式有七种。即:寄存器寻址直接寻址、寄存器间接寻址、立即寻址、基址寄存器加变址寄存器变址寻址、相对寻址和位寻址。这些寻址方式所对应的寄存器和存储空间如卜表所示。序号寻址方式寄存器或存储空间1寄存器寻址寄存器R0R7,AsAB,DPTR和C(布尔累加器)2直接寻址片内RAM低128字可、SFR3寄存器间接寻址片内RAM(R0,R1SP)片外RAM(R0,R1DPTR)4立即寻址ROM5变址寻址ROM(A+DPTR.A+PC)6相对寻址RO
4、M(PC当前值的+127128字节)7位寻址可寻址位(内部RAM20H2FH单元的位和部分SFR的位)4.若RonIH,(11H)=22H,(33H)=44H,写出执行下列指令后的结果。(DMOV(3)MOVA,ROA,33H(2)MOVA,RO(4)MOVA,#33H(1)MOVA,RO;KOA,A=HH(2)MOVA,RO;(RO)-A,A=22H(3)MOVA,33H;(33H)A,A=44H(4)MOVA,#33H;33HfA,A=33H5.若A=78H,R0=34H,(34H)=DCHf(56H)=ABH,求分别执行下列指令后A和C中的数据。(DADDA,RO(2)ADDCA,R0(
5、3) ADDA,56H(4)ADDA,#56H(1) A=ACH,Cy=0(2) A=54H,Cy=1(3) A=23,Cy=1(4) A=CE1Cy=O6.被减数保存在31H和30H中(高位在前),减数保存在33H和32H中,试编写其减法程序,差值存入31H和30H中,借位存入32H中。解:编制程序如下:ADDA,#00H:产生Cy=O(学过Q入C后可用C1KC)MOVA,30H1取被减数低8位SUBBA,32H;低8位相减MOV30H,A;存低8位差MOVA,31H;取被减数高8位SUBBA,33H;高8位连同Cy相减MOV31HfA;存高8位差MOVA.#00HADDCA,#00H;把C
6、y变换为等量的8位数MOV32H.A;存借位7. 若A=B7H=10110111BfR0=5EH=0101110Br(5EH)=D9H=11011001B,(D6H)=ABH=10101011B,分别写出执行下列各条指令后的结果。(DAN1A,RO(2)AN1A,RO(3)AN1A,#D6H(4) AN1A,D6H(5)AN1D6H,A(6)AN1D6H,#D6H解析an1属51系列单片机的系统指令,进行“逻辑与运算,an1A,RO将OIoI11oB与IoI1OIIIB逐位取与,并将其结果送至寄存器A中.至于结果,可通过相关软件编译连接运行得到,手工计算亦可!8 .若A=O1111OO1B,C
7、=O,分别写出执行下列各条指令后的结果。(1)R1A(2)RC1ARRA(4)RRCAR1A;A=I111OO1OB,Cy=O(不变)R1CA;A=11110010B,Cy0(刷新)RRAA=IO1U1OOB,Cy=O(不变)RRCAA=OO11I1OOB,Cy=I(刷新)9 .编写程序,将位存储单元33H与44H中的内容互换。编程如下:MOVC,33H;(33切一。MOVFQtCC-R),皿是内W中的用户标志MOVC,44H;MOV33H,Cj(44W)-(33H)MOVC1FO;MOV44Hc;(33切一(44切10试编写程序,将片外数据存储区的200OH20FFH数据块传送到3000H3
8、0FFH区域。解:编程如下:DMOV.MOVDP,#2000H;置源数据区首址MOVH2,#00H;置数据长度(256个)D1opmovxa,dptr;读数据MOV。产况#30H;置目的数据区高8位地址MOVXDPTR,A;存数据MOVDPH,;置源数据区高8位地址INCDPTR;修改源数据区地址DJNZR2,D1OP;判循环结束否?RET11 .使用循环转移指令编写延时30ms的延时子程序(设单片机的晶振频率为12MHz)ofosc=12MHz,1机周为1”。编程如下:DY2Gms:MOVR7,#40;置外循环DY21.MOVR6,#250;置内循环DY22:DJNER6,DY22;250x
9、2=0.5tzwDJNER7,DY21;0.5nwx40=20msRET12 .试编写延时Imin子程序(设fse=6MHz)。fosc=6MHz,1机周为2华。编程如下:DY1sMOVR7,#240;DY10,MOVR6,#250;DY11MOVR5,#250;DY12DJNZR5,OY12;2机周2502W机周=ImsDJNZRG1DY11;1msx250=250msDJNZR7,DY10;250gx240=1分RET;13 .从片内数据存储区的30H存储单元开始存放着一组无符号数,这组无符号数的个数存放在31H中。试编写程序,找出其中最小的数,并将其存入30H中。SECH:MOVMOVR
10、O,*30H2f)H,#FFH;置数据区廿地址:Mif-20HS1JOP:MOVA.RO;设数据CJNEA,20H.NEXT;与收小值比较NEXT:JNCS1PI;C0.大于Mi,转MOVa)H.AIC1Mi20HS1PI:INCRO;指向下数据DJNZREr2IH.SiJoP5制循环14 .计算片内数据存储区的50H57H单元中数的算术平均值,结果存放在5AH中。MOVRO,#50HMOVR148MOVA#01I1ADDA.ROINCRODJNZR1,11MOVB*#8DIVABMOV5AH.A15,已知累加器A中的2位十六进制数,试编写程序将其转换为ASCII,并存入21H和20H中。RO
11、T.MOV2H,A;暂存AN1A1HOFH;屏蔽高位,保留低位XCHA,21H;存低位,取高位AN1A1HOFOH;屏蔽低位,保留高位SWAPA;转移至低位1CA11ASC;调用4SC7型转换子程序XCH21H.A;存高位,取低位IEA11ASC涸用4SC/码转换子程序XCH20H.A府低位RET;ASC:MOVDFTRtItTAB确表首地址MOVCA,A+DPTR,ASCIItRET;子程序返回TAB:DB30H,31H,32H,,39H;09ASCIIiDB40H,41H,42H,46H;A-FASCII码16 .试编写程序,根据R2(不大于85)中的数值实现以下散转功能:(R2)=0,转向PRG0;(R2)=1,转向PRG1;(R2)=n,转向PRGn。SHIFMOVDpTR,#TABJ置散转表首址MOVA,R2;读序数R1A;ADDA,R2;序数x3一力JMPA,A+DPTR急转TABJ-.1JMPPRGOPRGO1JMPPRG1;转PRG11JMPPRGN俄PRCN