第5章作业答案.docx

上传人:b****8 文档编号:28181908 上传时间:2023-07-09 格式:DOCX 页数:10 大小:17.81KB
下载 相关 举报
第5章作业答案.docx_第1页
第1页 / 共10页
第5章作业答案.docx_第2页
第2页 / 共10页
第5章作业答案.docx_第3页
第3页 / 共10页
第5章作业答案.docx_第4页
第4页 / 共10页
第5章作业答案.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

第5章作业答案.docx

《第5章作业答案.docx》由会员分享,可在线阅读,更多相关《第5章作业答案.docx(10页珍藏版)》请在冰豆网上搜索。

第5章作业答案.docx

第5章作业答案

习题5

1.试说明以下指令中各操作数的寻址方式,如果是存储器寻址,请给出其EA计算公式,并说明所使用的段寄存器。

(1)MOVAL,08H

源操作数:

立即数寻址

目的操作数:

寄存器寻址

(2)MOV[0120H],BL

源操作数:

寄存器寻址

目的操作数:

直接寻址,EA=0120H,使用DS段寄存器

(3)ADD[BX],AL

源操作数:

寄存器寻址

目的操作数:

寄存器间接寻址,EA=(BX),使用DS段寄存器

(4)PUSH[SI]0200H

源操作数:

变址寻址,EA=(SI)+0200H,使用DS段寄存器

目的操作数:

隐含寻址(指令中未直接体现)

(5)SUBAX,[BP]

源操作数:

寄存器间接寻址,EA=(BP),使用SS段寄存器

目的操作数:

寄存器寻址

(6)ANDVAR1+4,DL

源操作数:

寄存器寻址

目的操作数:

直接寻址,EA=VAR1+4,使用DS段寄存器

 

(7)PUSHF

源操作数、目的操作数均为隐含寻址

(8)MOVES:

[BX]0100H,AL

源操作数:

寄存器寻址

目的操作数:

基址寻址,EA=(BX)+0100H,使用ES段寄存器

(9)ADCBYTEPTR[BP][SI]0210H,45H

源操作数:

立即数寻址

目的操作数:

基址变址寻址,EA=(BP)+(SI)+0210H,使用SS段寄存器

(10)ORARRY[BX][DI],CL

源操作数:

寄存器寻址

目的操作数:

基址变址寻址,EA=(BX)+(DI)+ARRY,使用DS段寄存器

2.试分析下列汇编指令是否存在语法错误,如果有语法错误存在,请说明是怎样的错误。

(1)PUSH8243H

错误,单操作数指令不能使用立即数

(2)POPAL

错误,进栈、出栈指令的操作数应为16位

(3)MOVAL,6543H

错误,源、目的操作数类型不匹配

(4)ADD[0100H],64H

错误,目的操作数应使用PTR运算符指出类型,否则具有二义性

正确的写法:

ADDBYTEPTR[0100H],64H,(或使用WORDPTR)

 

(5)ADCVAR1,VAR2

错误,8086指令系统的双操作数指令中,必须有一个是寄存器,不能两个操作数同为内存单元

(6)MOVDS,ES

错误,段寄存器间不能使用MOV指令直接传递数据,必须通过通用寄存器作为中转

(7)MOVDS,0620H

错误,使用MOV指令向段寄存器传递数据时,不能使用立即数

(8)LEABX,AX

错误,LEA指令的源操作数必须为内存单元

(9)DECAL,AH

错误,DEC指令为单操作数指令

(10)SHRBL,3

错误,当移位次数大于1时,在移位指令中特定使用CL寄存器给出移位次数

正确的写法:

MOVCL,3

SHRBL,CL

3.试说明分别执行下列各组指令后,CF、OF、AF、ZF、SF、PF这六个状态标志分别是怎样的取值。

(1)MOVAL,08H

ADDAL,0F9H

CF=1;OF=0;AF=1;ZF=0;SF=0;PF=0

(2)MOVAL,0E1H

ADDAL,0F4H

CF=1;OF=0;AF=0;ZF=0;SF=1;PF=0

(3)MOVAL,01H

SUBAL,02H

CF=1;OF=0;AF=1;ZF=0;SF=1;PF=1

(4)MOVAL,02H

INCAL

CF维持MOV指令前的取值(INC指令不影响CF);OF=0;AF=0;ZF=0;SF=0;PF=1

(5)MOVAL,01H

ANDAL,02H

CF=OF=0;AF不确定;ZF=1;SF=0;PF=1

4.按要求分析下面程序片段的执行结果。

MOVAL,0C2H

MOVAH,0E4H

ADDAL,AH

执行该程序片段后,(AL)=?

,(AH)=?

,如果将ADD指令的两个操作数解释为无符号数,运算有没有溢出?

为什么?

如果将ADD指令的两个操作数解释为补码,运算有没有溢出?

为什么?

答:

执行该程序片段后,(AL)=0A6H,(AH)=0E4H,如果操作数解释为无符号数,运算溢出,因为加法运算后最高位产生了进位,CF=1,需使用9个二进制位才能表达完整运算结果;如果将操作数解释为补码,则运算没有溢出,因为从操作数与运算结果的符号位观察,两个操作数均为负数补码,相加后所得结果仍然为负数补码,符号位正确,表明加法结果未超出补码表示范围(这里是8位补码的表示范围),加法运算后OF=0。

5.按要求分析下面程序片段的执行结果。

MOVAL,98H

MOVBL,42H

XCHGAL,BL

SUBAL,BL

执行该程序片段后,(AL)=?

,(BL)=?

,如果将SUB指令的两个操作数解释为无符号数,运算有没有溢出?

为什么?

如果将SUB指令的两个操作数解释为补码,运算有没有溢出?

为什么?

如果将SUB指令的两个操作数解释为补码,其减法运算对应的十进制真值表达式应如何书写?

答:

执行该程序片段后,(AL)=0AAH,(BL)=98H,如果将操作数解释为无符号数,则运算溢出,从操作数判断,此运算属于被减数小于减数的情况,这在无符号数运算中是不允许的(如果当前操作数仅为长数据的一部分,则另当别论),减法运算后最高位必然产生借位,CF=1;如果操作数解释为补码,运算也溢出,从操作数判断,此运算属于“正-负”类型,等价于“正+正”类型,正确的运算结果应为正数或零的补码,而运算结果的符号位却为“负”,表明运算结果超出补码表示范围(这里为8位补码表示范围),减法运算后OF=1。

SUB指令所使用的被减数补码为42H=01000010B,减数补码为98H=10011000B,由于被减数为正数补码,它等于真值本身,而减数补码为负数补码,将其取反加1后,添上负号,得到其二进制真值为-01101000B。

将被减数、减数的二进制真值转换为十进制后,得到真值运算表达式:

66-(-104)=170,很明显运算结果超出8位补码的最大值+127。

6.按要求分析下面程序片段的执行结果。

STC

MOVAL,03H

ANDAL,02H

ADCAL,00H

执行该程序片段后,(AL)=?

答:

(AL)=02H,此题应注意AND指令会强置CF为0。

7.假设(DS)=1000H,(SS)=2000H,字内存单元(10200H)=0870H,(10202H)=2000H,(20870H)=0203H,(20872H)=0405H,括号内所给为内存单元物理地址,括号表示该地址所指示单元中保存的数据,分别执行下列程序片段后,按要求分析各程序片段的执行结果。

(1)MOVAL,[0200H]

执行该程序片段后,(AL)=?

答:

源操作数地址为(DS)*16+0200H=10000H+0200H=10200H,因此执行该程序片段后,(AL)=70H(逆序存放,低地址对应低数据位)

(2)MOVBP,0871H

MOVBL,[BP]

执行该程序片段后,(BL)=?

答:

第二条指令的源操作数地址为(SS)*16+(BP)=20871H,执行该程序片段后,(BL)=02H(逆序存放,高地址对应高数据位)

(3)LEASI,[0200H]

执行该程序片段后,(SI)=?

答:

LEA指令将源操作数的EA传送到目的操作数保存,(SI)=0200H

(4)MOVSI,[0200H]

LEASI,[SI]

执行该程序片段后,(SI)=?

答:

MOV指令中源操作数地址为(DS)*16+0200H=10200H,执行后(SI)=0870H,第二条指令源操作数的EA直接为(SI)=0870H,执行后仍有(SI)=0870H。

(5)LDSBX,[0200H]

MOVAL,[BX]0002H

执行该程序片段后,(AL)=?

答:

LDS指令中源操作数地址为(DS)*16+0200H=10200H,将(10200H)字单元内容传递到BX保存,将(10202H)字单元内容传递到DS保存,执行后(BX)=0870H,(DS)=2000H;MOV指令中源操作数地址为(DS)*16+(BX)+0002H=20872H,执行后(AL)=05H。

8.按要求分析下面程序片段的执行结果。

MOVAX,651CH

SHLAL,1

RCLAH,1

执行该程序片段后,(AX)=?

,该程序片段的功能是什么?

如果将(AX)解释为无符号数,那么运算是否溢出?

为什么?

如果将(AX)解释为补码,运算是否溢出?

为什么?

SHL与SAL指令间有什么关联和区别?

答:

执行该程序片段后,(AX)=0CA38H,该程序片段的功能为将AX中的16位编码左移1位,等价于乘以2(也可理解为自加一次)。

如果将(AX)解释为无符号数,那么运算没有溢出,因为最后一次移位操作后,最高移出位为0,即CF=0(自加完成后最高位无进位);如果将(AX)解释为补码,运算溢出,因为移位前后(AX)的最高位发生了变化(由0变为1),符号位在运算中丢失,可以理解为自加运算结果超出了16位补码表示范围。

SHL与SAL指令本质上对应同一条机器指令,在功能上并无区别,因为无符号数与补码的左移操作是完全相同的,但为了指令系统设计的规整性,在汇编指令中将它们区分开,SHL针对无符号数左移,SAL针对补码左移。

9.按要求分析下面程序片段的执行结果。

MOVAL,35H

ANDAL,0FH

执行该程序片段后,(AL)=?

CF、OF、AF、ZF、SF、PF标志取值是什么?

该程序片段的功能是什么?

答:

执行该程序片段后,(AL)=05H,CF=0;OF=0;AF不确定;ZF=0;SF=0;PF=1;该程序片段的功能是将(AL)中的低4位数据分离出来,屏蔽高4位。

10.假设一个48位的补码按照由低位到高位的顺序保存在字类型的内存单元VA1、VA1+2、VA1+4中,试按下列要求完成程序片段设计。

(红字部分请在教材中纠正)

(1)设计程序片段,实现将该48位补码除以4的功能,运算结果仍然保存在原内存单元中。

解:

SARVA1+4,1

RCRVA1+2,1

RCRVA1,1

SARVA1+4,1

RCRVA1+2,1

RCRVA1,1

(2)设计程序片段,求该48位补码的相反数补码,运算结果仍然保存在原内存单元中。

解:

NOTVA1

NOTVA1+2

NOTVA1+4

ADDVA1,1

ADCVA1+2,0

ADCVA1+4,0

11.试说明如何使用CMP指令提供的标志位判断两个补码操作数大小关系的原理。

答:

请参考本章关于比较指令(CMP)中的详细介绍加以说明。

12.假设(SP)=0060H,执行两次PUSH指令后,(SP)=?

假设(SP)=0038H,执行三次POP指令后,(SP)=?

答:

执行两次PUSH指令后,(SP)=005CH;执行三次POP指令后(SP)=0038H+0002H*3=0038H+0006H=003EH

13.按要求分析下面程序片段的执行结果。

MOVAL,01H

NEGAL

INCAL

执行该程序片段后(AL)=?

,CF、OF标志的状态是什么?

答:

执行该程序片段后(AL)=0,CF=1,注意,这是受NEG指令影响的结果,INC指令不影响CF标志;OF=0,加法运算并无溢出,因为0FFH为-1的补码,加1后等于0是正确的。

14.按要求分析下面程序片段的执行结果。

MOVBL,51H

ANDBL,0FEH

XORBL,50H

DECBL

执行该程序片段后(BL)=?

,CF、OF标志的状态是什么?

答:

执行该程序片段后(BL)=0FFH,CF=0,注意,这是受XOR指令的影响,XOR指令将CF强置为0,而DEC指令不影响CF;OF=0,此标志是受DEC指令影响的结果。

此题中应注意,逻辑运算指令会将CF、OF强置为0,而DEC指令不影响CF标志。

15.按照各小题的要求分别设计程序片段。

(因存在多种设计方式,程序设计题目的答案仅作为参考)

(1)将AL寄存器的高4位与低4位交换

MOVCL,4

ROLAL,CL

(2)将TF标志位置1

PUSHF

POPAX

ORAX,0100H

PUSHAX

POPF

(3)将AL寄存器的第7位清0,但不影响其它数据位

ANDAL,7FH

(4)分离AL寄存器的最低两位,其它数据位清0。

ANDAL,03H

(5)分离AL寄存器的高4位与低4位,并分别保存在BL、BH的低4位

PUSHAX

ANDAL,0FH

MOVBL,AL

POPAX

ANDAL,0F0H

MOVCL,4

ROLAL,CL

MOVBH,AL

如有侵权请联系告知删除,感谢你们的配合!

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

当前位置:首页 > 自然科学 > 物理

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

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