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

上传人:b****9 文档编号:25990266 上传时间:2023-06-17 格式:DOCX 页数:29 大小:26.39KB
下载 相关 举报
微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著.docx_第1页
第1页 / 共29页
微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著.docx_第2页
第2页 / 共29页
微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著.docx_第3页
第3页 / 共29页
微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著.docx_第4页
第4页 / 共29页
微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

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

《微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著.docx》由会员分享,可在线阅读,更多相关《微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著.docx(29页珍藏版)》请在冰豆网上搜索。

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

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

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

第3章80x86指令系统

3-1指令由操作码字段和操作数字段组成。

8086的指令长度在1~6字节范围。

3-2分别指出下列指令中源操作数和目的操作数的寻址方式。

若是存储器寻址,使用表达式表示出EA=?

PA=?

(1)MOVSI,2100H

(2)MOVCX,DISP[BX](3)MOV[SI],AX

(4)ADCZX,[BX][SI](5)ANDAX,DX(6)MOVAX,[BX+10H]

(7)MOVAX,ES:

[BX](8)MOVAX,[BX+SI+20H](9)MOV[BP],CX

(10)PUSHDS

解:

源操作数寻址

目的操作数寻址

EA

PA

1)MOVSI,2100H

立即数寻址

寄存器

——

——

(2)MOVCX,DISP[BX]

寄存器相对寻址

寄存器

[BX+SISP]

(DS)*16+(BX+DISP)

(3)MOV[SI],AX

寄存器寻址

寄存器间接

[SI[

(DS)*16+(SI)

(4)ADCZX,[BX][SI]

基址变址寻址

寄存器

[BX+SI]

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

(5)ANDAX,DX

寄存器寻址

寄存器

——

——

(6)MOVAX,[BX+10H]

寄存器相对寻址

寄存器

[BX+DISP]

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

(7)MOVAX,ES:

[BX]

带段超越寄存器寻址

寄存器

[BX]

(ES)*16+(BX)

(8)MOVAX,[BX+SI+20H]

相对基址变址寻址

寄存器

[BX+SI+20H]

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

(9)MOV[BP],CX

寄存器寻址

寄存器间接

[BP]

(SS)*16+(BP)

(10)PUSHDS

固定寻址

寄存器

[SP]

(SS)*16+(SP)

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

(1)MOVAX,2010H

(2)MOVAX,BX(3)MOVAX,[1200H]

(4)MOVAX,[BX](5)MOVAX,1100H[BX](6)MOVAX,[BX][SI]

(7)MOVAX,1100H[BX+SI](8)MOVLEAAX,[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

 

M

30100H

12H

30101H

34H

30102H

56H

30103H

78H

……

……

31200H

2AH

31201H

4CH

31202H

B7H

31203H

65H

CPU

BX

0100H

SI

0002H

DS

3000H

 

图3-1

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

解:

(1)OUTDX,AL(0380H)=40H

(2)OUTDX,AX(380H)=40H(381h)=20H

(3)INAL,PORT(AL)=1FH

(4)INAX,80H(AX)=451FH

(5)OUTPORT1,AL(PORT1)=40H

(6)OUTPORT1,AX(PORT1)=2040H

3-5已知:

(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213,试画出下列指令执行到位置1和位置2时堆栈区和SP指针内容的变化示意图。

图中应标出存储单元的实际地址PA。

PUSHAX

PUSHCX;位置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

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

(1)MOVDS,100

(2)MOV[1000H],23H

(3)MOV[1000H],[2000H]

(4)MOVDATA,1133H

(5)MOV1020H,DX

(6)MOVAX,[0100H+BX+BP]

(7)MOVCS,AX

(8)PUSHAL

(9)PUSHWORDPTR[SI]

(10)INAL,[80H]

(11)OUTCX,AL

(12)INAX,380H

(13)MOVCL,3300H

(14)MOVAX,2100H[BP]

(15)MOVDS,ES

(16)MOVIP,2000H

(17)PUSHCS

(18)POPCS

(19)LDSCS,[BX]

(20)MOVGAMMA,CS√

解:

(1)×,不能对段寄存器送立即数

(2)×,存储单元类型不正确

(3)×,MOV不能实现两个存储单元间

直接传送

(4)×,段名不能作目的操作数

(5)×,立即数不能作目的操作数

(6)×,基址寄存器BX和BP只能使用其

中一个

(7)×,CS不能用作目的操作数

(8)×,堆栈操作作为字操作AL应改为

AX

(9)√

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

(11)×,应输出到端口而不是通用寄存器

(12)×,用DX做间址寄存器380H应存

DX

(13)×,类型不匹配

(14)√

(15)×,两个段寄存器间不能直接传送

(16)×,IP不能直接用作目的操作数

(17)√

(18)×,CS不能做目的操作数

(19)×,目的操作数应是通用寄存器而不

能是段寄存器CS

(20)×,符号名不能作为目的操作数

3-7已知存储器数据段中的数据如图3-3所示。

阅读下列的两个程序段后,回答:

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

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

(1)LESSI,NUM1

MOVAX,[SI]

ADDAX,4[SI]

MOV8[SI],AX

ADDSI,2

MOVAX,[SI]

ADCAX,4[SI]

MOV8[SI],AX

(2)

MOVAX,NUM1

ADDAX,NUM2

MOVSUM,AX

MOVAX,NUM1+2

ADCAX,NUM2+2

MOVSUM+2,AX

解:

1、运行结果如下:

(1)0AC6863A0H

(2)0AC6863A0

2、时钟周期字节数

(1)LESSI,NUM12+EA2~4

MOVAX,[SI]103

ADDAX,4[SI]9+EA2~4

M

NUM1

48H

DS

41H

16H

28H

NUM2

58H

22H

52H

84H

SUM

MOV8[SI],AX103

ADDSI,243~4

MOVAX,[SI]103

ADCAX,4[SI]9+EA2~4

MOV8[SI],AX102~4

(2)MOVAX,NUM1103

ADDAX,NUM29+EA2~4

MOVSUM,AX9+EA2~4

MOVAX,NUM1+29+EA2~4

ADCAX,NUM2+29+EA2~4

MOVSUM+2,AX9+EA2~4

图3-3

3-8已知数据如图3-3所示,数据的低位在前,按下列要求编写程序段:

1.完成NUM1和单元NUM2两个字数据相加,和存放在NUM1中。

2.完成NUM1单元开始的连续4个字节数据相加,和不超过一字节,存放SUM单元。

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

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

解:

1、CLC

LEASI,NUM1

MOVAX,WORDPTR[SI]

ADDAX,WORDPTRNUM2

MOVWORDPTR[SI],AX

MOVAX,WORDPTR[SI+2]

ADCAX,WORDPTRNUM2+2

MOVWORDPTR[SI+2],AX

HLT

2、LEASI,NUM1

MOVAL,[SI]

ADDAL,1[SI]

ADDAL,2[SI]

ADDAL,3[SI]

MOVSUM,AL

HLT

3、CLC

CLD

LEASI,NUM1

MOVAL,[SI]

MOVAH,0

MOVCX,7

XORBH,BH

AGA:

MOVBL,1[SI]

ADCAX,BX

INCSI

DECCX

JNZAGA

MOVSUM,AX

HLT

4、LEASI,NUM1

LEADI,NUM2

MOVAX,[SI]

ADDAX,[DI]

MOV[DI],AX

MOVAX,2[SI]

ADCAX,2[DI]

MOV2[DI],AX

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

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

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

(CF)=?

解:

1、CLC

CLD

LEASI,NUM1

MOVCX,7

MOVAH,0

MOVAL,[SI]

AGA:

INCSI

ADCAL,[SI]

DAA

LOOPAGA

MOVSUM,AL

MOVSUM+1,AH

HLT

2、CLC

MOVAH,0

MOVAL,NUM1

SUBAL,NUM2

DAS

MOVSUM,AL

差=0F0H=-10H,CF=1

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

X

X+2

Y

Y+2

Z

Z+2

W

W+2

MOVAX,X

MOVDX,X+2

ADDAX,Y

ADCDX,Y+2

SUBAX,Z

SBBDX,Z+2

MOVW,AX

MOVW+2,DX

解:

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

 

3-11已知数据如图3-3所示,低位在前,按下列要求编写程序段

1.NUM1和NUM2两个数据相乘(均为无符号数),乘积放在SUM开始的单元。

2.NUM1和NUM2两个字数据相乘(均为无符号数),乘积放在SUM开始的单元。

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

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

解:

1.为32位×32位,极为64位

2.MOVAX,NUM1

IMULNUM2;积在(DX)(AX)中

MOVSUM,AX

MOVSUM+2,DX

3.MOVAL,NUM1

CBW

MOVCL,0DH

DIVCL

MOVSUM,AL

MOVSUM+1,AH

4.MOVAX,NUM1

CWD

IDIVNUM2

MOVSUM,AX

MOVSUM+2,DX

3-12(L略)

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

1.ANDAL,DATA

2.ORAL,DATA

3.XORAL,DATA

4.NOTDATA

5.ANDAL,0FH

6.ORAL,01H

7.XORAL,0FFH

8.TESTAL,80H

解;

1.(AL)=01000000B=40H

2.(AL)=0DEH

3.(AL)=10011110B=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-3中NUM1双字乘2和除2.

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

解:

1.MOVAL,53H

SHLAL,1

MOVAL,53H

SHRAL,1

2.MOVAL,0D1H

SALAL,1

MOVAL,0D1H

SARAL,1

3.MOVAX,NUM1

MOVDX,NUM1+2

SHLAX,1

RCLDX,1

MOVAX,NUM1

MOVDX,NUM1+2

SARDX,1

RCRAX,1

4.SALNUM1,1

RCLNUM1+2,1

RCLNUM1+4,1

RCLNUM1+6,1

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

1.BCD数58—32

2.无符号数3AH—3AH

3.带符号数79—(—57)

4.带符号数—32+(42)

解:

1.MOVAL,58H

SUBAL,32H

DAS

CF=0,ZF=0,SF=0,OF=0

2.MOVAL,3AH

SUBAL,3AH

CF=0,ZF=1,SF=0,OF=0

3.已知X=79D,Y=57D则【X】补=01001111,【Y】补=11000111

所以[X]补—[Y]补=[X]补+[-Y]补=10001000

MOVAL,79

MOVBL,-57

SUBAL,BL

CF=0,ZF=0,SF=1,OF=1

4.MOVAL,0F3H

MOVBL,2AH

ADDAL,BL

或者

MOVAL,0F3H

ADDAL,2AH

CF=0,ZF=0,SF=0,OF=0

3-16用循环移位指令实现下列功能,设(AX)=0C3H

1.设(CL)=8,移位前、后AX内容不变

2.设(CL)=9,移位前、后AX内容不变

3.将AX中高4位和低4位交换位置

4.将AX中高4位放到低4位上,而高4位置0

解:

1.MOVCL,8

ROLAL,CL(或者RORAL,CL)

2.MOVCL,9

RCLAL,CL(或者RCRAL,CL)

3.MOVBX,AX

ANDAX,0FF0H

XCHGBH,BL

MOVCL,4

ROLBH,CL

ROLBL,CL

ANDBH,0F0H

ANDBL,0FH

ORAX,BX

4.本小题可以多种解法:

解1:

5.MOVBX,AX

ANDAX,0FF0H

XCHGBH,BL

MOVCL,4

ROLBH,CL

ROLBL,CL

ANDBH,0

ANDBL,0FH

ORAX,BX

解2:

MOVBX,AX

XCHGAH,AL

MOVCL,4

RORAX,CL

SHRAH,CL

ANDAL,0FH

ANDBL,0FOH

ORAL,BL

3-17写出下列程序段执行后的结果:

(AL)=?

(DL)=?

完成的是什么功能?

MOVCL,4

MOVAL,87

MOVDL,AL

MOVAL,0FH

ORAL,30H

SHRDL,CL

ORDL,30H

解:

完成与、或、移位等逻辑运算,运算结果:

(AL)=37H;(DL)=35H

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

解:

(1)MOVAL,X

MOVCL,10

NULCL

(2)MOVAL,X

SALAL,1;(AL)=2*X

MOVBL,AL;(BL)=X*2

SALAL,1;(AL)=4*X

SALAL,1;(AL)=8*X

ADDAL,BL;(AL)=8*X+2*X=10*X

3-19写出下面指令序列完成的数学计算是什么?

MOVCL,3

SHLAX,CL

SHLBL,CL

SHLCX,CL

SHLDH,CL

解:

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

3-20写出下列能代替重复串操作指令完成同样功能的指令序列。

(1)REPMOVSW

(2)REPCMPSB

(3)REPSCASB

(4)REPLODSW

(5)REPSTOSB

解:

(1)LEASI,AREA1

LEADI,AREA2

MOVCX,N

CLD

AGA:

MOVAX,DS:

[SI]

MOVES:

[DI],AX

INCSI

INCSI

INCDI

INCDI

DECCX

JNZAGA

RET

(2)LEASI,VAR1

LEADI,VAR2

MOVCX,N

CLD

NEXT:

CMPSB

JNZFIN

LOOPNEXT

RET

(3)MOVDI,OFFSETCOMMAND

MOVAL,‘’

MOVCX,N

CLD

NEXT:

SCASB

JZFOUND

LOOPNEXT

RET

(4)MOVSI,OFFSETBUF

MOVCX,N

CLD

NEXT:

LODSW

MOVRES,AX

LOOPNEXT

RET

(5)MOVDI,OFFSETBUF

MOVCX,N

CLD

NEXT:

STOSB

DECCX

JNZNEXT

RET

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

1.用MOV指令;2.用基本串传送指令;3.用重复串传送指令

解:

1.LEASI,AREA1

LEADI,AREA2

MOVCX,100

CLD

AGAIN:

MOVAX,[SI]

MOVES:

[DI],AX

INCSI

INCSI

INCDI

INCDI

DECCX

JNZAGAIN

RET

2.MOVSI,OFFSETAREA1

MOVDI,OFFSETAREA2

MOVCX,100

CLD

AGAIN:

MOVSAREA2,AREA1

DECCX

JNZAGAIN

RET

3.MOVSI,OFFSETAREA1

MOVDI,OFFSETAREAA2

CLD

MOVCX,100

REPMOVSB

RET

3-22假定在数据段中已知字符串和未知字符串的定义如下:

STRING1DB‘MESSAGEANDPROCCESS’

STRING2DB20DUP(?

用串操作指令编写完成下列功能的程序段(设DS和ES重叠);

1.从左到右把STRING1中的字符串搬到STRING2中;

2.从右到左把STRING1中的字符串搬到STRING2中;

3.搜索STRING1字符串中是否有空格。

如有,记下第一个空格的地址,并放入BX中;

4.比较STRING1和STRING2字符串是否相同。

解:

1.MOVSI,OFFSETSTRING1

MOVDI,OFFSETSTRING2

MOVCX,20;共20个字符

CLD;从左到右就是增址方向,设置DF←0

REPMOVSSTRING2,STRING1

2.MOVSI,OFFSETSTRING1+13H

MOVDI,OFFSETSTRING2+13H

MOVCX,20

STD;从右到左为减址方向,设置DF←0

REPMOVSSTRING2+13H,STRING1+13H

3.MOVDI,OFFSETSTRING1

MOVCX,20

MOVAL,20H;空格字符的ASCII码

CLD

REPNZSCASB

JZFOUND

MOVDI,0

JMPDONE

FOUND;DECDI;因SCASB的功能是:

(1)(AL)——[DI]

(2)DI←[DI]+1

MOVBX,DI

DENE:

HLT

4.MOVSI,OFFSETSTRING1

MOVDI,OFFSETSTRING2

MOVCX,20

CLD

REPZCMPSB

JNZUMMAT

MOVAL,0

JMPOUTPUT

UMMAT:

MOVAL,0FFH

OUTPUT:

MOVRESULT,AL

RET

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

1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1