第3章指令系统
1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。
1、指令:CPU根据人的意图来执行某种操作的命令
指令系统:一台计算机所能执行的全部指令集合
机器语言:用二进制编码表示,计算机能直接识别和执行的语言
汇编语言:用助记符、符号和数字来表示指令的程序语言
高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言
2,什么是计算机的指令和指令系统?
2、见第1题。
3,简述89C51汇编指令格式。
3、操作码 [目的操作数] [,源操作数]
4,简述89C51寻址方式和所能涉及的寻址空间。
4、
寻址方式 | 寻址空间 |
立即数寻址 | 程序存储器ROM |
直接寻址 | 片内RAM低128B、特殊功能寄存器 |
寄存器寻址 | 工作寄存器R0-R7、A、B、C、DPTR |
寄存器间接寻址 | 片内RAM低128B、片外RAM |
变址寻址 | 源程序能直接执行吗 程序存储器(@A+PC,@A+DPTR) |
相对寻址 | 程序存储器256B范围(PC+偏移量) |
位寻址 | 片内RAM的20H-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))=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,如何访问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)A≥10; (2)A>10; (3)A≤10。
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小时内删除。
发表评论