..WORD完美格式..
⑶ 特殊功能寄存器
例如: MOV IE,#85H ;立即数85H→中断允许寄存器IE。
1. 寄存器寻址 寄存器寻址方式的寻址空间为工作寄存器和特殊功能寄存器等。
例如: MOV A,R6 ;(R6)→A
1. 寄存器间接寻址 寄存器间接寻址空间为内部RAM 128字节,外部RAM
例如: MOV A,@R0 ;((R0))→A
1. 变址寻址 变址寻址空间为程序存储器。
例如: MOVC A,@A+DPTR ;((DPTR)+(A))→A MOVC A,@A+PC ;((PC)+(A))→A
1. 相对寻址 相对寻址空间为程序存储器。
2. 当前PC值是指相对转移指令所在地址(源地址)加转移指令字节数。
即:当前PC值 = 源地址 + 转移指令字节数
1. 偏移量rel 是有符号的单字节数,以补码表示,相对值在-128~+127范围内,负数表示从当前地
址向上转移,正数表示从当前地址向下转移。所以转移的目的地址为:
目的地址 = 当前PC值 + rel = 源地址 + 转移指令字节数 + rel 例如: JNC 2AH , JZ F8H
1. 位寻址 位寻址空间为内部RAM 20H~2FH的128位和SFR中的83位。
例如: MOV C,30H, MOV P1.0, C 3.3指出下列指令的寻址方式和操作功能: INC 40H ;直接寻址 (40H)+1→40H INC A ;寄存器寻址 (A)+1→A
INC @R2 ;寄存器间接寻址 ((R2))+1→(R2)
MOVC A, @A+DPTR ;基址加变址寄存器寻址 ((A)+(DPTR)) →A MOV A, #6EH ;立即寻址 6EH→A
..专业知识编辑整理..
..WORD完美格式..
SETB P1.0 ;位寻址 P1.0置1
3.4 设内部RAM中3AH单元的内容为50H,写出当执行下列程序段后寄存器A、R0和内部RAM 50H,51H单元的内容为何值? MOV A,3AH ;(A)=50H MOV R0,A ;(R0)=50H MOV A,#00H ;(A)=00H MOV @R0,A ;(50H)=00H MOV A,#25H ;(A)=25H MOV 51H,A ;(51H)=25H
答:(A)=25H, (3AH)=50H, (R0)=50H, (50H)=00H, (51H)=25H
3.5 设堆栈指针SP中的内容为60H,内部RAM 30H和31H单元的内容分别为27H和1AH,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化? PUSH 30H ;(SP)+1→SP, (30H) →61H PUSH 31H ;(SP)+1→SP, (31H) →62H POP DPL ; (62) →DPL, (SP)-1→SP POP DPH ; (61) →DPH, (SP)-1→SP MOV 30H,#00H ; 00H→30H MOV 31H,#0FFH ; FFH→31H
答:(61H)=27H, (62H)=1AH, (30H)=00H, (31H)=FFH, (DPTR)=271AH, (SP)=60H
3.6 设(A)=30H,(R1)=23H,(30H)=05H。执行下列两条指令后,累加器A和R1以及内部RAM 30H单元的内容各为何值? XCH A,R1 XCHD A,@R1
答:(A)=25H, (R1)=30H, (30H)=03H
..专业知识编辑整理..
..WORD完美格式..
3.7 设(A)=01010101B,(R5)=10101010B,分别写出执行下列指令后的结果 ANL A, R5 ; (A)=0000 0000B, (R5)=10101010B ORL A, R5 ; (A)= 10101010B, (R5)=10101010B XRL A, R5 ; (A)=00000000B
3.8 设指令SJMP rel=7FH,并假设该指令存放在2113H和2114H单元中。当该条指令执行后,程序将跳转到何地址?
答:程序将跳转到2194H地址
3.9 简述转移指令AJMP addr11,SJMP rel, LJMP addr16及JMP @A+DPTR的应用场合。
答:AJMP addr11这是在当前PC的2K字节范围内的无条件转移指令,把程序的执行转移到指定的地址。 SJMP rel 这是相对跳转指令,其中rel为相对偏移量。转向的目标地址是在当前PC的前128字节到后127字节之间。
LJMP addR16 执行这条指令时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转向指定地址。转移的目标地址可以在64KB程序存储器地址空间的任何地方,不影响任何标志。
JMP @A+DPTR 把累加器A中8位无符号数与数据指针DPTR中的16位数相加,将结果作为转移的目标地址送入PC,不改变累加器A和数据指针DPTR内容,也不影响标志。本指令以DPTR内容作为基址,A的内容作为变址。只要把DPTR的值固定,而给A赋予不同的值,即可实现程序的多分支转移。 3.10 查指令表,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序的特点。 MOV 78H,80H ;85 80 78 MOV 78H,#80H ;75 78 80
答:直接寻址单元传送到直接寻址单元的机器码是第二个操作数在前,而立即数传送到直接地址单元是第一个操作数在前,次序正好相反。
3.11 试编写程序,查找在内部RAM 30H~50H单元中1AH这一数据。若找到1AH则将51H单元置为01H;没找到则将51H单元置为00H。 答:参考程序如下 MOV R1, #2FH LOOP1: INC R1
..专业知识编辑整理..
..WORD完美格式..
CJNE @R1, #1AH, LOOP2 SJMP LOOP3
LOOP2: CJNE R1, #51, LOOP1 MOV 51H, #00H SJMP END
LOOP3: MOV 51H, #01H END: RET
3.12 若SP=60H,子程序标号MULT所在的地址为3A40H。执行LCALL MULT指令后,堆栈指针SP和堆栈内容发生了什么变化?
答:(SP)=62H, (61H)=40H, (62H)=3AH
3.13 假设外部存储器215AH单元的内容为3DH,执行下列指令后,累加器A中的内容为何值? MOV P2,#21H MOV R0,#5AH MOVX A,@R0 答:(A) = 3DH 习题4
4.1 编程将数据存储器中以2A00H为首地址的100个连续单元清零。 CLR A MOV R0, #64H MOV DPTR, #2A00H LOOP: MOVX @DPTR,A INC DPTR DJNZ R0, LOOP
..专业知识编辑整理..