单片机与微机原理第六章
2. 80C51单片机有哪几种寻址方式?这几种寻址方式是如何寻址的?
7种
立即寻址:在这种寻址方式中,由指令直接给出参与操作的数据。
直接寻址:在这种寻址方式中,操作数项给出的是参加运算的操作数的地址。
寄存器寻址:由指令指出某一寄存器的内容做为操作数。
寄存器间接寻址:在这种寻址方式中,操作数所指定的寄存器中存放的不是操作数本身,而是操作数的地址。
变址寻址:这种寻址方式以DPTR或PC为基址寄存器,累加器A为变址寄存器。
变址寻址时,把两者的内容相加,所得到的结果作为操作数的地址,这种方式常用于查表操作。
相对寻址:通常用于相对转移指令中。
位寻址:是指对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器中的任一二进制位进行位操作时的寻址方式。
3.要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式?
特殊功能寄存器:直接寻址、寄存器寻址和位寻址
片外数据寄存器:间接寻址
5.外部数据传送指令有哪几条?试比较下面每一组中两条指令的区别。
MOVX A, @DPTR ;((DPTR))→A
MOVX @DPTR, A ;(A)→(DPTR)
MOVX A, @Ri ;((Ri))→A
MOVX @Ri, A ;(A)→(Ri)
(1)MOVX A, @R0;MOVX A, @DPTR
前者只占用P0口,输出8位地址;后者占用P0、P2口,输出DPTR中的16位地址。
(2)MOVX @R0, A;MOVX @DPTR, A
写外部存储器指令,寻址范围不同。
(3)MOVX A, @R0;MOVX @R0, A
前者是读外部指令,后者是写外部指令。
6.在80C51系列单片机的片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H,请分析下段程序中各指令的作用,并翻译成相应的机器码,说明源操作数的寻址方式,按顺序执行每条指令后的结果。
MOV A,40H ;A=48H;直接寻址;E540
MOV R0,A ;R0=48H;寄存器寻址;F8
MOV P1,#0FFH ;P1=FFH;立即数寻址;7590F0
MOV @R0,30H ;(48H)=38H;直接寻址;A630
MOV DPTR,#1246H ;DPTR=1246H;立即数寻址;901246
MOV 40H,38H ;(40H)=40H;直接寻址;853840
MOV R0,30H ;R0=38H;直接寻址;A830
MOV 90H,R0 ;(90H)=38H;寄存器寻址;8890
MOV 48H,#30H ;(48H)=30H;立即数寻址;754830
MOV A,@R0 ;A=40H;寄存器间接寻址;E6
MOV P2,P1 ;P2=38H;直接寻址;8590A0
7.试说明下列指令的作用,执行最后一条指令对PSW有何影响?累加器A的终值为多少?
(1)MOV R0,#72H ;R0=72H
MOV A,R0 ;A=72H,P=0
ADD A,#4BH ;A=BDH,CY=0,OV=1,AC=0,P=0
(2) MOV A,#02H ;A=02H,P=1
MOV B,A ;B=02H
MOV A,#0AH ;A=0AH,P=0
ADD A,B ;A=0CH,CY=0,OV=0,AC=0,P=0
MUL AB ;A=18H,B=0,CY=0,OV=0,AC=0,P=0
(3)MOV A,#20H ;A=20H,P=1
MOV B,A ;B=20H
ADD A,B ;A=40H,CY=0,OV=0,AC=0,P=1
SUBB A,#10H ;A=30H,CY=0,OV=0,AC=0,P=0
DIV AB ;A=01H,B=10H,CY=0,OV=0,AC=0,P=1
10.试编程将寄存器R7的内容传送到R1中去。
MOV A,R7
MOV R1,A
12.试说明下段程序中每条指令的作用,并分析当指令执行完后,R0中的内容是什么?
MOV R0,#0A7H ;R0=A7H,立即数送寄存器R0
XCH A,R0 ;A=A7H,累加器A中的数据与R0中的数据进行交换SWAP A ;A=7AH,累加器A中的高低四位进行交换
XCH A,R0 ;R0=7AH,数据交换回R0
15.已知:(A)=0C9H,(B)=8DH,CY=1。
执行指令“ADDC A,B”结果如何?
A=57H,CY=1,OV=1,AC=1,P=1
执行指令“SUBB A,B”结果如何?
A=3BH,CY=0,AC=1,OV=1
16.试编程将片外RAM中30H和31H单元中的内容相乘,结果存放在32H和33H 单元中,高位存放在33H单元中。
MOV R0,#30H
MOVX A,@R0
MOV B,A
INC R0
MOVX A,@R0
MUL AB
INC R0
MOVX @R0,A
MOV A,B
INC R0
MOVX @R0,A
18.请分析依次执行下列指令的结果。
MOV 30H,#0A4H ;(30H)=A4H
MOV A,#0D6H ;A=D6H
MOV R0,#30H ;R0=30H
MOV R2,#47H ;R2=47H
ANL A,R2 ;A=46H
ORL A,@R0 ;A=E6H
SWAP A ;A=6EH
CPL A ;A=91H
XRL A,#0FFH ;A=6EH
ORL 30H,A ;(30H)=EEH
19.说明下列指令执行后,累加器A及PSW中CY、P和OV位的值。
(1)当(A)=5BH时;ADD A,#8CH
A=E7H,CY=1,P=0,OV=0
(2)当(A)=5BH时;ANL A,#7AH
A=5AH ,P=0
(3)当(A)=5BH时;XRL A,#7FH
A=24H ,P=0
(4)当(A)=5BH,CY=1时;SUBB A,#0E8H
A=72H,CY=1,P=0,OV=0
20.指令“LJMPaddr16”和“AJMP addr11”的区别是什么?
跳转的范围不一样,LJMP可以跳转16bit的范围,AJMP只能跳转11bit的范围。
21.试说明指令“CJNE @R1,#7AH,10H“的作用。
若本指令地址为250H,其转移地址是多少?
作用:如果以R1内容为地址的单元中的数据等于7AH,则程序顺序执行,否则转移后继续执行。
若本指令地址为250H,则转移地址为250H+03H+10H= 263H。
23.下述程序执行后,(SP)=?(A)=?(B)=?解释每一条指令的作用。
ORG 200H
MOV SP,#40H ;SP=40
MOV A,#30H ;A=30
LCALL 250H ;调用250H开始的子程序SP=42H,(42H)=02H,(41H)=08H
ADD A,#10H
MOV B,A ;B=30H
L1: SJMP L1
ORG 250H
MOV DPTR,#20AH ;DPTR=020AH
PUSH DPL ;DPL进栈,SP=43H,DPL→(43H)
PUSH DPH ;DPH进栈,SP=44H,DPH→(44H)
RET ;返回,PC=020AH,SP=42H。