寻址方式和指令习题一、选择题1、MOVX A,@DPTR指令中源操作数的寻址方式是()(A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址2、ORG 0003HLJMP 2000HORG 000BHLJMP 3000H当CPU响应外部中断0后,PC的值是()(A)0003H (B)2000H (C)000BH (D)3000H3、执行PUSH ACC指令,MCS-51完成的操作是()(A)SP+1 SP (ACC)(SP)(B)(ACC)(SP)SP-1 SP(C)SP-1 SP (ACC)(SP) (D)(ACC)(SP)SP+1 SP4、LCALL指令操作码地址是2000H,执行完相子程序返回指令后,PC=()(A)2000H (B)2001H (C)2002H (D)2003H5、51执行完MOV A,#08H后,PSW的哪一位被置位()(A)C (B)F0 (C)OV (D)P6、下面条指令将MCS-51的工作寄存器置成3区()(A)MOV PSW,#13H (B)MOV PSW,#18H(C)SETB PSW.4 CLR PSW.3 (D) SETB PSW.3 CLR PSW.47、执行MOVX A,@DPTR指令时,MCS-51产生的控制信号是()(A)/PSEN (B)ALE (C)/RD (D)/WR8、MOV C,#00H的寻址方式是()(A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址9、ORG 0000HAJMP 0040HORG 0040HMOV SP,#00H当执行完上面的程序后,PC的值是()(A)0040H (B)0041H (C)0042H (D)0043H10、对程序存储器的读操作,只能使用()(A)MOV指令(B)PUSH指令(C)MOVX指令(D)MOVC指令二、判断题1、MCS-51的相对转移指令最大负跳距是127B。
()2、当MCS-51上电复位时,堆栈指针SP=00H。
()3、调用子程序指令(如:LCALL)及返回指令(如:RET)与堆栈有关但与PC 无关。
()下面几条指令是否正确:4、MOV @R1,#80H ( )5、INC DPTR ( )6、CLR R0 ( )7、MOV @R1,#80H ()8、ANL R1,#0FH ()9、ADDC A,C ()10、XOR P1,#31H ( )三、问答题1 简述MCS-51 汇编语言指令格式。
2 MCS-51指令系统主要有哪几种寻址方式?试举例说明。
3对访问内部RAM和外部RAM,各应采用哪些寻址方式?4设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行下列指令后,各有关存储单元(即R0,R1,A,B,P1,30H,40H及5AH 单元)的内容如何?5 SJMP(短转移)指令和AJMP(绝对转移)指令的主要区别。
四、编程题1 编程将片内RAM 30H单元开始的15B的数据传送到片外RAM 3000H开始的单元中去。
2 片内RAM 30H开始的单元中有10B的二进制数,请编程求它们之和(和<256)。
3 编一个程序,将累加器中的一个字符从串行接口发送出去。
4 用查表法编一子程序,将R3中的BCD码转换成ASCII码。
5 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H 单元中。
6 编一子程序,从串行接口接受一个字符。
7 利用调用子程序的方法,进行两个多字节无符号数相加。
请编主程序及子程序。
8 若有一数据块是有符号数,求正数个数。
编程并注释。
9 编制一个循环闪烁灯的程序。
有8个发光二极管,每次其中某个灯闪烁点亮10次后,转到下一个闪烁10次,循环不止。
画出电路图。
答案一、选择题1、MOVX A,@DPTR指令中源操作数的寻址方式是(B)(A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址2.ORG 0003HLJMP 2000HORG 000BHLJMP 3000H当CPU响应外部中断0后,PC的值是(B)(A) 0003H (B)2000H (C)000BH (D)3000H3.执行PUSH ACC指令,MCS-51完成的操作是(A)(A)SP+1 SP (ACC)(SP)(B)(ACC)(SP)SP-1 SP (C)SP-1 SP (ACC)(SP) (D)(ACC)(SP)SP+1 SP 4、LCALL指令操作码地址是2000H,执行完相子程序返回指令后,PC=(D)(A) 2000H (B)2001H (C)2002H (D)2003H5、51执行完MOV A,#08H后,PSW的哪一位被置位?(D)(A)C (B)F0 (C)OV (D)P6、下面哪条指令将MCS-51的工作寄存器置成3区(B)(A)MOV PSW,#13H (B)MOV PSW,#18H(C)SETB PSW.4 CLR PSW.3 (D) SETB PSW.3 CLR PSW.47、执行MOVX A,@DPTR指令时,MCS-51产生的控制信号是(C)(A) /PSEN (B)ALE (C)/RD (D)/WR8、MOV C,#00H的寻址方式是(A)(A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址9、ORG 0000HAJMP 0040HORG 0040HMOV SP,#00H当执行完上边的程序后,PC的值是(D)(A)0040H (B)0041H (C)0042H (D)0043H10、对程序存储器的读操作,只能使用(D)(A)MOV指令(B)PUSH指令(C)MOVX指令(D)MOVC指令二、判断题。
1、MCS-51的相对转移指令最大负跳距是127B。
(错)-128B2、当MCS-51上电复位时,堆栈指针SP=00H。
(错)(SP=07H)3、调用子程序指令(如LCALL)及返回指令(如RET)与堆栈有关但与PC无关。
(错)子序的转返与PC也有关(PC入栈与出栈)4、MOV @R1,80H (对)5、INC DPTR (对)6、CLR R0 (错) 指令系统中没有。
7、MOV @R1,#80H (对)8、ANL R1,#0FH (错)A或direct9、ADDC A,C (错)字节、位10、XOR P1,#31H (对)三、简答题1 简述MCS-51汇编语言指令格式。
答:MCS-51汇编语言格式如下:[标号:]操作码助记符[操作数1] [,操作数2] [,操作数3][;注释]标号是用户定义的符号,其值代表这条指令的地址。
操作码助记符是指令系统规定的代表特定指令功能的英文缩写符。
每条指令都有操作码记符。
指令的操作数最多有3个,也有无操作数的指令。
注释字段是用户对程序的说明,便于对程序的阅读和理解。
2 MCS-51指令系统主要有哪几种寻址方式?试举例说明。
答:MCS-51指令操作数主要有以下7种寻址方式:寻址方式举例立即寻址MOV A,#16直接寻址MOV 20H,P1寄存器寻址MOV A,R0寄存器间接寻址MOVX A, @DPTR变址寻址MOVC A, @A+DPRT相对寻址SJMP LOOP位寻址ANL C,70H3对访问内部RAM和外部RAM,各应采用哪些寻址方式?答:对内部RAM的寻址方式有直接寻址、寄存器间接寻址和位寻址区的位寻址。
对外部RAM的寻址方式只能用寄存器R0/R1(8位地址)或DPTR(16位地址)间接寻址。
4设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行下列指令后,各有关存储单元(即R0,R1,A,B,P1,30H,40H及5AH 单元)的内容如何?MOV R0,#30H ;R0=30HMOV A,@R0 ;A=5AHMOV R1,A ;R1=5AHMOV B,R1 ;B=5AHMOV @R1,P1 ;(5AH)=7FHMOV A,P1 ;A=7FHMOV 40H,#20H ;(40H)=20HMOV 30H,40H ;(30H)=20H解:每一条指令执行后的结果如注释字段所标。
最后结果为:R0=30H,R1=5AH,A=7FH,B=5AH,P1=7FH,(30H)=20H,(40H)=20H,(5AH)=7FH。
5 SJMP(短转移)指令和AJMP(绝对转移)指令的主要区别。
前者提供了以SJMP的下一条指令的起始地址为中心的256字节范围的转移(-128~+127),后者的转移目标地址必须在与AJMP的下一条指令的第一字节相同的2KB 区的程序储存器中。
短转移SJMP方便PC可重定位编码,但转移范围小。
而ASJMP转移范围大,但存在跳区的限制,AJMP指令只有位于2KB区的最后2个字节处时,才可跳到下一个区去。
因此用AJMP指令来代替SJMP指令是有条件的,也就是目标地址必须与它下面的指令存放地址在同一个2KB区域内。
四、编程题1 编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。
解:STRAT:MOV R0,#30HMOV R7,#0FH;循环次数,用#15更直观MOV DPTR,#3000HLOOP:MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R7,LOOPRET2 片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256 ).解ADD10:MOV R0,#30HMOV R7,#9;循环次数MOV A,@R0LOOP:INC R0ADD A,@R0DJNZ R7,LOOPMOV 30H,ARET3 编一个程序,将累加器中的一个字符从串行接口发送出去.解SOUT:MOV SCON,#40H ;设置串行接口为工作方式1,8位传送MOV TMOD,#20H ;定时器T1工作于模式2,作波特率发生器MOV TL1,#0E8H; ;设置波特率为1200b/sMOV TH1,#0E8HSETB TR1MOV SBUF,AJNB TI,$CLB TIRET4 用查表法编一子程序,将R3中的BCD码转换成ASCII码.解MAIN: MOV A,R3 ;待转换的数送AMOV DPTR,#TAR ;表首地址送DPTRMOVC A,@A+DPTR ;查ASCII码表MOV R3,A ;查表结果送R3RETTAR:DB 30H,31H,32H,33H,34HDB 35H,36H,37H,38H,39H5 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中.解START: MOV R0,#40H ;数据块首地址送R0MOV R7,#09H ;比较次数送R7MOV A,@R0 ;取数送ALOOP: INC R0MOV 30H,@R0 ;取数送30HCJNE A,30H,NEHT ;(A)与(30H)相比NEXT: JNC BIE1 (A)≥(30H)转BIE1MOV A,30H ;(A)<(30H),大数送A BIE1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较MOV 50H,A ;比较结束,大数送50HRET6 编一子程序,从串行接口接受一个字符.解:START: MOV TMOD,#20H ;定时器T1工作于模式2,作波特率发生器MOV TH1,#0E8H ;设置波特率为1200b/sMOV TL1,#0E8HSETB TR1 ;启动T1MOV SCON,#50H ;串行接口工作于方式1,8位传送,置位REN,开始接收L1: JNB RI,L1 ;等待接收数据,末接收到数据,继续等待CLR RI ;接收到数据,清RIMOV A,SBUF ;接收到数据送ARET7 利用调子程序的方法,进行两个多字节无符号数相加。