2022年单片机指令系统复习 .pdf
1 一. 填空题1. 指出以下程序顺序执行后每一条指令的结果。填写在划线部分。(1)MOV A ,#25H ;(A) 25H(2)MOV 40H,#1AH ; (40H)=1AH (3)MOV R2 ,#33H ; (R2)= 33H(4)CLR C ; (C)= 0(5)ADD A ,R2; (A) 58H(6)ADDC A ,40H; (A) 72H(7)MOV RO ,#40H; (R0)=40H(8)ADDC A ,RO; (A) 8CH2. 在划线部分写出下列程序每一条指令执行后其目的操作数的结果。(1)MOV A ,#OFOH ; 0F0H (2) CPL A ; 0FH (3)ANL 30H ,#00H ; 00H (4) ORL 30H, #BDH ; 0BDH (5)XRL 30H ,A ; 0B2H 3. 若( A)=7AH,分别执行下列指令后,A 的值是多少?填在划线部分。标志位CY 和 OV 的值各是多少考虑上下指令之间的联系。(1)ANL A ,#0FFH ; 7AH (4)ORL A ,#00H ; 7AH (2)ORL A ,#0FFH ; 0FFH (5)XRL A ,#0FFH ; 85H (3)ANL A ,#00H ; 00H (6)XRL A ,00H ; 7AH 二简答题1. 8051 单片机的指令系统有何特点?解: 8051 的指令系统由111 条指令组成。如果按字节数分类,有49 条单字节指令46 条双字节指令和16 条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有64 条单周期指令、 45 条双周期指令和条四周期指令,以单周期指令为主。8051 的指令系统具有以下特点:(1)存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送,能把一个并行I/O 口中的内容传送到内部RAM 单元中而不必经过累加器A 或工作寄存器Rn。这样可以大大提高传送速度和缓解累加器 A 的瓶颈效应。(2)用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字节内容传送到累加器 A 中。这为编成翻译算法提供了方便。(3)在算术运算指令中设有乘法和除法指令(4)指令系统中一些对I/O 口进行操作的指令具有“读修改写”的功能。这一功能指:在执行读锁存器的指令时, CPU 首先完成将锁存器的值通过缓冲器BUF2 度入内部, 进行修改、 改变,然后重新写到锁存器中去。这种类型指令包含所有的逻辑操作和位操作指令。(5)8051 单片机内部有一个布尔处理器,对为地址空间具有丰富的位操作指令。布尔操作类指令有17条,包括布尔传送指令、布尔状态控制指令、布尔逻辑操作指令、布尔条件转移指令。2. 8051 单片机指令系统按功能可分为几类?具有几种寻址方式?它们的寻址范围如何?解: MCS-51单片机指令系统按功能可分为5 类:(1 )数据传送指令2)算术运算指令3 )逻辑运算和移位指令4)控制转移指令5 )位操作指令MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表:3. 访问特殊功能寄存器和外部数据存储器应采用哪种寻址方式?解: 访问特殊功能寄存器,应采用直接寻址、位寻址方式。访问外部数据存储器,应采用寄存器间接寻址方式。在 0255B 范围内,可用寄存器R0、R1间接寻址:寻址方式使用的变量寻址范围立即寻址程序存储器直接寻址内部 RAM 低 128 个字节;特殊功能寄存器SFR 寄存器寻址R0R7;A、B、DPTR、C 寄存器间接寻址R0、R1、SP 内部 RAM 、堆栈指针SP R0、R1、DPTR 外部 RAM 变址寻址A+PC、A+DPTR 程序存储器相对寻址PC+偏移量程序存储器位寻址内部 RAM 低 128B 位寻址区可位寻址的特殊功能寄存器位名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 2 MOVX A,R0 或MOVX A,R1 MOVX R0,A 或MOVX R1,A 在 064KB范围内,可用16 位寄存器 DPTR 间接寻址MOVX A,DPTR MOVX DPTR,A 4.“DA A”指令的作用是什么?怎样使用?解: 这条指令是在进行BCD 码加法运算时,跟在“ADD ”和“ ADDC ”指令之后,用来对BCD 码的加法运算结果自动进行修正的,使其仍为BCD 码表达形式。在计算机中,遇到十进制调整指令时,中间结果的修正是由ALU 硬件中的十进制修正电路自动进行的。用户不必考虑何时该加“6 ”,使用时只需在上述加法指令后面紧跟一条“DA A”指令即可。5.片内 RAM 20H2FH单元中的 128 个位地址与直接地址00H7FH 形式完全相同, 如何在指令中区分出位寻址操作和直接寻址操作?解: 虽然内部 RAM 位寻址区的位地址范围00H7FH 与低 128 个单元的单元地址范围00H7FH 形式完全相同,但是在应用中可以通过指令的类型区分单元地址和位地址。位寻址的操作只适用于下列位指令,而直接寻址操作对这些指令是无效的。MOV C ,bit MOV bit ,C CLR bit SETB bit CPL bit ANL C ,bit ANLC ,/bit JB bit,rel JNB bit,rel 6. 8051 单片机指令系统中有长跳转LJMP ,长调用 LCALL 指令,为何还设置了绝对跳转AJMP,绝对调用ACALL指令?在实际使用是应怎样考虑?解: 在实际应用中,可从寻址范围和指令长度两个方面来选择长跳转指令LJMP 和短跳转指令AJMP、长调用指令 LCALL 和短调用指令ACALL 。长跳转 LJMP 在 64KB 范围内转移,而短跳转AJMP 只能在 2KB 空间转移。长调用LCALL 调用位于64KB 程序空间的子程序,而短调用ACALL调用位于 2KB 程序空间范围的子程序。AJMP、ACALL指令代码长度为个字节;LJMP 、LCALL 指令代码长度为个字节。7. SJMP,AJMP 和 LJMP 指令在功能上有何不同?解: 指令的转移范围不同。 SJMP 是 256B范围内的相对转移指令,AJMP 是 2KB 范围内的无条件短跳转指令, LJMP 是 64KB 范围内的无条件长跳转指令。8. MOVC A,A+DPTR 与 MOVX A,DPTR 指令有何不同?解: MOVC 指令是针对程序存储器的数据传送指令,A+DPTR 基址变址寻址时,DPTR 为常数且是表格的首地址, A 为从表格首址到被访问字节地址的偏移量。MOVX 指令是针对外部RAM 的数据传送指令,DPTR 寄存器间接寻址时,寻址范围在064KB 。9. 在“MOVC A,A+DPTR ”和“ MOVC A,A+PC”中,分别使用了DPTR 和 PC 作基址,请问这两个基址代表什么地址?使用中有何不同?解: 使用A+DPTR 基址变址寻址时,DPTR 为常数且是表格的首地址,A 为从表格首址到被访问字节地址的偏移量。使用A+PC 基址变址寻址时,PC 仍是下条指令首地址,而A 则是从下条指令首地址到常数表格中的被访问字节的偏移量。10. 设片内 RAM 中的(40H)=50H,写出执行下列程序段后寄存器A 和 R0,以及片内 RAM 中 50H 和 51H单元的内容为何值?MOV A,40H MOV R0,A MOV A,#00 MOV R0,A MOV A,#30H MOV 51H,A MOV 52H,#70H 解: 结果为:(A) 30H (R0)=50H (50H) 00H (51H) 30H 11. 设堆栈指针( SP)=60H,片内 RAM 中的( 30H)=24H, (31H)=10H。执行下列程序段后,61H,62H,30H,31H,DPTR 及 SP中的内容将有何变化?解: 结果为:(61H)=24H (62H)=10H (30H)=00H (31H)=0FFH DPTR=2410HSP=60H 12. 在 8051 的片内 RAM 中,已知( 20H)=30H, (30H)=40H, (40H)=50H, (50H)=55H。分析下面各条指令,说明源操作数的寻址方式,分析按顺序执行各条指令后的结果。MOV A,40H MOV R0,A MOV P1,,#80H MOV R0,20H MOV DPTR,#2000H MOV 40H,30H MOV R0,30H MOV D0H,R0 MOV 10H,#10H MOV 50H,R0 MOV A,R0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - 3 MOV P2,P1 解:指令源操作数的寻址方式执行指令后的结果MOV A,40H 直接寻址(A)=50H MOV R0,A 寄存器寻址(R0)=50H MOV P1,#80H 立即寻址(P1)=80H MOV R0,20H 寄存器间接寻址(50H)=30H MOV DPTR,#2000H 立即寻址(DPTR)=2000H MOV 40H,30H 直接寻址(40H)=40H MOV R0,30H 直接寻址(R0)=40H MOV D0H,R0 直接寻址(D0H)=40H MOV 10H,#10H 立即寻址(10H)=10H MOV A,R0 寄存器间接寻址(A)=40H MOV P2,P1 寄存器寻址(P2)=80H 13指出下列程序中每一条指令的划线操作数的寻址方式及其完成的操作。MOV 3FH ,#40H ;3FH 为直接寻址,指令把数40H 送地址 3FH 中MOV A ,3FH ;A 为特殊寄存器寻址,把地址3FH 中的内容送A 中MOV R1 , #3FH ;3FH 为立即寻址,指令把数3FH 送寄存器 R1 中MOV A , R1 ;R1 间接寻址,R1 的内容 3FH 作地址中的内容送A 中MOV 3FH , R1 ;寄存器寻址,R1 的内容送地址3FH 中14. 内部 RAM 的 4FH 单元,可用哪几种方式寻址?分别举例说明。答: 1、直接寻址: MOV R1 , 4FH 2、间接寻址: MOV R1 ,#4FH 和 MOV A , R1 15. 特殊功能寄存器可用哪几种方式寻址?分别举例说明。答:只有直接寻址:MOV A , 90H (MOV A , P1 ); 该指令只有机器码E590H。16. 编程:将立即数55H 送入内部 RAM 的 30H 单元。(1)用立即寻址(2)用寄存器寻址(3)用寄存器间接寻址答:(1)MOV 30H ,#55H (2)MOV R1 ,#55H MOV 30H , R1 (3)MOV R1 ,#30H MOV R1 ,#55H 17. 用指令实现下述数据传送:(1)内部 RAM 30H 单元的内容送内部RAM40H 单元。答:MOV 40H , 30H (2)外部 RAM 30H 单元的内容送R0 寄存器答:MOV R1,#30H MOVX A,R1 MOV R0 ,A (3)外部 RAM 30H 单元的内容送内部RAM 30H 单元答:MOV R1,#30H MOVX A,R1 MOV 30H,A (4)外部 RAM 2000H 单元的内容送内部RAM20H 单元答:MOV DPTR ,#2000HMOVX A ,DPTR MOV 20H ,A (5)外部 ROM 2000H 单元的内容送内部RAM20H 单元答:MOV DPTR ,#2000H MOV A ,#00H MOVC A ,A+DPTR MOV 20H ,A (6)外部 ROM 2000H 单元内容送外部RAM20H 单元。答:MOV DPTR ,#2000H MOV A ,#00H MOVC A ,A+DPTR MOV R1 ,#20H MOVX R1 ,A 18. 指出下列指令执行后目的操作数的结果,并写出每条指令的机器码。可不管上下句联系。其中(R0)=30H。MOV 30H #52H ; (30H)=52H MOV A ,#78H ; (A)=78H MOV A ,#30H ; (A)=30H MOV R0 ,#30H ; (R0)=30H MOV A ,R0 ; (A)=52H,把 30H 的内容送 A 中。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 4 19.指出在下列各条指令中,45H 代表什么寻址方式?(1)MOV A , #45H ;立即寻址(2)MOV 45H ,#46H ;立即寻址(3)MOV 45H ,46H ;直接寻址(4)MOV C ,45H ;位寻址20. 分析下列指令顺序执行的结果,并写出每条指令的机器码。(1)MOV A ,#32H ;7432H (2)MOV DPTR,#2020H ;902020H (3)MOVX DPTR ,A ;F0H (4)MOV 20H, #45H ; 752045H (4)MOV R0 ,#20H ;7820H (5)MOVX A ,R0 ;E2H (6)MOV 30H ,A ;F530H 结果:片外存储器RAM2020H 内容为 32H, (30H)=(A)=45H 23. 指出以下程序顺序执行后每一条指令的结果。填写在划线部分。(1)MOV A ,#25H ;(A) 25H(2)MOV 40H,#1AH ; (40H)=1AH (3)MOV R2 ,#33H ; (R2)= 33H(4)CLR C ;(C)= 0(5)ADD A ,R2; (A) 58H(6)ADDC A ,40H; (A) 72H(7)MOV R0 ,#40H; (R0)=40H(8)ADDC A ,R0; (A) 8CH24. 在划线部分写出下列程序每一条指令执行后其目的操作数的结果。(1)MOV A ,#0F0H ; 0F0H (2) CPL A ; 0FH (3)ANL 30H ,#00H ; 00H (4) ORL 30H , #BDH ; 0BDH (5)XRL 30H ,A ; 0B2H 25. 若( A)=7AH ,分别执行下列指令后,A 的值是多少?填在划线部分。标志位CY 和 OV 的值各是多少?不考虑上下指令之间的联系。(1)ANL A ,#0FFH ; 7AH (2)ORL A,#0FFH ; 0FFH (3)ANL A,#00H ; 00H (4)ORL A,#00H ; 7AH (5)XRL A,#0FFH ; 85H (6)XRL A ,00H ; 7AH 26. 请判断下列各条指令的书写格式是否有错,如有错说明原因:答 :打( )为不存在指令 . 1、mul r0r1 () 2、mov a,r7 ( ) 3、mov a,#3000h ( ) 4、movc a+dptr,a ( ) 5、ljmp #1000h () 6、MOVX R0 ,B ( )7、MOV A ,30H ( )8 、MOVX A ,30H ( ) 9、ADDC A ,R7 ( ) 10、 ANL #99H ,36H ( ) 27.阅读下列程序段,写出每条指令执行后的结果,并说明此程序段完成什么功能?MOV R 1 ,#30H ; (R 1 )= 30H MOV A ,#64H ; (A)= 64H ADD A ,#47H ; (A)= 0ABH , (CY)= 0 , (AC)= 0 DA A ; (A)= 11 , (CY )= 1 , (AC)= 1 MOV R 1 ,A ; (R 1 )= 30H , (30H)= 11H 此程序段完成的功能:程序采用十六进制运算指令完成十进制数运算64+47=11,且进位为1。结果在 30H 单元。注意到DA A 的功能。28. 内部 RAM 的 4FH 单元,可用哪几种方式寻址?分别举例说明。答: 1. 直接寻址: MOV R1 , 4FH 2. 间接寻址: MOV R1 ,#4FH 和 MOV A , R1 29. 编程:将立即数55H 送入内部 RAM 的 30H 单元。(1)用立即寻址MOV 30H ,#55H(2)用寄存器寻址MOV R1 ,#55H MOV 30H , R1(3)用寄存器间接寻址MOV R1 ,#30H MOV R1 ,#55H 30. 用指令实现下述数据传送:(1)内部 RAM 30H 单元的内容送内部RAM40H 单元。答: MOV 40H , 30H (2)外部 RAM 30H 单元的内容送R0 寄存器答:MOV R1 ,#30H MOVX A ,R1 MOV R0 ,A (3)外部 RAM 30H 单元的内容送内部RAM30H 单元名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - 5 答:MOV R1 ,#30H MOVX A ,R1 MOV 30H ,A (4)外部 RAM 2000H 单元的内容送内部RAM20H 单元答:MOV DPTR ,#2000H MOVX A ,DPTR MOV 20H ,A (5)外部 ROM 2000H 单元的内容送内部RAM20H 单元答:MOV DPTR ,#2000H MOV A ,#00H MOVC A ,A+DPTR MOV 20H ,(6)外部 ROM 2000H 单元内容送外部RAM20H 单元。答:MOV DPTR ,#2000H MOV A ,#00H MOVC A,A+DPTR MOV R1 ,#20H MOVX R1 ,A 三. 编程题1.试编程实现内部RAM25H 单元与外部 RAM5500H 单元的数据交换。MOV DPTR ,#5500H MOVX A,DPTR XCH A,25H MOVX DPTR,A 2.试编程实现外部RAM2040H 单元的内容与3040H 单元互换。MOV DPTR ,#2040H MOVX A ,DPTR MOV 30H , A MOV DPTR ,#3040H MOVX A ,DPTR XCH A ,30H MOVX DPTR ,AMOV DPTR ,#2040H MOV A ,30H MOVX DPTR ,A 3. 试编程实现两个无符号16 位数的减法。被减数和减数分别存放在DATA1 和 DATA2 为首址的内部RAM中,低位在低地址单元,高位在后,差存于R3(低 8 位)和 R4(高 8 位)中. CLR C MOV R0 , #DATA1 MOV A , R0 MOV R1 , #DATA2 SUBB A, R1 MOV R3 , A INC R0 INC R1 MOV A ,R0 SUBB A ,R1 MOV R4 ,A 4若外部 RAM 的(2000H)=X , (2001H)=Y,编程实现Z=3X+2Y ,结果存入内部RAM 20H 单元(设 Z255)MOV DPTR ,#2000H MOVX A ,DPTR MOV B ,#03HMUL AB MOV B ,A ;存 3X MOV DPTR ,#2001H MOVX A ,DPTR MOV 20H ,A ADD A ,20H ;计算 2Y ADD A ,B ;3X+2Y MOV 20H ,A 5. 完成以下的数据传送过程。解:(1)R1 的内容传送到R0 ;MOV A, R1 MOV R0, A (2)片外 RAM 20H 单元内容送 R0 ;MOV DPTR, #0020H MOVX A, DPTR MOV R0, A (3)片外RAM 20H 单元的内容送片内RAM 20H 单元;MOV DPTR, #0020H MOVX A, DPTR MOV 20H, A (4)片外 RAM 1000H 单元的内容送片内RAM 20H 单元;MOV DPTR, #1000H MOVX A, DPTR MOV 20H, A (5)ROM 2000H 单元的内容送R0 单元;MOV A, #00H MOV DPTR, #2000H MOVC A, A+DPTR MOV R0H, A (6)ROM 2000H 单元的内容送片内RAM 20H 单元;MOV A, #00H MOV DPTR, #2000H MOVC A,A+DPTR MOV 20H, A (7)ROM 2000H 单元的内容送片外RAM 20H 单元。MOV A, #00H MOV DPTR, #2000H MOVC A,A+DPTR MOV DPTR, #0020H MOVX DPTR,A 6. 设有两个 4 位 BCD 码,分别存放在片内RAM 的 23H,22H 单元和 33H,32H 单元中,求它们的和,并送入 43H,42H 单元中去。(以上均为低位字节,高位在高字节)。ORG 0000H LJMP START ORG 0030H START:MOV A ,22H ADD A ,32H DA A MOV 42H ,A MOV A ,23H ADDC A ,33H DA A MOV 43H ,A SJMP $ END 7. 编程将片内RAM 的 40H60H 单元中内容送到片外RAM 以 3000H 开始的单元中。ORG 0000H LJMP MAIN ORG 0030H 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - 6 MAIN :MOV R7 ,#20H MOV R1 ,#40H MOV DPTR ,#3000H LOOP :MOV A ,R1 MOVX DPTR ,A INC R1 INC DPTR DJNZ R7 ,LOOP SJMP $ END 8. 编程计算片内RAM 区 30H37H 的 8 个单元中数的算术平均值,结果存在3AH 单元中。ORG 0000H LJMP MAIN ORG 0030H MAIN :MOV R0 ,#30H ;数据首地址MOV R1 ,#00H ;和高位MOV R2 ,#00H ; 和低位MOV R3 ,#07H ;循环次数LP2:MOV A ,R0 ADD A ,R2 MOV R2 ,A JNC LP1 INC R1 LP1:INC R0 DJNZ R3 ,LP2 MOV R3 ,#03H LP3:CLR C MOV A ,R1 RRC A ; 和高位除 2 MOV R1 ,A MOV A ,R2 ;和低高位除2 RRC A MOV R2 ,A DJNZ R3 ,LP3 MOV 3AH ,R2 SJMP $ END 9. 设有 100 个有符号数,连续存放在片外RAM 以 2200H 为首地址的存储区中,试片成统计其中正数|、负数、零的个数。ORG 0000H LJMP MAIN ORG 0030H MAIN :MOV R2 ,#100 MOV R3 ,#00H ;零的个数MOV R4 ,#00H ;正数的个数MOV R5 ,#00H ;负数的个数MOV DPTR ,#2000H LOOP:MOVX A ,DPTR CJNE A,#00H,NET1 INC R3 INC DPTR DJNZ R2,LOOP SJMP NET3 NET1:JC NET2 INC R4 INC DPTR DJNZ R2,LOOP SJMP NET3 NET2:INC R5 INC DPTR 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 思考题与习题部分参考答案7 DJNZ R2,LOOP NET3:SJMP $ END 11.试编程实现两个无符号16 位数的减法。被减数和减数分别存放在DATA1 和 DATA2 为首址的内部RAM中,低位在低地址单元,高位在后,差存于R3(低 8 位)和 R4(高 8 位)中。CLR C MOV R0 ,#DATA1 MOV A ,R0 MOV R1 ,#DATA2 SUBB A ,R1 MOV R3 ,A INC R0 INC R1 MOV A ,R0 SUBB A ,R1 MOV R4 ,A 26. 从内部存储器20H 单元开始,有30H 个数据。试编一个程序,把其中的正数、负数分别送51H 和 71H开始的存储单元,并分别将正数、负数的个数送50H 和 70H 单元。参考程序:(由于间接寻址寄存器不够用,本处采用两段程序分先后处理正负数)MOV R0 ,#20H ;处理正数MOV R2 ,#30H MOV 50H ,#00H MOV 70H ,#00H MOV R1, #51H LOOP0: MOV A , R0 ;取数INC R0 JB ACC.7, LOOP1 MOV R1 ,A INC R1 INC 50H LOOP1: DJNZ R2, LOOP0 LOP: MOV R0 ,#20H ;处理负数MOV R2 ,#30H MOV R1, #71H LOOP2: MOV A , R0 INC R0 JNB ACC.7 LOOP3 MOV R1 ,A ;为负数INC R1 INC 70H LOOP3: DJNZ R2, LOOP2 END 27. 设内部 RAM 中 30H 和 31H 单元中有两个带符号数,求出其中的大数存放在32H 单元中。MOV A ,30H XRL A,31H JB ACC.7,LOOP2 ;是否异号MOV A ,30H ;同号SUBB A,31H JC LOOP1 MOV 32H ,30H ;30H 大SJMP LOOP4 LOOP1:MOV 32H ,31H ;31H 大SJMP LOOP4 LOOP2:MOV A ,30H ;异号JB ACC.7 ,LOOP3 MOV 32H ,31H ;正数大SJMP LOOP4 LOOP3:MOV 32H ,30H LOOP4:RET 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - 思考题与习题部分参考答案8 28. 根据如下要求,试编制数据块传送程序。将存放在8051 单片机内部RAM 中首址为 20H,长度为50H 的数据块,传送到片外RAM 以 4200H 为首地址的连续单元中。MOV R0 ,#20H MOV DPTR ,#4200H MOV R2 ,#50H LOOP:MOV A ,R0 MOVX DPTR ,A INC R0 INC DPTR DJNZ R2,LOOP END 29. 设有两长度均为20H 的无符号字符串SA 和 SB,分别存放在单片机片内RAM 以 20H 及 40H 为首址的连续单元中。首地址存放高位字节。要求当SASB 时,将内部 RAM 的 60H 单元清 0;当 SA SB时将该单元全置 1(FFH) 。试编制实现上述要求的程序。MOV R0 ,#20H MOV R1 ,#40H MOV R2, #20H LOOP2: MOV 61H ,R1 ;61H 做缓冲单元MOV A , R0 CJNE A,61H ,LOOP1 ;不相等转INC R0 ;相等准备下一字节INC R1DJNZ R2 , LOOP2 ;所有字节都相等?MOV 60H,#00H ;都相等SJMP LOOP4 LOOP1: JC LOOP3 MOV 60H,#00H ;大于SJMP LOOP4 LOOP3: MOV 60H,#0FFH ;小于LOOP4: RET 30. 编一程序。将8051 片内存储区 DATA1 单元开始的20 个单字节数据依次与DATA2 单元为起始地址的 20 个单字节数据进行交换。MOV R0 ,#DATA1 MOV R1 ,#DATA2 MOV R2 ,#20H LOOP: MOV A ,R1 XCH A,R0 MOV R1,A INC R0 INC R1 DJNZ R2, LOOP END 31. 试编写一程序。将8051 片内数据存储区DATA1 单元开始的50 个单字节逐一移至DATA2 单元开始的存储区中。MOV R0 ,#DATA1 MOV R1 ,#DATA2 MOV R2 ,#50 CJNE R0,#DATA2 ,LOOP0 ;计算地址大小SJMP LOOP5 ;地址相同LOOP0 :JC LOOP2 ;考虑数据覆盖,因地址交叉LOOP1 :MOV A ,R0 ;DATA1 大于 DATA2 MOV R1,A ;如 40H72H 送 30H62H INC R0 INC R1 DJNZ R2, LOOP1 SJMP LOOP5 LOOP2 :MOV R0 ,#DATA1+50 ;DATA1 小于 DATA2 MOV R1 ,#DATA2+50 ;如 30H62H 送 40H72H LOOP3 :MOV A ,R0 MOV R1,A 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - 思考题与习题部分参考答案9 DEC R0 DEC R1 DJNZ R2, LOOP3 LOOP5 :RET 习题2 2.1 指出下列程序中每一条指令的划线操作数的寻址方式及其完成的操作。MOV 3FH ,#40H ;3FH 为直接寻址,指令把数40H 送地址 3FH 中MOV A ,3FH ; A 为特殊寄存器寻址,把地址3FH 中的内容送A 中MOV R1 , #3FH ;3FH 为立即寻址,指令把数3FH 送寄存器 R1中MOV A , R1 ;R1间接寻址,R1的内容 3FH 作地址中的内容送A 中MOV 3FH , R1 ;寄存器寻址,R1的内容送地址 3FH 中2.2 内部 RAM 的4FH 单元,可用哪几种方式寻址?分别举例说明。答: 1、直接寻址: MOV R1 , 4FH 2、间接寻址: MOV R1 ,#4FH 和 MOV A , R1 2.3 特殊功能寄存器可用哪几种方式寻址?分别举例说明。答:只有直接寻址:MOV A , 90H (MOV A , P1 );P1口该指令只有机器码E590H。2.6 指出下列指令执行后目的操作数的结果,并写出每条指令的机器码。可不管上下句联系。其中(RO)=30H。MOV 30H #52H ; (30H)=52H MOV A ,#78H ; (A)=78H MOV A ,#30H ; (A)=30H MOV RO ,#30H ; (RO)=30H MOV A ,RO ; (A)=52H,把 30H 的内容送 A 中。2.7指出在下列各条指令中,45H 代表什么寻址方式?(1)MOV A , #45H ;立即寻址(3)MOV 45H ,46H ;直接寻址(2)MOV 45H ,#46H ;直接寻址(4)MOV C ,45H ;位寻址2.8 分析下列指令顺序执行的结果,并写出每条指令的机器码。(1)MOV A ,#32H ;7432H (4)MOV RO ,#20H ;7820H (2)DPTR,#2020H ;902020H (5)MOVX A ,RO ;E2H (3)MOVX DPTR ,A ;F0H (6)MOV 30H ,A ;F530H 结果:片外存储器RAM2020H 内容为 32H, (30H)=(A)=32H 2.9试编程实现内部RAM25H 单元与外部RAM5500H 单元的数据交换。参考程序:MOV DPTR ,#5500H MOVX A ,DPTR XCH A ,25H MOVX DPTR ,A 2.10试编程实现外部RAM2040H 单元的内容与 3040H 单元互换。参考程序: MOV DPTR , #2040H MOVX A , DPTR MOV 30H ,A MOV DPTR , #3040HMOVX A ,DPTR XCH A ,30H MOVX DPTR ,AMOV DPTR ,#2040H MOV A ,30HMOVX DPTR ,A 2.11分析以下程序的执行过程,并绘出执行过程示意图。(1) MOV A ,#32H (6)PUSH A (2) MOV SP,#55H (7)MOV A ,#2FH (3) MOV DPTR ,#4000H ;设定初值( 8) MOV DPTR ,A ;使用寄存器(4) PUSH DPL (9)POP A ;恢复现场(5) PUSH DPH ;保护现场(10)POP DPH (6) MOV DPTR ,#4200H ;使用(11)POP DPL (12) MOV DPTR ,A 参考答案说明:本程序前三条指令中A、DPTR 被给定了值,在后面程序中又要用到A、DPTR 寄存器序中采用堆栈保存和恢复A、DPTR 的值。2.12 指出以下程序顺序执行后每一条指令的结果。填写在划线部分。(1)MOV A ,#25H ; (A) 25H(5)ADD A ,R2; (A) 58H(2)MOV 40H,#1AH ; (40H)=1AH (6)ADDC A ,40H; (A) 72H(3)MOV R2 ,#33H ; (R2)= 33H(7)MOV RO ,#40H; (R0)=40H(4)CLR C ; (C)= 0(8)ADDC A ,RO; (A) 8CH2.13试编程实现两个无符号16位数的减法。被减数和减数分别存放在DATA1 和 DATA2为首址的内部AM 中,低位在低地址单元,高位在后,差存于R3(低 8位)和 R4(高 8位)中。参考程序:CLR C MOV R0 ,#DATA1 MOV A ,R0 MOV R1 ,#DATA2 SUBB A ,R1 MOV R3 ,A INC R0 INC R1 MOV A ,R0 SUBB A ,R1 MOV R4 ,A 2.14 在划线部分写出下列程序每一条指令执行后其目的操作数的结果。(1)MOV A ,#OFOH ; 0F0H (2) CPL A ; 0FH (3)ANL 30H ,#00H ; 00H (4) ORL 30H , #BDH ; 0BDH (5)XRL 30H ,A ; 0B2H 2.15 若( A)=7AH ,分别执行下列指令后,A 的值是多少?填在划线部分。标志位CY 和 OV 的值各是多?不考虑上下指令之间的联系。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - 思考题与习题部分参考答案10 (1)ANL A ,#0FFH ; 7AH (4)ORL A,#00H ; 7AH (2)ORL A ,#0FFH ; 0FFH (5)XRL A ,#0FFH ; 85H (3)ANL A ,#00H ; 00H (6)XRL A ,00H ; 7AH 2.16若外部 RAM 的(2000H)=X , (2001H)=Y,编程实现Z=3X+2Y ,结果存入内部RAM 20H 单元(设 Z255)参考程序:MOV DPTR ,#2000H MOVX A ,DPTR M