单片机微型计算机原理及接口技术课后习题答案第4章
4-1 分别指出下列指令中的源操作数和目的操作数的寻址方式
源操作数寻址方式
目的操作数寻址方式
(1)MOV P1,20H
直接寻址
直接寻址
(2)MOV A,#30H
立即数寻址
寄存器寻址
(3)ADD A,@R1
寄存器间接寻址
寄存器寻址
(4)ANL A,B
寄存器寻址
寄存器寻址
(5)MOV 33H,A
寄存器寻址
直接寻址
(6)SETB C
位寻址
位寻址
(7)CLR C
位寻址
位寻址
4-2 试述指令 MOV A,R0和MOV A,@R0的区别
两条指令的目的操作数相同,两条指令的区别在于源操作数来源不同:MOV A,R0 指令的源操作数就是R0寄存器的内容;而MOV A,@R0 指令的源操作数是位于存储器单元内,且存储器单元的地址是R0寄存器的内容。
4-3 试述指令MOV A,20H和MOV A,#20H的区别
MOV A,20H 源操作数是直接寻址,20H表示源操作数所在存储器单元的地址。
MOV A,#20H 源操作数是立即数寻址,#20H是立即数,也就是源操作数。
4-4 说明一下指令中源操作数所在的存储器类型。
(1)MOV A,#30H; 立即数#30H,就是源操作数,存在于指令中,所以位于程序存储器。
(2)MOV A,30H; 30H是源操作数所在数据存储单元的地址,所以源操作数位于数据存储器。
(3)MOVC A,@A+DPTR;源操作数是变址寻址, 助记符MOVC表示源操作数位于程序存储器。
(4)MOVX A,@DPTR; 源操作数是寄存器间接寻址, 助记符MOVX表示源操作数位于外部数据存储器。
4-5 判断下列指令书写是否正确:
(1)MOV A,B; ?
(2)MOV A,#3000H ; ?,因为A是8位寄存器,而#3000H是16位数值,没法全部存到A里
(3)INC,#20H ; ? 只能INC A/direct/Rn/@Ri/DPTR
(4)MOV 5,A ; ?,注意目的操作数是直接寻址方式,不是立即寻址
(5)MOV 30H,40H; ?
(6)MOV B,@DPTR ; ?,@DPTR寻址用于MOVX指令,不能用于MOV指R
(7)CJNE 30H,#80H,NEXT ; ?, CJNE指令格式只能是CJNE A/Rn/@Ri,#data,rel或CJNE A,direct,rel
(8)POP A ; ? 只能是直接寻址方式POP direct,正确的是POP ACC
(9)PUSH ACC; ?
(10)SJMP 2000H ; ? rel的范围是-128~127(用补码表示其值)共256B范围
4-6 设ACC=12H,B=64H,SP=60H,30H中存放的是78H,试分析下列程序执行后,ACC、B、30H、SP中的内容分别为多少,并画出堆栈示意图。
程序:PUSH ACC
PUSH B
PUSH 30H
POP ACC
POP B
POP 30H
62H 62H
61H SP 61H
SP 60H 12H 60H
SP
SP 62H 78H 62H
64H 61H 64H 61H
12H 60H 12H 60H
SP 62H 62H 62H
64H 61H SP 61H 61H
12H 60H 12H 60H SP 60H
ACC=78H; B=64H; (30H)=12H; SP=60H
4-7 下面是一个压缩BCD码相加的程序,参考其设计1个2字节压缩BCD码加法程序。
BCDAD: CLR C
MOV A,30H ;A中为加数
ADDC A,40H ;实现8位相加
DA A ;十进制调整