[转载]单片机原理及接口技术课后习题答案 李朝青


 

第三章

1、  指令:CPU根据人的意图来执行某种操作的命令

指令系统:一台计算机所能执行的全部指令集合

机器语言:用二进制编码表示,计算机能直接识别和执行的语言

汇编语言:用助记符、符号和数字来表示指令的程序语言

高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言

2、  见第1题

3、  操作码   [目的操作数]  [,源操作数]

4、   

 

寻址方式

寻址空间

立即数寻址

程序存储器ROM

直接寻址

片内RAM低128B、特殊功能寄存器

寄存器寻址

工作寄存器R0-R7、A、B、C、DPTR

寄存器间接寻址

片内RAM低128B、片外RAM

变址寻址

程序存储器(@A+PC,@A+DPTR)

相对寻址

程序存储器256B范围(PC+偏移量)

位寻址

片内RAM的20H-2FH字节地址、部分SFR

5、  SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址

6、  MOV    A,40H  ;直接寻址   (40H)→A

   MOV   R0,A    ;寄存器寻址   (A)→R0

   MOV   P1,#0F0H  ;立即数寻址   0F0→P1

   MOV   @R0,30H  ;直接寻址 (30H) →(R0)

   MOV   DPTR,#3848H  ;立即数寻址   3848H→DPTR

   MOV   40H,38H    ;直接寻址 (38H) →40H

   MOV   R0,30H     ;直接寻址 (30H) →R0

   MOV   P0,R0      ;寄存器寻址   ( R0 )→P0

   MOV   18H,#30H  ;立即数寻址   30H→18H

   MOV   A,@R0    ;寄存器间接寻址 ((R0)) →A

   MOV   P2,P1     ;直接寻址 (P1)→P2

最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H

注意:→左边是内容,右边是单元

7、  用直接寻址,位寻址,寄存器寻址

8、   

MOV     A,DATA  ;直接寻址      2字节1周期

       MOV     A,#DATA       ;立即数寻址   2字节1周期

       MOV     DATA1,DATA2      ;直接寻址      3字节2周期

       MOV     74H,#78H      ;立即数寻址   3字节2周期

如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A

9、

       MOV      A,@R0   ;((R0))=80H→A

       MOV      @R0,40H       ;(40H)=08H→(R0)

       MOV      40H,A     ;(A)=80→40H

       MOV      R0,#35H ;35H→R0

最后结果:(R0)=35H    (A)=80H,(32H)=08H,(40H)=80H

10、用直接寻址,位寻址,寄存器寻址

11、只能采用寄存器间接寻址(用MOVX指令)

12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7)

高128字节:直接寻址,位寻址,寄存器寻址

13、采用变址寻址(用MOVC指令)

14、压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DA  A指令调整(加06H,60H,66H)

15、用来进行位操作

16、ANL   A,#17H      ;83H∧17H=03H→A

ORL    17H,A        ;34H∨03H=37H→17H

XRL    A,@R0        ;03H⊕37H=34H

CPL    A             ;34H求反等于CBH

所以(A)=CBH

17、(1)SETB  ACC.0或SETB  E0H    ;E0H是累加器的地址

(2)CLR ACC.7

   CLR  ACC.6

   CLR  ACC.5

   CLR  ACC.4

(3)CLR  ACC.6

   CLR  ACC.5

   CLR  ACC.4

   CLR  ACC.3

18、MOV  27H,R7

MOV  26H,R6

MOV  25H,R5

MOV  24H,R4

MOV  23H,R3

MOV  22H,R2

MOV  21H,R1

MOV  20H,R0

19、MOV  2FH,20

    MOV  2EH,21

    MOV  2DH,22

20、CLR  C

MOV  A,#5DH     ;被减数的低8位→A

MOV  R2,#B4H    ;减数低8位→R2

SUBB  A,R2       ;被减数减去减数,差→A

MOV  30H,A       ;低8位结果→30H

MOV  A,#6FH     ;被减数的高8位→A

MOV  R2,#13H    ;减数高8位→R2

SUBB  A,R2       ;被减数减去减数,差→A

MOV  31H,A       ;高8位结果→30H

注意:如果在你的程序中用到了进位位,在程序开始的时候要记得清0进位位

21、(1)A≥10

CJNE  A,#0AH,L1     ;(A)与10比较,不等转L1

LJMP  LABEL           ;相等转LABEL

L1:JNC   LABEL           ;(A)大于10,转LABEL

或者:

CLR C

SUBB  A,#0AH

JNC   LABEL

(2)A>10

CJNE  A,#0AH,L1     ;(A)与10比较,不等转L1

RET                   ;相等结束

L1:JNC  LABEL            ;(A)大于10,转LABEL

    RET                   ;(A)小于10,结束

或者:

CLR C

SUBB  A,#0AH

JNC   L1

RET

L1:JNZ  LABEL

RET

(3)A≤10

CJNE  A,#0AH,L1     ;(A)与10比较,不等转L1

L2:LJMP  LABEL           ;相等转LABEL

L1:JC   L2           ;(A)小于10,转L2

RET

或者:

CLR C

SUBB  A,#0AH

JC   LABEL

JZ  LABEL

RET

22、(SP)=23H,(PC)=3412H

参看书上80页

23、(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H

参看书上79页

 

24、不能。ACALL是短转指令,可调用的地址范围是2KB。

在看这个题的时候同时看一下AJMP指令。同时考虑调用指令ACALL和LCALL指令和RET指令的关系。

25、   MOV  R2,#31H   ;数据块长度→R2

       MOV  R0,#20H   ;数据块首地址→R0

LOOP:MOV  A,@R0     ;待查找的数据→A

        CLR  C            ;清进位位

        SUBB A,#0AAH    ;待查找的数据是0AAH吗

        JZ   L1            ;是,转L1

        INC  R0            ;不是,地址增1,指向下一个待查数据

        DJNZ  R2,LOOP   ;数据块长度减1,不等于0,继续查找

        MOV  51H,#00H   ;等于0,未找到,00H→51H

        RET

   L1:MOV  51H,#01H    ;找到,01H→51H

        RET

26、    MOV  R2,#31H     ;数据块长度→R2

        MOV  R0,#20H   ;数据块首地址→R0

LOOP:MOV  A,@R0     ;待查找的数据→A

        JNZ  L1            ;不为0,转L1

        INC  51H           ;为0,00H个数增1

    L1:INC  R0            ;地址增1,指向下一个待查数据

        DJNZ  R2,LOOP   ;数据块长度减1,不等于0,继续查找

        RET

27、    MOV  DPTR,#SOURCE    ;源首地址→DPTR

        MOV  R0,#DIST           ;目的首地址→R0

 LOOP:MOVX  A,@DPTR         ;传送一个字符

         MOV  @R0,A

         INC  DPTR                ;指向下一个字符

         INC  R0

         CJNE  A,#24H,LOOP     ;传送的是“$”字符吗?不是,传送下一个字符

         RET

28、   MOV  A,R3    ;取该数高8位→A

       ANL   A,#80H  ;取出该数符号判断

       JZ  L1           ;是正数,转L1

       MOV  A,R4     ;是负数,将该数低8位→A

       CPL  A           ;低8位取反

       ADD  A,#01H   ;加1

       MOV  R4,A     ;低8位取反加1后→R4

       MOV  A,R3     ;将该数高8位→A

       CPL  A           ;高8位取反

       ADDC  A,#00H   ;加上低8位加1时可能产生的进位

       MOV  R3,A     ;高8位取反加1后→R3

  L1: RET

29、   CLR  C          ;清进位位C

       MOV  A,31H    ;取该数低8位→A

       RLC  A           ;带进位位左移1位

       MOV  31H,A     ;结果存回31H

       MOV  A,30H    ;取该数高8位→A

       RLC  A           ;带进位位左移1位

       MOV  30H,A     ;结果存回30H

30、   MOV  R2,#04H     ;字节长度→R2

       MOV  R0,#30H   ;一个加数首地址→R0

       MOV  R1,#40H   ;另一个加数首地址→R1

       CLR  C            ;清进位位

LOOP:MOV  A,@R0     ;取一个加数

        ADDC  A,@R1     ;两个加数带进位位相加

        DA  A             ;十进制调整

        MOV  @R0,A     ;存放结果

        INC  R0            ;指向下一个字节

        INC  R1            ;

        DJNZ  R2,LOOP   ;数据块长度减1,不等于0,继续查找

        RET

31、   MOV  R2,#08H     ;数据块长度→R2

        MOV  R0,#30H   ;数据块目的地址→R0

        MOV  DPTR,#2000H  ;数据块源地址→DPTR

LOOP:MOVX  A,@ DPTR     ;传送一个数据

        MOV  @R0,A        

        INC  DPTR          ;指向下一个数据

        INC  R0            ;

        DJNZ  R2,LOOP   ;数据块长度减1,没传送完,继续传送

        RET

32、(1)MOV  R0,0FH    ;2字节,2周期    4字节4周期(差)

        MOV  B,R0       ;2字节,2周期

   (2)MOV  R0,#0FH    ;2字节,1周期    4字节3周期(中)

        MOV  B,@R0     ;2字节,2周期

   (3)MOV  B,#0FH    ;3字节,2周期    3字节2周期(好)

33、(1)功能是将片内RAM中50H~51H单元清0。

   (2)7A0A (大家可以看一下书上,对于立即数寻址的话,后面一个字节存放的是立即数)   7850 (第一个字节的后三位是寄存器,前一个条指令是010也就是指的R2,在这里是R0,所以应该是78,后一个字节存放的是立即数)    DAFC  (这里涉及到偏移量的计算,可以参考书上56页)

34、    INC  @R0     ;(7EH)=00H

        INC  R0     ;(R0)=7FH

        INC  @R0     ;(7FH)=39H

        INC  DPTR    ;(DPTR)=10FFH

        INC  DPTR    ;(DPTR)=1100H

       INC  DPTR    ;(DPTR)=1101H

35、解:(1000H)=53H    (1001H)=54H       (1002H)=41H

       (1003H)=52H    (1004H)=54H       (1005H)=12H

       (1006H)=34H    (1007H)=30H       (1008H)=00H

       (1009H)=70H

36、MOV   R0,#40H      ;40H→R0

MOV  A,@R0        ;98H→A

INC    R0              ;41H→R0

ADD    A,@R0        ;98H+(41H)=47H→A

INC  R0               

MOV   @R0,A          ;结果存入42H单元

CLR   A               ;清A

ADDC  A,#0           ;进位位存入A

INC  R0 

MOV  @R0,A         ;进位位存入43H

功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H单元,(R0)=43H,(A)=1,(40H)=98H,(41H)=AFH,(42H)=47H,(43H)=01H

37、   MOV   A,61H       ;F2H→A

       MOV   B,#02H         ;02H→B

       MUL  AB               ;F2H×O2H=E4H→A

       ADD A,62H            ;积的低8位加上CCH→A

       MOV  63H,A           ;结果送62H

       CLR  A                ;清A

       ADDC  A,B            ;积的高8位加进位位→A

       MOV  64H,A           ;结果送64H

功能:将61H单元的内容乘2,低8位再加上62H单元的内容放入63H,将结果的高8位放在64H单元。(A)=02H,(B)=01H,(61H)=F2H,(62H)=CCH,(63H)=B0H,(64H)=02H

39、MOV  A,XXH

ORL  A,#80H

MOV XXH,A

40、(2)MOV   A,XXH

        MOV   R0,A

        XRL    A,R0

  评论这张
microblog.png?1 转发至微博
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值