汇编语言CH3练习参考答案.docx

上传人:b****1 文档编号:2154954 上传时间:2023-05-02 格式:DOCX 页数:30 大小:124.18KB
下载 相关 举报
汇编语言CH3练习参考答案.docx_第1页
第1页 / 共30页
汇编语言CH3练习参考答案.docx_第2页
第2页 / 共30页
汇编语言CH3练习参考答案.docx_第3页
第3页 / 共30页
汇编语言CH3练习参考答案.docx_第4页
第4页 / 共30页
汇编语言CH3练习参考答案.docx_第5页
第5页 / 共30页
汇编语言CH3练习参考答案.docx_第6页
第6页 / 共30页
汇编语言CH3练习参考答案.docx_第7页
第7页 / 共30页
汇编语言CH3练习参考答案.docx_第8页
第8页 / 共30页
汇编语言CH3练习参考答案.docx_第9页
第9页 / 共30页
汇编语言CH3练习参考答案.docx_第10页
第10页 / 共30页
汇编语言CH3练习参考答案.docx_第11页
第11页 / 共30页
汇编语言CH3练习参考答案.docx_第12页
第12页 / 共30页
汇编语言CH3练习参考答案.docx_第13页
第13页 / 共30页
汇编语言CH3练习参考答案.docx_第14页
第14页 / 共30页
汇编语言CH3练习参考答案.docx_第15页
第15页 / 共30页
汇编语言CH3练习参考答案.docx_第16页
第16页 / 共30页
汇编语言CH3练习参考答案.docx_第17页
第17页 / 共30页
汇编语言CH3练习参考答案.docx_第18页
第18页 / 共30页
汇编语言CH3练习参考答案.docx_第19页
第19页 / 共30页
汇编语言CH3练习参考答案.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言CH3练习参考答案.docx

《汇编语言CH3练习参考答案.docx》由会员分享,可在线阅读,更多相关《汇编语言CH3练习参考答案.docx(30页珍藏版)》请在冰点文库上搜索。

汇编语言CH3练习参考答案.docx

汇编语言CH3练习参考答案

汇编语言程序设计练习参考答案

(第三章80x86的指令系统与寻址方式)

1.

(1)立即寻址-

(2)直接寻址7237H

(3)使用BX的寄存器寻址-

(4)使用BX的间接寻址637DH

(5)使用BX的寄存器相对寻址0D5B4H

(6)基址变址寻址8E18H

(7)相对基址变址004FH

2.

(1)ADDDX,BX

(2)ADDAL,[BX][SI]

(3)ADD[BX+0B2H],CX

(4)ADDWORDPTR[0524H],2A59H

(5)ADDAL,0B5H

3.

(1)MOVBX,OFFSETBLOCK+0AH

MOVDX,[BX]

(2)MOVSI,OAH

MOVDX,BLOCK[SI]或MOVDX,SI+BLOCK

(3)MOVBX,OFFSETBLOCK或LEABX,BLOCK

MOVSI,OAH

MOVDX,[BX][SI]

4.

(1)MOVAX,1200H1200H=>AX=1200H

(2)MOVAX,BXBX=0100H=>AX=0100H

(3)MOVAX,[1200H]((ds)*10h+1200h)=(21200h)=4C2AH=>AX=4C2AH

(4)MOVAX,[BX]((ds)*10h+(bx))=(20199H)=3412H=>AX=3412H

(5)MOV1100H[BX]((ds)*10h+(bx)+1100h)=(21200H)=4C2AH=>AX=4C2AH

(6)MOVAX,[BX][SI]((ds)*10h+(si)+(bx))=(20102H)=7856H=>AX=7856H

(7)MOVAX,1100H[BX][SI]((ds)*10h+(si)+(bx)+1100h)=(21202hH)=65B7H=>AX=65B7H

注:

原题(5)和题(7)中的1100后面漏了十六进制说明符“H”

5.

(1)当前指令的IP为2BC0H,段内直接转移指令占3个字节,因此下一条指令的地址(IP)值应该为2BC2H,于是转移的偏移地址为:

2BC2H+5119H=7CDCH

(2)按题意,该指令为JMPWORDPTR[BX]

((DS)*10H+(BX))=(212A*10H+1200H)=(224A0H)=0600H,所以转移的偏移地址为0600H

(3)按题意,该指令为JMPWORDPTRD[BX]

((DS)*10H+(BX)+D)=(212A*10H+1200H+5119H)=(275B9H)=098AH,所以转移的偏移地址为098AH

6.

LDSBX,[2000H]

MOVAX,[BX]

图示如图3.1

注:

为了只改变AX,不影响其它寄存器,本题可以做如下完善处理:

PUSHDS

PUSHBX

LDSBX,[2000H]

MOVAX,[BX]

POPBX

POPDS

段值(DS):

段内偏移->物理地址

1B00H:

0000H->1B000H

1B00H:

2000H->1D000H

10

LDSBX,[2000H]

FF

=>BX=0FF10H

00

=>DS=8000H

80

8000H:

0FF10H->8FF10H

MOVAX,[BX]

AX

图3.1

7.JMPSHORTOBJ指令占两个字节,存放在偏移地址为0624H的连续两单元中,因此这条指令执行完后下一条指令的偏移地址(即IP值)为0626H,因此转向地址OBJ的值分别为:

(1)0626H+0027H=064DH

(2)0626H+006BH=0691H

(3)0626H+0FFC6=05ECH

8.指令源操作数的寻址方式物理地址

(1)MOVAX,0ABH立即数寻址-

(2)MOVAX,BX寄存器寻址-

(3)MOVAX,[100H]存储器直接寻址(ds)*10H+0100H=20100H

(4)MOVAX,VAL存储器直接寻址(ds)*10H+0050H=20050H

(5)MOVAX,[BX]寄存器间接寻址(ds)*10H+(bx)=20100H

(6)MOVAX,ES:

[BX]存储器直接寻址(es)*10H+(bx)=21100H

(7)MOVAX,[BP]寄存器间接寻址(ss)*10H+(bp)=15010H

(8)MOVAX,[SI]寄存器间接寻址(ds)*10H+(si)=200A0H

(9)MOVAX,[BX+10]寄存器相对寻址(ds)*10H+(bx)+10=2010AH

(10)MOVAX,VAL[BX]寄存器相对寻址(ds)*10H+(bx)+0050H=20150H

(11)MOVAX,[BX][SI]基址变址寻址(ds)*10H+(bx)+(si)=201A0H

(12)MOVAX,VAL[BX][SI]相对基相变址寻址(ds)*10H+(bx)+(si)+0050H=201F0H

9.

(1)MOVAX,[BX+0CH]

MOVZREO,AX

(2)MOVAX,ARRAY[BX]

MOVZREO,AX

10.

MOVAX,TABLE把符号地址TABLE所给出的字存储单元中的内容送给AX,指令执行完后,(AX)=1234H

LEAAX,TABLE把符号地址TABLE的有效地址(这里是TABLE的偏移量)送给指定寄存器AX,指

令执行完后,(AX)=0032H

11.

分配的存储单元如图3.2所示。

指令执行完后,(AX)=1E00H

TABLE->

0A

<-BX(MOVBX,OFFSETTABLE)

00

14

00

<-BX(ADDBX,ENTRY)

1E

AX=1E00H(MOVAX,[BX])

00

28

00

32

ENTRY->

03

00

图3.2

12.

MOVBX,OFFSETCSTRING或LEABX,CSTRING

MOVDL,[BX]

MOVDH,[BX+6]

13.

开始第一次PUSH操作第二次PUSH操作POP操作

图3.3

14.

LESBX,[2000H]

MOVAX,ES:

[BX]

15.

运算结果SF,ZF,CF,OF

(1)74D4H0000

(2)A5C1H1001

(3)4240H0010

(4)0000H0110

16.

运算结果SF,ZF,CF,OF

(1)C7541010

(2)12B00000

(3)45B00001

(4)9F241000

17.

(1).

MOVAX,Z;把Z送AX

SUBAX,X;Z-X

ADDAX,W;W+(Z-X)

MOVZ,AX;结果保存在Z中

(2).

MOVAX,X;X送AX

ADDAX,6;X+6

NEGAX;-(X+6)

ADDAX,W;W-(X+6)

SUBAX,R;W-(X+6)-R

SUBAX,9;W-(X+6)-R-9=W–(X+6)–(R+9)

MOVZ,AX;最终结果送Z中

(3)

MOVAX,W;把W送到AX

IMULX;W*X,积的低十六位在AX中,高十六位在DX中

MOVBX,Y;把Y送BX

ADDBX,6;Y+6

IDIVBX;(W*X)/(Y+6),商在AX中,余数在DX中

MOVZ,AX;商送Z,

MOVR,DX;余数送R

(4)

本题运算结果可能超出字数据Z范围,而运算还将产生余数,题意不够明确。

考虑舍去除法过程中的余数部分,并将Z单元向后扩展形成双字数据,参考代码如下:

MOVAX,W;把W送到AX中

SUBAX,X;W-X

MOVBL,5

IDIVBL;(W-X)/5,商在AL中,余数在AH中

MOVBL,2

IMULBL;2*(W-X)/5,积在AX中(将舍去前面除法得到的余数)

IMULY;(2*(W-X)/5)*Y = (((W-X)/5*Y)*2,积的高16位在DX中,低

;16位在AX中

MOVZ,AX;把结果中低32位放入Z双字单元中

MOVZ+2,DX;把结果中高32位放入Z+4双字单元中

18.

指令本条指令执行完后AX的内容执行完后CF,SF,ZF的值

MOVAX,1234H1234H?

?

?

MOVCL,41234H?

?

?

ROLAX,CL2341H100

DECAX2340H100

MOVCX,42340H100

MULCX8D00H000

INT20H

程序结束后,(AX)=8D00H(DX)=0000H

19.

指令执行完后AX的内容执行完后CF,SF,ZF和OF的值

MOVAX,00?

?

?

?

;MOV指令不影响标志位

DECAXFFFFH?

100;DEC/INC指令不影响CF标志

ADDAX,7FFFH7FFEH1000

ADDAX,28000H0101

NOTAX7FFFH0101;NOT指令不影响标志位

SUBAX,0FFFFH8000H1101

ADDAX,8000H0000H1011

SUBAX,1FFFFH1100

ANDAX,58D1H58D1H0000;AND指令将CF和OF清零

SALAX,1B1A2H0101

SARAX,1D8D1H0100

NEGAX272FH1000

RORAX,19397H1001;循环移位指令只影响CF和OF

20.

(1)MOVAX,DATAX

ADDDATAY,AX

(2)MOVAX,DATAX

ADDDATAY,AX

MOVAX,DATAX+2

ADDDATAY+2,AX

(3)本组指令的作用是:

将和DATAX+DATAY]+1=0480H给了BX

(4)MOVAX,DATAX

MULDATAY;结果在DX:

AX中

(5)使用32位寄存器的80x86指令:

MOVAX,DATAX

MOVDX,[DATAX+2]

MULDWORDPTRDATAY;结果在EDX:

EAX中

仅使用8086指令:

MOVAX,X

MULY+2

MOVCX,DX

MOVBX,AX

MOVAX,X+2

MULY

ADDBX,AX

ADCCX,DX

PUSHF

MOVAX,X+2

MULY+2

ADDCX,AX

ADCDX,0

POPF

ADCDX,0

PUSHDX

MOVAX,X

MULY

ADDBX,DX

ADCCX,0

POPDX

ADCDX,0;结果DX:

CX:

BX:

AX四寄存器组成的64位二进制保存了乘积

(6)MOVAX,DATAX

MOVBL,23

DIVBL;商在AL中,余数在AH中

(7)MOVAX,DATAX

MOVDX,DATAX+2

DIVDATAY;商在AX中,余数在DX中

21.NEGDX

NEGAX

SBBDX,0

NOTDX

NOTAX

ADDAX,1

ADCDX,0

22.

MOVAX,A;把双字长数的低字送AX

MOVDX,A+2;把双字长数的高字送DX

TESTDX,8000H;测试双字长数的符号位

JZRIGHT;符号位为0,说明是非负数,转DONE直接保存结果

NEGDX;对负数,进行求补(方法同上题)

NEGAX

SBBDX,0

DONE:

MOVBX,AX

MOVB+2,DX

23.

每条指令单独执行后的结果分别是:

(1)009AH

(2)0061H(3)00FBH(4)0001CH(5)0000H(6)00E3H

24.

(BX)=6D16H=0110110100010110B=>00000000110110100010110B=0000000011011010B=0DAH

25.

乘2采用算术左移(或逻辑左移)指令、除2使用算术右移指令

(1)把53D乘以2:

MOVAL,53

SHLAL,1或SHLAL,1

结果为106

(2)把-49乘以2:

MOVAL,-49

SALAL,1或SHLAL,1

结果为-98

(3)把53除以2的程序:

MOVAX,53

SHRAX,1

结果为26

(4)把-49除以2:

MOVAL,-49

SARAL,1

结果为-25

26.

设指令执行前AX和DX的4位十六进制数分别位AX=a1a2a3a4和DX=d1d2d3d4,则各指令执行后的寄存器变化情况如下:

MOVCL,04;AX=a1a2a3a4DX=d1d2d3d4

SHLDX,CL;AX=a1a2a3a4DX=d2d3d40

MOVBL,AH;AX=a1a2a3a4DX=d1d2d30,BL=a1a2

SHLAX,CL;AX=a2a3a40DX=d1d2d30,BL=a1a2

SHRBL,CL;AX=a2a3a40DX=d1d2d30,BL=0a1

ORDL,BL;AX=a2a3a40DX=d1d2d3a1,BL=0a1

以上指令序列执行完后,DX=d1d2d3a1,AX=a2a3a40,可见,本程序段的功能是:

把保存在DX:

AX中的双字数据左移4位

27.

各指令单独执行后,DX的值分别为:

(1)005CH

(2)0017H(3)05C8H(4)0072H(5)2017H

(6)00CDH(7)00B9H(8)05CCH(9)00DCH

28.

(BX)=00B7H=0000000010110111B=>0000000101100110B=>1100000000101101B=0C02DH

29.

(1)

MOVAX,SEGCONAME

MOVDS,AX;把CONAME所在段的段值送DS

MOVSI,OFFSETCONAME;把CONAME首地址送SI

MOVAX,SEGPRLINE

MOVES,AX;把PRLINE所在段的段值送ES

MOVDI,OFFSETPRLINE;把PRLINE首地址送DI

MOVCX,20;把传送字节数放在CX中

CLD;从左到右传送

REPMOVSB

(2)

MOVAX,SEGCONAME

MOVDS,AX;把CONAME所在段的段值送DS

LEASI,CONAME+20;把CONAME末首地址送SI

MOVAX,SEGPRLINE

MOVES,AX;把PRLINE所在段的段值送ES

LEADI,PRLINE+20;把PRLINE末地址送DI

MOVCX,20;;把传送字节数放在CX中

STD;从右到左传送

REPMOVSB

(3)

MOVAX,SEGCONAME

MOVDS,AX;把CONAME所在段的段值送DS

LEASI,CONAME+2;把CONAME中的第三字节地址送SI

LODSW

(4)

MOVAX,SEGPRLINE

MOVES,AX;把PRLINE所在段的段值送ES

LEADI,PRLINE+5

STOSW

(5)

MOVAX,SEGPRLINE

MOVES,AX;把PRLINE所在段的段值送ES

MOVSI,OFFSETCONAME;把CONAME首地址送SI

MOVCX,20

MOVAL,’’

CLD

LAHF

ANDAH,10111111B

SAHF;以上3条指令将ZF标志清零

REPNESCASB

JNZQUIT;没找到空格,直接退出

DECDI;找到空格,DI是所在空格位置的下一单元地址

MOVBH,[DI];把找到的空格送给BH

QUIT:

30.

STRINGDB’ThedateisFEB&03’

不使用串操作指令,可以把STRING中所有的&字符都用空格替换:

MOVCX,18

MOVAX,SEGSTRING

MOVDS,AX;把STRING所在段的段值送DS

MOVSI,0

MOVAL,’&’;把&字符的ASCII码送AL

LOP:

CMPAL,STRING[SI];依次查找

JNZNEXT;没找到准备下一次查找

MOVSTRING[SI],’’;找到则用空格替换&

NEXT:

INCSI

LOOPCX

使用串操作指令,只替换STRING中第一个找到的&字符:

MOVCX,18

MOVAX,SEGSTRING

MOVES,AX;把STRING所在段的段值送ES

MOVDI,OFFSETSTRING;把STRING首地址送DI

MOVAL,’&’;把&字符的ASCII码送AL

CLD

LAHF

ANDAH,10111111B

SAHF;以上3条指令将ZF标志清零

REPNZSCASB;依次查找

JNZEXIT;没找到,退出

DECDI

MOV[DI],’’;找到则用空格替换&

NEXT:

INCSI

LOOPCX

31.

STUDENT_NAMEDB30DUP(?

STUDENT_ADDRDB9DUP(?

PRINT_LINEDB132DUP(?

(1)

MOVAX,SEGPRINT_LINE

MOVES,AX;把PRINT_LINE所在段的段值送ES

LEADI,PRINT_LINE;把PRINT_LINE首地址送DI

MOVAL,’’

MOVCX,132

CLD

REPSTOSB

(2)

MOVAX,STUDENT_ADDR

MOVES,AX;把STUDENT_ADDR所在段的段值送ES

LEADI,STUDENT_ADDR;把STUDENT_ADDR首地址送DI

MOVAL,’-’

MOVCX,9

LAHF

ANDAH,10111111B

SAHF;以上3条指令将ZF标志清零

CLD

REPNZSCASB

JNZQUIT;没找到,则退出

DECDI;找到,DI-1后,保存了其偏移地址

QUIT:

(3)

MOVAX,STUDENT_ADDR

MOVES,AX;把STUDENT_ADDR所在段的段值送ES

LEADI,STUDENT_ADDR+8;把STUDENT_ADDR末地址送DI

MOVAL,’-’

MOVCX,9

LAHF

ANDAH,10111111B

SAHF;以上3条指令将ZF标志清零

STD

REPNZSCASB

JNZQUIT;没找到,则退出

INCDI;找到,DI+1后,存了其偏移地址

QUIT:

(4)

MOVAX,STUDENT_NAME

MOVES,AX;把STUDENT_NAME所在段的段值送ES

LEADI,STUDENT_NAME+29;把STUDENT_NAME末地址放到DI中

MOVAL,’’;把空格符的ASCII值放入AL中

MOVCX,30;把重复次数放到CX中

STD;让DI从低位移到高位

XORAH,AH;将ZF置1

REPZSCASB;如果有不是空格符的,就退出

JNZREPLACE;如果全是空格符,就转到STORE中

JMPQUIT;否则,直接退出

REPLACE:

INCDI;全是空格时,DI已经为-1

MOVCX,30

CLD

MOVAL,’*’

REPSTOSB

(5)

;把STUDENT_NAME移到PRINT_LINE的前30个字节中

MOVAX,SEGSTUDENT_NAME

MOVDS,AX

LEASI,STUDENT_NAME

MOVAX,SEGPRINT_LINT

MOVES,AX

LEADI,PRINT_LINE

MOVCX,30

CLD

REPMOVSB

;把STUDENT_ADDR移到PRINT_LINE的后9个字节中

MOVAX,SEGSTUDENT_ADDR

MOVDS,AX

LEASI,STUDENT_ADDR+8

LEADI,PRINT_LINE+131

MOVCX,9

STD

REPMOVSB

32.

...

MOVAX,SEGOLDS

MOVDS,AX

LEASI,OLDS

MOVAX,AXSEGNEWS

MOVES,AX,

LEADI,NEWS

MOVCX,5

XORAX,AX;将ZF标志置1

REPZCMPSB

JNZNEW_LESS;两串出现不同就转移

...

NEW_LESS:

33.

(1)CMPDX,CX

JAEXCEED

(2)CMPBX,AX

JGEXCEED

(3)CMPCX,0

JZZERO

(4)CMPBX,AX

JOOVERFLOW

(5)CMPBX,AX

JLEEQ_SMA

(6)CMPDX,CX

JBEEQ_CX

34.

(以下寄存器及其运算数据都是十六进制数)

AXBX和差OFCF转向

(1)147B80DC9557-00L1

(2)B5685

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2