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

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

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

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

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

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

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

(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.0220EB0AJMPADDR1

2.0230EBF7JMPADDR2

解:

1.e为当前IP与目的地址的距离。

已知位移量e的计算公式:

e=目的地址—(IP源+2),即

0AH=目的地址—(IP源+23)=ADDR1—0222H

所以,ADDR1=0AH+0222H=022CH(正向转移)

2.e=目的地址—(IP源+2)

0F7H=ADDR2—0232H

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

3-24NEARJMP,SHORTJMP,LOOP和条件转移指令的转移范围是多少?

解:

(1)NEARJMP:

目标地址距JMP指令+32767~—32768字节范围以内。

(2)SHORTJMP:

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

(3)LOOP:

所转去的目标地址在+127~—128字节范围以内,为LOOPSHORT_LABEL

(4)条件转移指令:

目的地址OPRD为近标号,即转向的目标地址必须在转移指令的+127~—128字节范围以内。

2-25设AX和CX中的内容为无符号数,BX和DX中的内容为带符号数,试用CMP指令和条件转移指令实现以下判断:

1.若(AX)超过(CX),则转至BIGER。

2.若(BX)>(DX),则转至BIGE。

3.若(CX)低于(AX),则转至LESS。

4.若(DX)>(BX),则转至LESS。

5.若(AX)=(CX),则转至EQUAL。

解:

1.CMPAX,CX

JABIGER

2.CMPBX,DX

JGBIGER

3.CMPCX,AX

JBLESS

4.CMPDX,BX

JLLESS

5.CMPAX,CX

JZEQUAL

3-26(略)

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

解1:

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

当前位置:首页 > 小学教育 > 学科竞赛

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

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