第3章指令系统
1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。
1、指令:CPU根据人的意图来执行某种操作的命令
指令系统:一台计算机所能执行的全部指令集合
机器语言:用二进制编码表示,计算机能直接识别和执行的语言
汇编语言:用助记符、符号和数字来表示指令的程序语言
高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言
2,什么是计算机的指令和指令系统?
2、见第1题。
3,简述89C51汇编指令格式。
3、操作码  [目的操作数]  [,源操作数]
4,简述89C51寻址方式和所能涉及的寻址空间。
4、
寻址方式
寻址空间
立即数寻址
程序存储器ROM
直接寻址
片内RAM128B、特殊功能寄存器
寄存器寻址
工作寄存器R0-R7ABCDPTR
寄存器间接寻址
片内RAM128B、片外RAM
变址寻址
源程序能直接执行吗
程序存储器(@A+PC,@A+DPTR
相对寻址
程序存储器256B范围(PC+偏移量)
位寻址
片内RAM20H-2FH字节地址、部分SFR
5,要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式?
5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址
6,在89C51片内RAM中,已知 (30H)=38H, (38H)=40H, (40H)=48H, (48H)=90H, 请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。
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,对89C51片内RAM的高128字节的地址空间寻址要注意什么
7、用直接寻址,位寻址,寄存器寻址
8,指出下列指令的本质区别。
8, MOV     A,DATA    ;直接寻址    2字节1周期
    MOV     A,#DATA    ;立即数寻址    2字节1周期
    MOV     DATA1,DATA2    ;直接寻址    3字节2周期
    MOV     74H,#78H    ;立即数寻址    3字节2周期
如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A
9,设R0内容为32H, A的内容为48H, 片内RAM的32H单元内容为80H, 40H单元内容为08H, 请指出在执行下列程序段后上述各单元内容的变化。
9、
    MOV    A,@R0        ;((R0))=80HA
    MOV    @R0,40H    ;(40H)=08H(R0)
    MOV    40H,A        ;(A)=8040H
    MOV    R0,#35H    ;35HR0
最后结果:(R0)=35H    (A)=80H,(32H)=08H,(40H)=80H
10,如何访问SFR,可使用哪些寻址方式?
10、用直接寻址,位寻址,寄存器寻址
11,如何访问片外RAM,可使用哪些寻址方式?
11、只能采用寄存器间接寻址(用MOVX指令)
12,如何访问片内RAM,可使用哪些寻址方式?
12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7)
高128字节:直接寻址,位寻址,寄存器寻址
13,如何访问片内外程序存储器,可使用哪些寻址方式?
13、采用变址寻址(用MOVC指令)
14,说明十进制调整的原因和方法。
14、压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DA  A指令调整(加06H,60H,66H)
15,说明89C51的布尔处理机功能。
15、用来进行位操作
16,已知(A)=83H, (R0)=17H, (17H)=34H, 请写出执行完下列程序段后A的内容。
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)使ACC.0置1;  (2)清除累加器高4位;  (3)清除ACC.3,ACC.4,ACC.5,ACC.6 。
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,编程实现把内部RAM R0~R7 的内容传递到 20H~27H单元。
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,试编写程序,将内部RAM 20H、21H和22H3个连续单元的内容依次存入 2FH、2EH 和2DH 中。
19、MOV  2FH,20H
    MOV  2EH,21H
    MOV  2DH,22H
20,编写程序,进行两个16位数减法,6F5DH 13B4H, 结果存入内部RAM的30H和31H单元,30H存储低8位。
20、CLR  C
MOV  A,#5DH    ;被减数的低8位→A
MOV  R2,#0B4H    ;减数低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,编写程序,若累加器A的内容分别满足下列条件,则程序转至LABEL存储单元。设A中存储的是无符号数。(1)A10;  (2)A>10;  (3)A10。
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)=25H, (PC)=2345H, (24H)=12H, (25H)=34H, (26H)=56H。问此时执行 “RET指令以后,(SP)=? (PC)=?
22、(SP)=23H,(PC)=3412H
参看书上80页
23,若(SP)=25H, (PC)=2345H, 标号LABEL所在地址为3456H。问执行长调用指令 “LCALL LABEL后,堆栈指针和堆栈内容发生什么变化?PC值等于什么?
23、(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H
参看书上79页
24,上题中LCALL指令能否直接换成ACALL指令,为什么?如果使用ACALL指令,则可调用的地址范围是什么?
24、不能。ACALL是短转指令,可调用的地址范围是2KB。
在看这个题的时候同时看一下AJMP指令。同时考虑调用指令ACALL和LCALL指令和RET指令的关系。
25,编写指令,查在内部RAM的20H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为01H;若未到,则将51H单元清0。
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,指向下一个待查数据

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