您好,欢迎来到客趣旅游网。
搜索
您的当前位置:首页微计算机原理第2版第三章课后习题答案 潘名莲 马争 丁庆生 编著

微计算机原理第2版第三章课后习题答案 潘名莲 马争 丁庆生 编著

来源:客趣旅游网


8

0

x

8

6

3-1 指令由操作码字段和操作数字段组成。8086的指令长度在1~6字节范围。

3-2 分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,使用表达

式表示出EA=PA=

(1)MOV SI, 2100H (2)MOV CX, DISP[BX] (3)MOV [SI], AX

(4)ADC ZX, [BX][SI] (5) AND AX, DX (6)MOV AX, [BX+10H]

(7)MOV AX, ES:[BX] (8MOV AX, [BX+SI+20H] (9) MOV [BP], CX

(10)PUSH DS

解:


源操作数寻址

目的操作数寻址

EA

PA

1) MOV SI, 2100H

立即数寻址

寄存器

——

——

(2) MOV CX, DISP[BX]

寄存器相对寻址

寄存器

[BX+SISP]

(DS)*16+(BX+DISP)

(3) MOV [SI], AX

寄存器寻址

寄存器间接

[SI[

(DS)*16+(SI)

(4) ADC ZX, [BX][SI]

基址变址寻址

寄存器

[BX+SI]

(DS)*16+(BX)+(SI)

(5) AND AX, DX

寄存器寻址

寄存器

——

——

(6) MOV AX, [BX+10H]

寄存器相对寻址

寄存器

[BX+DISP]

(DS)*16+(BX)+10H

(7) MOV AX, ES:[BX]

带段超越寄存器寻址

寄存器

[BX]

(ES)*16+(BX)

(8MOV AX, [BX+SI+20H]

相对基址变址寻址

寄存器

[BX+SI+20H]

(DS)*16+(BX)+(SI)+20 H

(9) MOV [BP], CX

寄存器寻址

寄存器间接

[BP]

(SS)*16+(BP)

(10) PUSH DS

固定寻址

寄存器

[SP]

(SS)*16+(SP)

3-3 已知8086中一些寄存器的内容和一些存储器单元的内容如图3-1所示,试指出下列各

条指令执行后,AX中的内容。

(1) MOV AX, 2010H

(2) MOV AX, BX

(3) MOV AX, [1200H]

(4) MOV AX, [BX]

(5) MOV AX, 1100H[BX]

(6) MOV AX, [BX][SI]

(7)MOV AX, 1100H[BX+SI] (8) MOVLEA AX, [SI]

解:1)(AX=2010H 2)(AX=0100H

3)(AX=4C2AH 4)(AX=3412H

5)(AX=4C2AH 6)(AX=7856H 7)(AX=65B7H 8)(AX=0002H

1




CPU

BX

0100H

SI

0002H

DS

3000H




M

30100H

12H

30101H

34H

30102H

56H

30103H

78H

……

……

31200H

2AH

31201H

4CH

31202H

B7H

31203H

65H


3-1
3-4 已知(AX)=2040H,(DX)=380H,端口(PORT)=(80H)=1FH,(PORT+1)=45H,执行下列指令后,指出结果等于多少?

解:

(1)OUT DX, AL
(2)OUT DX, AX
(3)IN AL, PORT
(4)IN AX, 80H
(5)OUT PORT1, AL (6)OUT PORT1, AX

(0380H)=40H
(380H)=40H (381h)=20H
(AL)=1FH
(AX)=451FH
(PORT1)=40H
(PORT1)=2040H

3-5 已知:(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213,试画出下列指令执行到位置1和位置2时堆栈区和SP指针内容的变化示意图。图中应标出存储单元的实际地址PA

PUSH AX

PUSH CX

;位置1

POPF

;位置2

解:已知(SS)=0A2F0H,指令顺序依次编号为①、②、,示意图如图所示:





(SS)=0A2F0H









0A2FBCH

13H

←②(SP)-4=00BCH (位置1


F2H


0A2FBEH

31H

←①SP-2=00BEH (SP)+2=00BCH +0002H=00BEH (位置2


8BH


0A2FC0H


SP=00C0H

2

3-6 识别下列指令的正确性,对错误的指令,说明出错的原因。

(1) MOV DS, 100
(2) MOV [1000H], 23H
(3) MOV [1000H],[2000H]
(4) MOV DATA, 1133H
(5) MOV 1020H, DX
(6) MOV AX, [0100H+BX+BP] (7) MOV CS, AX
(8) PUSH AL
(9) PUSH WORD PTR[SI]
(10) IN AL, [80H]

(11) OUT CX, AL
(12) IN AX, 380H
(13) MOV CL, 3300H
(14) MOV AX, 2100H[BP] (15) MOV DS, ES
(16) MOV IP, 2000H
(17) PUSH CS
(18) POP CS
(19) LDS CS, [BX]
(20) MOV GAMMA, CS

解:

1×,不能对段寄存器送立即数
2×,存储单元类型不正确
3×MOV 不能实现两个存储单元间 直接传送
4×,段名不能作目的操作数
5×,立即数不能作目的操作数
6×
基址寄存器BX BP 只能使用其 中一个
7×CS 不能用作目的操作数
8×,堆栈操作作为字操作AL 应改为 AX
9)√

11×,应输出到端口而不是通用寄存器(12×,用DX 做间址寄存器380H 应存 DX
13×,类型不匹配
14)√
15×,两个段寄存器间不能直接传送(16×IP 不能直接用作目的操作数(17)√
18×CS 不能做目的操作数
19×,目的操作数应是通用寄存器而不 能是段寄存器CS
20×,符号名不能作为目的操作数

10×80H为输入端口号不加方括号

3-7 已知存储器数据段中的数据如图3-3所示。阅读下列的两个程序段后,回答:

1.每个程序段的运行结果是什么?

2.两个程序段各占多少字节的内容,执行时间是多少?

1 LES SI, NUM1

(2)

MOV AX, NUM1

MOV AX, [SI]

ADD AX, 4[SI]

ADD AX, NUM2

MOV 8[SI], AX

MOV SUM, AX

ADD SI, 2

MOV AX, NUM1+2

MOV AX, [SI]

ADC AX, NUM2+2

ADC AX, 4[SI]

MOV SUM+2 AX

MOV 8[SI], AX

解:1、运行结果如下:

1 0AC6863A0H

(2) 0AC6863A0

字节数

2

时钟周期

1 LES SI, NUM1

2+EA

2~4

MOV AX, [SI]

10

3

3


ADD AX, 4[SI]

9+EA

2~4



M


NUM1

48H

DS


41H



16H



28H


NUM2

58H



22H



52H



84H


SUM







MOV 8[SI], AX

10

3

ADD SI, 2

4

3~4

MOV AX, [SI]

10

3

ADC AX, 4[SI]

9+EA

2~4

MOV 8[SI], AX

10

2~4

(2) MOV AX, NUM1

10

3

ADD AX, NUM2

9+EA

2~4

MOV SUM, AX

9+EA

2~4

MOV AX, NUM1+2

9+EA

2~4

ADC AX, NUM2+2

9+EA

2~4

MOV SUM+2 AX

9+EA

2~4

3-33-8 已知数据如图3-3所示,数据的低位在前,按下列要求编写程序段:1.完成NUM1和单元NUM2两个字数据相加,和存放在NUM1中。

2.完成NUM1单元开始的连续4个字节数据相加,和不超过一字节,存放SUM单元。3.完成NUM1单元开始的连续8个字节数据相加,和16位数,放在SUMSUM+1两个单元(用循环)。

4.完成NUM1NUM2的双倍精度字数据相加,和放在NUM2开始的字单元中。

解:

1CLC
LEA SI, NUM1
MOV AX, WORD PTR [SI]
ADD AX, WORD PTR NUM2
MOV WORD PTR [SI], AX
MOV AX, WORD PTR [SI+2]
ADC AX, WORD PTR NUM2+2
MOV WORD PTR [SI+2], AX
HLT

2LEA SI, NUM1
MOV AL, [SI]
ADD AL, 1[SI]
ADD AL, 2[SI]
ADD AL, 3[SI]
MOV SUM, AL
HLT

3 CLC
CLD
LEA SI, NUM1

4

MOV AL, [SI]
MOV AH, 0
MOV CX, 7
XOR BH, BH
AGA:MOV BL, 1[SI]
ADC AX, BX
INC SI
DEC CX
JNZ AGA
MOV SUM, AX
HLT

4LEA SI, NUM1
LEA DI, NUM2
MOV AX, [SI]
ADD AX, [DI]
MOV [DI], AX
MOV AX, 2[SI]
ADC AX, 2[DI]
MOV 2[DI], AX

3-9 已知的BCD数如图3-3所示,低位在前,按下列要求编写计算BCD数据(为组合型BCD)的程序段。

1.完成从NUM1单元开始的连续8个组合型BCD数相加,和(超过一字节)放在SUMSUM+1两个单元中。

2.完成NUM1单元和NUM2单元的两个BCD数相减,其差存入SUM单元,差=?,(CF=

解:

1CLC
CLD
LEA SI, NUM1
MOV CX, 7
MOV AH, 0
MOV AL, [SI]
AGA: INC SI
ADC AL,[SI]
DAA
LOOP AGA
MOV SUM, AL
MOV SUM+1AH
HLT

2CLC
MOV AH, 0

5

MOV AL, NUM1
SUB AL, NUM2
DAS
MOV SUM, AL

=0F0H=-10H,CF=1

3-10 写出下列程序段完成的数学计算公式,并画出数据存放的示意图。

MOV AX, X
MOV DX, X+2
ADD AX, Y
ADC DX, Y+2
SUB AX, Z
SBB DX, Z+2
MOV W, AX
MOV W+2 DX

解:W=X+Y-Z,数据存放如图所示:


X




X+2




Y




Y+2




Z




Z+2




W




W+2





3-11 已知数据如图3-3所示,低位在前,按下列要求编写程序段
1.NUM1NUM2两个数据相乘(均为无符号数),乘积放在SUM开始的单元。

2.NUM1NUM2两个字数据相乘(均为无符号数),乘积放在SUM开始的单元。3.NUM1单元的字节数据除以13(均为无符号数),商和余数依次放入SUM开始的两个字节单元。

4.NUM1单元的字节数据除以NUM2字单元的字,商和余数依次放入SUM开始的两个字节单元。

解:
1.32×32位,极为
2. MOV AX, NUM1
IMUL NUM2 ;积在(DX)(AX)
MOV SUM, AX
MOV SUM+2DX

3.MOV AL, NUM1
CBW
MOV CL, 0DH

6

DIV CL
MOV SUM, AL
MOV SUM+1AH

4.MOV AX, NUM1
CWD
IDIV NUM2
MOV SUM, AX
MOV SUM+2DX

3-12 (L略)

3-13 已知(AL=0C4HDATA单元中的内容为5AH,写出下列每条指令单独执行后的结果。

1.AND AL, DATA 5.AND AL, 0FH 2. OR AL,DATA 6.OR AL, 01H 3. XOR AL, DATA 7.XOR AL, 0FFH 4. NOT DATA 8.TEST AL, 80H;

1. (AL)=01000000B=40H 2. (AL)=0DEH
3. (AL)=B=9EH
4. (DATA)=0A5H

5. (AL)=04H
6. (AL)=0C5H
7. (AL)=3BH
8. (AL)=0C4H,OF=0,CF=0

3-14 用移位循环指令,编写完成以下功能的程序段(结果放回原处)1.将无符号数83D分别乘2和处2.

2.将带符号数-47D分别乘2和除2.

3.将图3-3NUM1双字乘2和除2.

4.将图3-3中从NUM1开始的4个字乘2.

解:
1.MOV AL, 53H
SHL AL, 1
MOV AL, 53H
SHR AL, 1

2.MOV AL, 0D1H
SAL AL, 1
MOV AL, 0D1H
SAR AL, 1

3.MOV AX, NUM1
MOV DX,NUM1+2
SHL AX, 1

7

RCL DX, 1
MOV AX, NUM1
MOV DX, NUM1+2
SAR DX, 1
RCR AX, 1

4. SAL NUM11
RCL NUM1+21
RCL NUM1+41
RCL NUM1+61

3-15 编写完成以下功能的程序段,并指出运行后,其标志CFZFSFOF的状态是什么?

1.BCD 5832
2.无符号数3AH3AH
3.带符号数79(—57
4.带符号数—32+42
解:
MOV AL, 58H 1.

SUB AL, 32H
DAS
CF=0ZF=0SF=0OF=0

2. MOV AL, 3AH
SUB AL, 3AH
CF=0ZF=1SF=0OF=0

3.已知X=79D,Y=57D 则【X】补=01001111,【Y】补=
所以[X]补—[Y]=[X]+[-Y]=
MOV AL, 79
MOV BL, -57
SUB AL, BL
CF=0ZF=0SF=1OF=1

4.MOV AL, 0F3H
MOV BL, 2AH
ADD AL, BL
或者
MOV AL, 0F3H
ADD AL, 2AH
CF=0ZF=0SF=0OF=0

3-16 用循环移位指令实现下列功能,设(AX=0C3H
1.设(CL=8,移位前、后AX内容不变

8

2.设(CL=9,移位前、后AX内容不变
3.AX中高4位和低4位交换位置
4.AX中高4位放到低4位上,而高4位置0
解:
1.MOV CL, 8
ROL AL, CL(或者ROR AL, CL)

2.MOV CL, 9
RCL AL,CL(或者RCR AL, CL)

3.MOV BX, AX
AND AX, 0FF0H
XCHG BH, BL
MOV CL, 4
ROL BH, CL
ROL BL, CL
AND BH,0F0H
AND BL, 0FH
OR AX, BX

4.本小题可以多种解法:
1
5.MOV BX, AX
AND AX, 0FF0H
XCHG BH, BL
MOV CL, 4
ROL BH, CL
ROL BL, CL
AND BH,0
AND BL, 0FH
OR AX, BX
2:
MOV BX, AX
XCHG AH, AL
MOV CL, 4
ROR AX, CL
SHR AH, CL
AND AL, 0FH
AND BL, 0FOH
OR AL, BL

3-17 写出下列程序段执行后的结果:(AL=?(DL=?完成的是什么功能?MOV CL,4
MOV AL,87

9

MOV DL, AL
MOV AL,0FH
OR AL,30H
SHR DL,CL
OR DL,30H

解:完成与、或、移位等逻辑运算,运算结果:(AL=37H;(DL=35H

3-18 用乘法指令和用传送、移位、相加指令分别实现Y=10X的运算,设X=12H,分别编写这两个程序段。

解:

1)MOV AL, X
MOV CL, 10
NUL CL

(2)MOV AL, X
SAL AL,1 ;(AL)=2*X
MOV BL, AL ;(BL)=X*2
SAL AL, 1 ;(AL)=4*X
SAL AL, 1 ;(AL)=8*X
ADD AL, BL ;(AL)=8*X+2*X=10*X

3-19 写出下面指令序列完成的数学计算是什么?
MOV CL, 3
SHL AX, CL
SHL BL, CL
SHL CX, CL
SHL DH, CL

解:将一多精度数(6字节)乘以8

3-20 写出下列能代替重复串操作指令完成同样功能的指令序列。(1REP MOVSW
2REP CMPSB
3REP SCASB
4REP LODSW
5REP STOSB
解:

1LEA SI, AREA1
LEA DI, AREA2
MOV CX, N
CLD
AGA:MOV AX, DS:[SI]
MOV ES:[DI], AX

10

INC SI
INC SI
INC DI
INC DI
DEC CX
JNZ AGA
RET

(2) LEA SI, VAR1
LEA DI, VAR2
MOV CX, N
CLD
NEXT:CMPSB
JNZ FIN
LOOP NEXT
RET

(3) MOV DI, OFFSET COMMAND
MOV AL, ‘’
MOV CX, N
CLD
NEXT:SCASB
JZ FOUND
LOOP NEXT
RET

(4)MOV SI, OFFSET BUF
MOV CX, N
CLD
NEXT:LODSW
MOV RES, AX
LOOP NEXT
RET

(5) MOV DI,OFFSET BUF
MOV CX, N
CLD
NEXT:STOSB
DEC CX
JNZ NEXT
RET

3-21 欲将数据段中自AREA1中的100个字数据搬到附加段中以AREA2开始的区中,用下面的3种传送指令编写程序段:

11

1.MOV指令;2. 用基本串传送指令;3.用重复串传送指令
解:
1. LEA SI, AREA1
LEA DI, AREA2
MOV CX, 100
CLD
AGAIN:MOV AX, [SI]
MOV ES:[DI], AX
INC SI
INC SI
INC DI
INC DI
DEC CX
JNZ AGAIN
RET

2. MOV SI, OFFSET AREA1
MOV DI, OFFSET AREA2
MOV CX, 100
CLD
AGAIN:MOVS AREA2AREA1
DEC CX
JNZ AGAIN
RET

3. MOV SI, OFFSET AREA1
MOV DI, OFFSET AREAA2
CLD
MOV CX, 100
REP MOVSB
RET

3-22 假定在数据段中已知字符串和未知字符串的定义如下:
STRING1 DB ‘MESSAGE AND PROCCESS’
STRING2 DB 20 DUP(?)
用串操作指令编写完成下列功能的程序段(设DSES重叠);
1.从左到右把STRING1中的字符串搬到STRING2中;
2.从右到左把STRING1中的字符串搬到STRING2中;
3.搜索STRING1字符串中是否有空格。如有,记下第一个空格的地址,并放入BX中;4.比较STRING1STRING2字符串是否相同。

解:
1.MOV SI, OFFSET STRING1
MOV DI, OFFSET STRING2
MOV CX, 20 ;20个字符

12


CLD

;从左到右就是增址方向,设置DF0

REP MOVS STRING2STRING1

2.MOV SI, OFFSET STRING1+13H
MOV DI, OFFSET STRING2+13H
MOV CX, 20
STD ;从右到左为减址方向,设置DF0
REP MOVS STRING2+13H, STRING1+13H

3. MOV DI, OFFSET STRING1
MOV CX, 20
MOV AL, 20H ;空格字符的ASCII
CLD
REPNZ SCASB
JZ FOUND
MOV DI, 0
JMP DONE
FOUND;DEC DI ;SCASB的功能是:(1)(AL)——[DI] (2) DI[DI]+1 MOV BX, DI
DENE: HLT

4. MOV SI, OFFSET STRING1
MOV DI, OFFSET STRING2
MOV CX, 20
CLD
REPZ CMPSB
JNZ UMMAT
MOV AL, 0
JMP OUTPUT
UMMAT:MOV AL, 0FFH
OUTPUT:MOV RESULT, AL
RET

3-23 下面两条短转移指令的转移地址ADDR1ADDR2分别是多少(用十六进制表示)?

1.0220 EB 0A JMP ADDR1
2.0230 EB F7 JMP ADDR2
解:
1.e为当前IP与目的地址的距离。

已知位移量e的计算公式:e=目的地址—(IP+2),即
0AH=目的地址—(IP+23=ADDR10222H
所以,ADDR1=0AH+0222H=022CH(正向转移)
2.e=目的地址—(IP+2
0F7H=ADDR20232H

13

所以,ADDR2=0F7H+0232H=0229H(负向转移)

3-24 NEAR JMP, SHORT JMP,LOOP和条件转移指令的转移范围是多少?

解:
1NEARJMP:目标地址距JMP指令+32767~32768字节范围以内。

2SHORTJMP:目标地址距JMP指令+127~128字节范围以内。

3LOOP:所转去的目标地址在+127~128字节范围以内,为LOOPSHORT_LABEL4)条件转移指令:目的地址OPRD为近标号,即转向的目标地址必须在转移指令的+127~128字节范围以内。

2-25 AXCX中的内容为无符号数,BXDX中的内容为带符号数,试用CMP指令和条件转移指令实现以下判断:
1.若(AX)超过(CX),则转至BIGER2.若(BX>DX),则转至BIGE

,则转至LESS 4.若(DX>BX),则转至LESS3.若(CX)低于(AX
5.若(AX=CX),则转至EQUAL

解:
1.CMP AX, CX
JA BIGER

2.CMP BX, DX
JG BIGER

3.CMP CX, AX
JB LESS

4.CMP DX, BX
JL LESS

5.CMP AX, CX
JZ EQUAL

3-26 (略)

3-27 试编写一个程序段,能完成下列数学表达式的功能

X

1

0

1

(

X

-1

1- <X<1)

( X

1)

1
MOV AL, X
CMP AL,-1
JLE ANS1
CMP AL,1
JL ANS2

14

JMP ANS3
ANS1MOV [SI1,-1
ANS2MOV [S2], 0
RET
ANS3MOV [S3], +1
DONE:RET
2
MOV AL, X
CMP AL,0FFH
JLE LOON1
CMP AL, 1
JGE LOON2
MOV AL, 0
MOV X, AL
JMP NEXT
LOON1MOV AL, 0FFH
MOV X, AL
JMP NEXT
LOON2MOV AL, 1
MOV X, AL
NEXT: RET

3-28 8086的中断机构允许256 级中断,其专用的中断有5个,分别为类型0~类型4

3-29 试比较转移指令,调用指令和中断指令操作的异同处。

解:
3种指令其共同处是改变了程序指令执行的顺序,从一条指令跳到另一条指令。其中,转移指令跳转后一般不会返回原指令的下一条指令;而调用指令在子程序执行完毕后会返回原指令的下一条指令继续执行;中断指令是在CPU遇到中断产生后,停止当前指令的执行,在处理完中断服务程序后,继续从执行中断前的指令处开始运行。

3-30 DOS系统功能调用编写一个程序,能将3-17题中的结果在屏幕上显示出来。

:已知3-17 题的结果是:(AL=37H,(DL=35H。程序如下:

MOV BL, AL

MOV AH, 02H

MOV DH, DL

INT 21H

MOV CL, 4

MOV DL,DH

SHR AL,CL

MOV CL, 4

OR AL,30H

SHR DL,CL

MOV DL, AL

OR DL, 30H

MOV AH,02H

MOV AH, 02H

INT 21H

INT 21H

MOV AL, 0FH

MOV DL, 0FH

OR AL,30H

OR DL, 30H

15


MOV AH, 02H

HLT

INT 21H

3-31 (略)
3-32 (略)

3-33 试写出80386/80486CPU执行下列指令后,AX=?,BX=?(1MOV AX, 0000
MOV BX,123H
SHLD AX, BX,8

(2)MOV AX,0000
MOV BX, 123H
MOV CL, 0CH
SHRD AX, BX, CL
解:1AX=0012HBX1234H 2AX=0123HBX=1234H

3-34 试写出80386/80486CPU 执行下列指令后,标志CF=
MOV EAX, 96ABDC86H
BT EAX, 14H

解: CF=0

16

17

以下无正文

仅供个人用于学习、研究;不得用于商业用途。

Forpersonal use only in study and research; not for commercial use.

仅供个人用于学习、研究;不得用于商业用途。

Nurfür den persönlichen für Studien, Forschung, zu kommerziellenZwecken verwendet werden.

Pourl 'étude et la recherche uniquement à des fins personnelles; pas àdes fins commerciales.

仅供个人用于学习、研究;不得用于商业用途。

толькодля людей, которые используются дляобучения, исследований и не должныиспользоваться

вкоммерческих целях.

以下无正文

18

Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务