第四章 存 储
一、对MCS-51家族器件,0E0H,0FFH作为地址分别可以对应那些存储单元? 二、对MCS-51家族器件, 0F00H和2000H作为地址分别可以对应那些存储单元? 三、8051单片机又外接了一片2764 EPROM芯片。
问:EA脚接高电平与接低电平时,2764的首个存储单元地址各为多少?
四、在什么条件下,改变R3等效于改变1BH内部RAM单元?
*五、指出以下二列程序段在改变00H内部RAM单元上有什么不同?(设当前取0组工作寄存器区)
CLR RS1 SETB RS1 MOV 0,R0 MOV 0,R0 六、 指出以下操作的不同点:
CLR A CLR 0E0H MOV 0E0H,#0 MOV A,#0 七、 指出以下操作的后果:(对8052)
① CLR 0FFH MOV C,0FFH ② MOV 0FFH,#0 MOV A,0FFH ③ MOV R0,#0FFH MOV A,@R0 MOV 0FFH,A
为什么说工作寄存器组R0~R7是:“赋予存储器以寄存器性质”。而说特殊功能寄存器映象区是:“赋予寄存器以存储器性质”。
如果将RD“与”上PSEN并用此信号控制对外部RAM的读取,这时用: MOVC A,@A+DPTR
与 MOVX A,@DPTR
A是否取到相同的值?用MOVX @DPTR,A指令是否能改变程序?这种做法通常用在开发装置中,为什么? 八、 正误判断,并简述判断论点:
1、8051地址的低8位可以访问内部RAM和特殊功能寄存器区。 2、A与ACC的差别是ACC有地址而A却无地址。 3、改变R0等于改变0组工作寄存器区首个存储单元。
4、当RS0=0,RS1=0时,改变03H内部RAM单元等效于改变R3单元。
5、从指令的角度看,8051的程序存储区是“只读”的,即使用RAM器件作程序存
10
储区也一样。
6、位单元与内部RAM的字节单元或SFR映象单元的区别在于其地址不同。 7、8051中的内部RAM字节单元,除了20H~2FH外其余单元均不可以位寻址。 8、不可以位寻址的字节单元是不可以逐位操作的。 9、进入中断子程序,在开头用PUSH PSW 和 SETB RS0 后可以随意使用R0~R7,而不用担心改变主程序的R0~R7。
10、退出中断子程序前,用POP PSW 就可以自动恢复主程序中的所有工作寄存器。 11、对于8051,其外部程序存储区地址从1000H开始,而对于8031,从0000H开始。 12、在P1悬空时,可以将其作为存储单元使用。
13、F0既可以看作B寄存器、B的0位位单元以可以作为PSW中的用户标志0。 14、SFR中凡地址不能被8除尽的寄存器都不能位寻址理因为这些寄存器不允许逐位改变。
15、MCS-51元件将程序存储区与数据存储区分开是为了加密程序。
11
第五章 寻址
一、写出以下指令中“源”与“的”的寻址方式:
MOV A,#00H MOV 0,A MOV 30H,ACC ADD A,30H SUBB A,B MOV A,R0
MOV @R0,A MOV DPTR,#1234H MOVC A,@A+PC MOVX @DPTR,A JNZ LOOP SJMP stsrt AJMP start LJMP start CLR A SETB C INC DPTR PUSH ACC JMP @A+DPTR CLR 30H *二、手工汇编以下程序:
2000H: MOV R0,#40 ;2000H为程序存放首地址
MOV R3,#5 CLR A
LOOP: MOV @R0,A DEC A
DJNZ R3,LOOP MOV 30H,40H MOV C,30H AJMP 2678H
三、在以下程序中,数3FH最终传到了什么单元中?
Mov A,#3FH Mov R0,A Mov @R0,A
四、为什么说“立即寻址方式只能用于传送常数”?
*五、在“LJMP 2345H 指令”中,源是什么?来自哪个存储区间?的又是什么?它的作用是什么?
六、解释“指令地址”与“指令当前PC值”的区别?二者间的联系? 七、指令代码:“80H 0FEH”是什么操作?其中的“0FEH”是什么?执行该指令会产生什么效果?
*八、在地址07FFH处有一条指令,它的指令代码为:“81H 24H”(AJMP),问执行这条指令的效果是什么?
九、正、误判断,并简述判断论点:
1、LJMP指令从含义上说可视为立即寻址方式,而与SJMP指令对比,又可以说它是绝对寻址方式。
2、相对寻址方式即以该指令地址加上指令字节数作为坐标原点。
12
3、凡用SFR映象地址进行寻址的均为直接寻址而不是寄存器寻址方式。 4、用工作寄存器R0~R7寻址的其实就是直接寻址方式。 5、间变址寻址是将寄存器内容作为单元地址。(JMP @A+DPTR 除外) 6、二字节地址寻址的,如A,@DPTR均不能寻址内部RAM。 7、一字节地址寻址的,如A,@R0均不能寻址外部RAM。 8、在指令中只有R0、R1可以用作间址寄存器。
9、只有R0、R1的间址才能访问8052的80H~0FFH的内部RAM。
10、MOV A,@R0 当(R0)=40H时,该指令执行的效果等于MOV A,40H。 11、MOV @R0,A 当R0内容为HEX(HEX代表任一个单字节数)时,该指令执行的效果等于MOV HEX,A。
12、PC的值决定了在CPU内正要执行的指令的地址。 13、PC值永远指向下一条待执行指令的首地址上。
14、间变址寻址中,变址寄存器A中存的是单字节带符号数。
15、用同一条指令取到不同的数可以用直接寻址方式,而要取到不同单元中的数却要用到R间址方式。
13
第六章 指令
练习一
一、按要求写出指令:
1、 将数7FH传给由R1寻址的内部RAM单元中。 2、 交换A和B内容。 3、 将R2内容传给B。
4、 将4CH单元的内容与5CH单元的内容交换。 5、 将数6CH传给外部RAM的2C63H单元。
6、 将外部RAM的2000H单元内容传给R0所指的内部RAM单元中。
※ 7、将SP所指的内部RAM内容送到P2和R0所指的外部RAM单元中。 ※ 8、交换2000H和2010H外部RAM单元内容。 ※ 9、将位单元30H与42H对换。
二、写出执行以下程序后A,B的值,并汇编该程序: 1、 Mov A,#3CH
Mov B,#4CH Mov R0,B XCH A,@R0 XCH A,B Mov A,@R0
2、 MOV DPTR,#2000H
MOV 20H,#3CH MOV R1,#20H MOV A,20H MOVX @DPTR,A CXH A,R1
MOVX A,@DPTR XCH A,B
练习二
一、按要求写出指令:
1、 将A中的数减去B中的数,结果存入A中。 2、 将B中的数减去A中的数,结果存入A中。 3、 用加法指令完成将R0所指单元中的数乘2。 4、 将B中的数乘以A中的数。 5、 将B中的数除以A中的数。 6、 将R1所指单元内容增1。
※ 7、将R0所指的二字节单元(R0指在低字节上,下同)内容增1。 ※ 8、将R0所指的二字节单元内容减1。
14