单片机微型计算机原理及接口技术课后习题答案第4章

更新时间:2023-05-08 19:28:04 阅读: 评论:0

单片机微型计算机原理及接口技术课后习题答案第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,relCJNE 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        ;十进制调整
      MOV 30H,A  ;送回原处
      RET
答:假设2字节压缩BCD码分别存储在地址30H和40H开始的存储单元中,结果存到50H开始的存储单元中,其中高位地址存放高位数据(例BCD码分别1001H,2002H,则(30H)=10H; (31H)=01H; (40H)=20H; (41H)=02H),
BCDAD: MOV R0,#31H
      MOV R1,#41H
      MOV A,@R0 ;取第一(低)字节(BCD码)
ADD A,@R1 ;加第一(低)字节(BCD码)
DA  A
MOV  51H,A  ;存第一字节和(BCD码)
DEC R0  ; R0指向第二(高)字节BCD码 
DEC R1  ; R1指向第二(高)字节BCD码
MOV A,@R0 ;取第二(高)字节BCD码
ADD A,@R1 ;加第二(高)字节(BCD码)
DA  A
MOV  50H,A  ;存第一字节和(BCD码)
RET
4-8 已知在33H-30H中放有一个32位二进制数(设为原码数),要求将其转换为补码送入原地址中,其中高位地址存放高位数据
:严格说本题需要先判断32位二进制数是正数还是负数,也就是判断33H的D7位是否为
1,若是1,表明此32位数是负数,就进行补码运算,若是正数,就不需要求补码运算。
SUBCPL: MOV A,33H
JNC ACC.7,SUBRETURN
MOV A,30H
CPL A
ADD A, #01H; 这里不但加1,而且还要关心加1后数据是否有进位,所以不能用INC A
MOV 30H,A
MOV A,31H
CPL A
ADDC A, #00H; 这里加法的作用是将前数加1后的进位加进来,所以不能用INC A
MOV 31H,A
MOV A,32H
CPL A
ADDC A, #00H; 这里加法的作用是将前数加进位后,若有进位也加进来,所以不能用INC A
MOV 32H,A
MOV A,33H
CPL A
ADDC A, #00H; 这里加法的作用是将前数加进位后,若有进位也加进来,所以不能用INC A
SETB ACC.7; 这里加法的作用
MOV 33H,A
SUBRETURN: RET
    END
4-9 执行下面的指令
MOV A,#34H
MOV B,#40H
MUL AB
执行后,A寄存器中的数据是(00H),B寄存器中的数据是(0DH)
4-10 
;XRL  A, A ;该指令有错,编译时会显示错误:INVALID REGISTER,应该修改为:
XRL  A, ACC ;(或者改为XRL  ACC, A)
INC  A
ADDC  A, #0A6H
DA  A
上述指令执行后,A的内容是(07H),CY是(1)
4-11 假定30H单元开始的4个字节存放的是1个32位无符号数,40H单元开始的4个字节存放的是另一个32位无符号数,低位地址中存放低位数据,使说明下列程序段完成什么功能?请给每条指令后加上注释。
        MOV  R0,#33H  ;将立即数33存放到工作寄存器R0中
        MOV  R1,#43H  ;将立即数43存放到工作寄存器R1中
        MOV  R2,#04  ;将立即数43存放到工作寄存器R1中
LOOPA: MOV  A,@R0      ;将R0的内容33H送A
      CJNE  A,@R1,L1    ;比较33H和R1的内容43H的大小,如果相等,就继续向下执行,如果不相等,且(33H)<(43H),CY=1,转L1执行
      DEC  R0          ;R0 R0-1,指向下个存储单元32H(31H,30H)
      DEC  R1        ;  R1 R1-1,指向下个存储单元42H(41H,40H)
      DJNZ  R2,LOOPA  ;若R2-1=0,则向下执行,若R2-1≠0,则执行循环LOOPA
EQUAL: SJMP  L3  ;转L3执行
L1:  JNC    L4  ;若CY=1,即(R0)<(R1),继续执行;若CY≠1,即(R0)>(R1),转L4执行
      SJMP  L5  ;转L5执行
      …
L3:  …
      …
L4:  …
      …
L5:  …
      …
功能:比较两个32位无符号数(30H开始的4个字节单元和40H开始的4个字节单元)的大小,并且根据比较结果(相等,大于,小于),分别执行不同的操作。
4-12 指令DJNZ R0,LOOPN的循环执行条件是(D
(A)R0≠0且R0-1=0
(B)R0≠0或CY=1
(C)R0≠0或R0+1=0
(D)R0≠0且R0-1≠0
注:本题指令DJNZ R0,LOOPN,在R0=0时也执行循环,因R0-1=255≠0。
4-13 已知一数据区中的数据为:(本题是微机原理的程序,对单片机错误较多,取消,或者做如下改正)
STR1  DB 0,1;  改为:STR1:  DB  0,1;
STR2  DB '45';  改为:STR2:  DB '45';
NUMB DB 2DUP(0);  改为:NUMB:  DB 2DUP(0);
NUMW DB  10H ,-60H;  改为:NUMW: DB  10H ,-60H

本文发布于:2023-05-08 19:28:04,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/100995.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指令   数据   寻址   地址
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图