第4章 课后习题答案

  • 格式:pdf
  • 大小:129.60 KB
  • 文档页数:3

第4章指令系统思考题与习题答案
4-1 专用寄存器PSW的作用是什么?它能反映指令的哪些运行状态?
答:PSW的功能是用于存放程序运行的状态信息及运算结果的标志。

有些位由硬件自动设置,有些位由用户设置。

由硬件自动设置的位有:
●CY:进位标志位。

CY反映无符号数字的加、减法运算结果是否超出无符号数字的表示范围
(0~255),即无符号数字的最高位(即第7位)是否有进位或借位。

如果超出有符号数的有效范围,则CY置1,否则CY清0。

●AC:辅助进位标志位。

当执行加、减运算时,如果低4位向高4位有进位或借位,AC由硬件自
动置1,否则AC被清0。

●OV:溢出标志位。

反映在有符号数字的加、减运算中运算结果是否超出有符号数字的运算范围。

如果超出有符号数的有效范围(128~+127),则OV置1,否则OV清0。

●P:奇偶校验位。

用于表明累加器A中1的个数的奇偶性。

如果A中有奇数个“1”,则P为1,否
则P为0。

4-2 什么是伪指令?伪指令与指令系统中的汇编指令有什么区别?
答:伪指令是用于告诉汇编程序如何进行汇编的指令。

它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。

汇编指令是能被执行的指令,有相应的机器代码。

伪指令所对应的语句为指示性语句,汇编指令对应的语句叫指令性语句。

4-3 说明十进制调整的原因。

答:由于BCD编码是将每个十进制数用一组4位二进制数来表示,因此,若将这种BCD码直接交给计算机去运算,则计算机把该数当作自然二进制数运算。

由于4位BCD码只有10种状态,而4位自然二进制数有16种,这样在运算时就会发生结果出错的问题。

为此要进行调整,由于自然二进制比4位BCD码多6种状态,则要进行加6调整。

4-4 指出下列指令中源操作数和目的操作数的寻址方式。

目的操作数源操作数
MOV A,
#10H 寄存器寻址立即数寻址
(1)
A 寄存器间接寻址寄存器寻址
(2)
MOV @R1,
(3) MOVC A, @A + DPTR 寄存器寻址基址加变址寻址
(4) PUSH ACC(A修改为ACC)寄存器间接寻址(指令中隐含)直接寻址
20H 位寻址位寻址
MOV C,
(5)
MOV A,
20H 寄存器寻址直接寻址
(6)
MOV R0,
P1 寄存器寻址直接寻址
(7)
(8) JC LOOP 相对寻址
4-5 找出错误的指令,并在括号中标识“×”。

(1) MOV A, DPTR (× ) (8) MOV C, 20H (√)
(2) CPL R0 (× ) (9) MOV 20H, @DPTR (×)
(3) PUSH DPTR (×
)
MOVX @DPTR, #50H (×)
(10)
#1000H (√)
MOV DPTR,
(4) POP 40H (√)
(11)
(5) MOV 30H, 31H (√) (12) MOVC A, @A + PC (√)
(6) RLC R0 (×) (13) SETB R7.0 (×)
(7) MOV B, C (×) (14) XRL A, #30H (√)
4-6 已知(SP)=26H,(PC) = 2345H,(24H) = 12H,(25H) = 34H,(26H) = 56H,问此时执行“RET”指令后(SP) = 24H ,(PC) = 5634H 。

4-7 试比较下列各组指令的异同,说明原因。

(1) MOV A, R0 源操作数为寄存器寻址
与MOV A, @R0 源操作数为寄存器寻址
(2) MOV @R1, A 内部RAM的操作指令
与 MOVX @R1, A 外别RAM的操作指令
(3) MOV C, 20H 位操作指令
与MOV A, 20H 8位数据(单元)的操作指令
(4) MOVX A, @DPTR 外部RAM的操作指令
与 MOVC A, @A+DPTR (若(A)= 0) ROM的操作指令4-8 将下段程序翻译成机器语言,指出该机器语言是存放在ROM中,还是外部RAM中。

在Keil μVision2下运行此段程序,给出机器语言数据存放结果。

ORG 0 机器语言
LJMP START 021000
ORG 1000H
#54H
7454
MOV A,
START:
ADDC A,
3462
#62H
NOP 00
ORG 1050H
DB 3H, 60H, “Aa”
END
各汇编指令的机器语言如下,这些机器指令存放在ROM中。

C:0x0000 021000 (LJMP START)
C:0x1000 7454 (MOV A, 54H)
C:0x1002 3462 (ADDC A, 62H)
C:0x1004 00 (NOP)
C:0x1050 FD (-3)
C:0x1051 60 (60H)
C:0x1052 41 (‘A’)
C:0x1053 61 (‘a’)
4-9 指出以下程序段每一条指令执行后累加器A内的值,已知(R0)= 30H,(CY)= 1。

MOV A, #0AAH (A)=0AAH
CPL A (A)=55H
RL A (A)=0AAH
RLC A (A)=55H
CLR C (CY)=0,(A)=55H
ADDC A,
R0 (A)=85H
4-10 分析下面各程序段中每条指令的执行结果。

(1) MOV A, #45H (A)=45H
MOV R5, #78H (R5)=78H
ADD A, R5 (A)=0BDH,(OV)=1
DA A (A)=23H,(CY)=1,(P)=1
MOV 30H, A (30H)=23H
(2) MOV SP, #50H (SP)=50H
MOV A, #0F0H (A)=0F0H
MOV B, #0FH (B)=0FH
PUSH ACC (51H)=0F0H
PUSH B (52H)=0FH
POP ACC (ACC)=0FH
POP B (B)=0F0H
4-11 分析下段程序完成什么功能。

ORG 0
LJMP START
ORG 100H
START: MOV R0, #30H
MOV R2, #0AH
DEC R2
MOV A, @R0
LOOP: INC R0
MOV 20H, @R0
CJNE A, 20H, NEXT1
NEXT1:JNC NEXT2
MOV A, @R0
NEXT2:DJNZ R2, LOOP
MOV R7, A
END
功能:找出从内部RAM 30H单元开始的10个单元中所存数据的最大值,并将最大值保存于R7中。

4-12 编写程序将外部RAM 100H单元的高4位置“1”,低4位清“0”。

在Keil 下运行程序,观察执行结果。

参考程序:ORG 0
#100H
MOV DPTR,
#0F0H
MOV A,
A
@DPTR,
MOVX
NOP
END
4-13 编写程序将内部RAM 40H单元的第0位和第7位置“1”,其余位取反。

在Keil下运行程序,观察执行结果。

(提示:在程序执行前,应该知道40H单元原来的值为多少。

)
参考程序:ORG 0
取反运算
XRL 40H, #7EH ;
第0位和第7位置1
ORL 40H, #81H ;
NOP
END。