汇编语言与接口技术习题答案.docx

上传人:b****8 文档编号:29402398 上传时间:2023-07-23 格式:DOCX 页数:96 大小:133.50KB
下载 相关 举报
汇编语言与接口技术习题答案.docx_第1页
第1页 / 共96页
汇编语言与接口技术习题答案.docx_第2页
第2页 / 共96页
汇编语言与接口技术习题答案.docx_第3页
第3页 / 共96页
汇编语言与接口技术习题答案.docx_第4页
第4页 / 共96页
汇编语言与接口技术习题答案.docx_第5页
第5页 / 共96页
点击查看更多>>
下载资源
资源描述

汇编语言与接口技术习题答案.docx

《汇编语言与接口技术习题答案.docx》由会员分享,可在线阅读,更多相关《汇编语言与接口技术习题答案.docx(96页珍藏版)》请在冰豆网上搜索。

汇编语言与接口技术习题答案.docx

汇编语言与接口技术习题答案

第3章80X86的指令系统和寻址方式

本章主要讲授:

80X86的数据类型、寻址方式、指令格式、指令系统(数据传送指令、算术运算指令、逻辑运算指令、串操作数指令、控制转移指令、处理机指令和高级语言指令)和80486指令等。

通过本章的学习,注意下面几方面的内容:

一、掌握80X86的数据类型;

二、掌握80X86的寻址方式;

三、掌握80X86的指令系统及它们的一些使用实例。

四、了解保护属性检查指令、高级语言指令以及Cache管理指令等。

习题精解

1已知DS=2000H,BX=0100H,SI=0002H,存储单元[20100H]〜[20103H]依次存放12345678H,[21200H]〜[21203H]依次存放2A4CB765H,说明下列每条指令执行后AX寄

存器的内容。

(1)

MOV

AX,

1200H

(2)

MOV

AX,

BX

(3)

MOV

AX,

[1200H]

(4)

MOV

AX,

[BX]

(5)

MOV

AX,

[BX+1100H]

(6)

MOV

AX,

[BX+SI]

(7)

MOV

AX,

[BX][SI+1100H]

参考答案:

根据物理地址形成公式:

物理地址=段基址x16+有效地址,得:

1)

1200H

2)

0100H

3)

4C2AH

4)

3412H

5)

4C2AH

6)

7856H

(7)65B7H

分析:

本题主要考查点是数据寻址方式,寻址方式就是指令中用于说明操作数所在地址的方法,或者是寻找操作数有效地址的方法。

包括数据寻址和转移地址寻址两大类。

80X86的数据寻址方式总结如下:

(1)立即寻址方式

操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式就称为立即数寻址方式。

注:

1、使用立即寻址的指令主要用来给寄存器赋初值,并且只能用于源操作数字段

2、不能直接给段寄存器和标志寄存器赋予立即数。

例:

MOVAL,5

MOVAX,1234H

MOVEAX,12345678H

(2)寄存器寻址方式

操作数存放在指令规定的某个寄存器(如:

对于16位操作数,寄存器可以是AX,BX,CXDXSI,DL,SP或BP;而对8位操作数,寄存器可以是AHAL,BH,BL,CHCL,DH

或DL)中。

例:

MOVAL,BH

MOVAX,CX

MOVEAX,EBP

(3)存储器寻址

操作数存放在存储器中,在寻址时要计算存储单元的有效地址,有效地址可以由以下四种成分组成:

位移量:

是存放在指令中的一个

8位、16位或32位的数;

 

BX、BP、任何32位通用寄存器都可以作

SI、DI、除ESP外的32位通用寄存器都

基址:

其值存放在基址寄存器中。

为基址寄存器使用;

变址:

其值存放在变址寄存器中。

可以作为基址寄存器使用;

比例因子:

是80386及后继机型中新增寻址方式中的术语。

其值可为1、2、

4、8。

根据计算有效地址EA方法不同,存储器寻址又分为:

1)直接寻址(directaddressing)

操作数的有效地址是指令的一部分,它与操作码一起存放在代码段中,默认操作数在数据段(DS)中,如果操作数定义在其它段中,则应在指令中指定段超越前缀。

EA^即数

例:

MOVAX,[200H]

2)寄存器间接寻址(registerindirectaddressing)

操作数的有效地EA存放在基址寄存器(BX或BP)或变址寄存器(DI或SI)中。

计算物理地址的缺省段仍然是SI、DI和BX为DSBP为SS

EA=W存器中的值

例:

MOVAX,[BX]

MOVAX,[BP]

MOVAX,[SI]

MOVAX,[DI]

3)寄存器相对寻址(registerrelativeaddressing由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个段寄存器作为地址基准)作为操作数的偏移地址。

EA=基址或变址寄存器(BXBP、DI、Sl)±8位或16位的位移量注:

寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之)。

例:

MOVAX,[BX+2]

MOVAX,[BP+1]

MOVAX,[SI-1]

MOVAX,[DI-2]

MOVAX,[BX+2000H]

MOVAX,[BP+1000H]

MOVAX,[SI-1000H]

MOVAX,[DI-2000H]

4)基址变址寻址(base-plus-indexaddressing)

有效地址由基址寄存器(BP或BX的内容加上变址寄存器(DI或SI)的内容形成。

如基址寄存器为BX时,与DS形成的物理地址指向数据段;如基址寄存器为BP时,与SS形成的物理地址指向堆栈段。

EA=基址寄存器的内容+变址寄存器的内容例:

MOVAX,[BX+SI]

MOVAX,[BX+DI]

MOVAX,[BP+SI]

MOVAX,[BP+DI]注:

一条指令中同时使用基址寄存器或变址寄存器是错误的。

例:

MOVCL,[BX+BP]或MOVAX,[SI+DI]均为非法指令。

5)基址变址相对寻址(base-plus-indexrelativeaddressing)

有效地址由基址寄存器(BP或BX)、变址寄存器(DI或SI)及相对偏移量形成。

缺省段的使用仍然是DS与BX组合,SS与BP组合。

EA=基址寄存器的内容+变址寄存器的内容±8位或16位的位移量

例:

MOVAX,[BX+SI+2]

MOVAX,[BX+DI+1]

MOVAX,[BP+SI-1]

MOVAX,[BP+DI-2]

MOVAX,[BX+SI+2000H]

MOVAX,[BX+DI+1000H]

MOVAX,[BP+SI-1000H]

MOVAX,[BP+DI-2000H]

6)比例变址寻址方式有效地址为变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和。

例:

MOVEAX,[ESIX4+100H]

7)基址比例变址寻址方式

有效地址为变址寄存器的内容乘以指令中指定的比例因子再加上基址寄存器的内容之和。

例:

MOVEAX,[ESIX4+EBX]

8)相对基址比例变址寻址方式

有效地址为变址寄存器的内容乘以指令中指定的比例因子、加上基址寄存器的内容,再加上位移量之和。

例:

MOVEAX,[ESIX4+EBX+8]

(4)隐含寻址指令操作数是隐含的,在指令中未显式地指明。

例:

MULBL

指令隐含了被乘数AL及乘积AX。

类似的指令还有:

DIV、CBWMOV等。

(5)I/O端口寻址

直接端口寻址

端口地址用8位立即数(0-255)表示

例:

INAL,21H;从I/O端口地址为21H的端口中读取数据送到AL中。

间接端口寻址

I/O端口地址事先存放在规定的DX寄存器中(0—65535)

例:

MOVDX,0FF03H

OUTDX,AL;将AL中的内容输出到地址由DX

;内容所指定的端口中

2.指出下列指令的错误

1)

MOVCX,

DL

(2)

MOVIP,AX

3)

MOVES,

1234H

(4)

MOVES,DS

5)

MOVAL,

300

(6)

MOV[SP],AX

7)

MOVAX,

BX+DI

(8)

MOV20H,AH

参考答案:

1)字长不同

2)不能给IP赋值

3)立即数不能直接赋给段寄存器

4)给段寄存器赋值一定需要累加器

5)立即数300超过8位不能赋给8位寄存器AL

(6)SP不能作为间址寄存器寻址

(7)两个寄存器不能相加

(8)立即数不能作为目标操作数

分析:

本题主要考查在应用通用传送指令时,需要注意以下几项(以MOV旨令为例):

(1)传送指令可传送8位数据,也可传送16位数据,具体取决于指令中涉及的寄存器是8位还是16位,也取决于立即数的形式。

例如:

MOVAX[35AH];传送DS段中偏移地址为35AH的字单元内容至AX

MOVBL,[35AH];传送DS段中偏移地址为35AH的字节单元内容至BL

MOV[BP],WORDPTR18H;传送16位数据0018H至SS段中两个单元

MOV[BP],BYTEPTR37H;传送8位数据37H至SS段中一个单元

(2)传送指令中总是既含源操作数,又含目的操作数,两者之中至少有一个是用寄器来指出的,这可减少指令长度。

因此,一个立即数不能直接送直接寻址的内存单元。

交换指令

(XCHG两个操作数都不能是立即数。

例如:

MOVWORDPTR[1000H],32A8H错误

MOVWORDPTR[BX,]32A8H正确

(3)传送指令不能在两个内存单元之间直接传送数据。

例如:

MOV[2000H],[35AH]错误

MOVWORDPTR[BX],[8729H]错误

(4)在传送指令中,寄存器既可以作为源操作数,也可以作为目的操作数,但CS寄存器不

能作为目的操作数,换句话说,这个寄存器的值不能随意修改。

IP寄存器既不能作

源操作数,也不能作目的操作数。

例如:

MOVCS,[35AH]

错误

MOVCS,AX

错误

MOVAX,IP

错误

MOVIP,WORDPTR[BX]

错误

(5)用BX、SI、DI来间接寻址时,默认的段寄存器为

DS,而用

BP来间接寻址时,默认的段

寄存器为SS。

例如:

对于MOVWORBTR[BP],1000和MOVWORDTR[BX],2000,设DS=3000HSS=4000HBX=5000HBP=6000H则前一条指令将立即数1000送到物理地址为46000H和4600伯的两单元中,后一条指令将立即数2000送到物理地址为35000H和35001H的两单元中。

(6)8086系统规定,凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行后,又自动恢复对SS寄存器赋值前的中断开放状态。

样做是为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空

间变动过程中出现中断。

了解这点后,就应该注意在修改SS和SP的指令之间不要插入

其他指令。

例如,下述写法是错误的:

MOVSS,AX

MOVDL,38H

MOVAH,2

INT21H

MOVSP,BX

(7)除了一些直接影响FLAGS的指令(如POPF外卜,一般传送指令不改变标志寄存器的内容。

(8)立即数不能直接送段寄存器DSES以及SS

例如:

MOVDS,875BH错误

MOVAX,875BH

MOVDS,AX正确

MOVWORDPTR[BX,]32A8H

MOVES,[BX]正确

实际上,上述几点中有些要求适于其它通用传送型指令,甚至也适合其他种类的指令,读者可在后面的学习中不断去总结和积累。

3.已知数字0〜9对应的格雷码依次为:

18H,34H,05H,06H,09H,OAH,0CH11H,12H,

14H,它存在于以TABLE为首地址(设为200H)的连续区域中。

对如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。

LEABX,TABLE

MOVAL,8

XLAT

参考答案:

LEA

BXTABLE;得到表首地址,放在寄存器BX中

MOVAL,8

XLAT

利用查表转换指令,实质是查找8的格雷码

;立即数8赋值给AL,即AL中存放的是相对于表首的偏移地址

 

结果是(AL)=12H

程序段的功能为:

把表首地址即200H赋给BX。

分析:

本题主要考查查表转换指令(XLAT)的应用。

指令功能:

AL^DS[BX+AL]。

用途:

用于查表(或对一维数组操作),表首地址的偏移地址在BX中,表长度可

达256字节。

把BX的值作为内存字节数组首地址、下标为AL的数组元素的值传送

给AL。

有两个隐含操作数BX和AL。

4.什么是堆栈?

它的工作原则是什么?

它的基本操作有哪两个?

对应哪两种指令?

参考答案:

FILO),它有两种基本

堆栈是一段具有特殊存取规则的数据区,工作原则是先进后出(的操作即进栈和出栈,对应的指令伪PUSH和POP

分析:

堆栈的应用很多,应用8086/8088系统堆栈时我们要注意下面几点:

堆栈是向下生长的;

工作原则是先进后出(FILO);

有两种操作,即进栈和出栈,只能进行字操作,且是对准字;对应的逻辑地址是SS:

SP。

6.给出下列各条指令执行后AL的值,以及CF、ZF、SF、OF和PF的状态。

MOVAL

,89H

ADDAL

,AL

ADDAL

,9DH

CMPAL

,0BCH

SUBAL

,AL

DECAL

INCAL

参考答案:

 

MOVAL,89H;

(AL)

=89H

各状态标志位不变

ADDAL,AL;

(AL)

=12H

CF=1

ZF=0SF=0

OF=1

PF=1

ADDAL,9DH;

(AL)

=AFH

CF=0

ZF=0SF=1

OF=0

PF=1

CMPAL,0BCH;

(AL)

=AFH

CF=1

ZF=0SF=0

OF=0

PF=0

SUBAL,AL;

(AL)

=0H

CF=0

ZF=1SF=0OF=0

PF=1

DECAL;

(AL)

=FFH

CF=0

(不影响CF)

ZF=0SF=0

OF=1

PF=1

INCAL;

(AL)

=0H

CF=0

(不影响CF)

ZF=1SF=0

OF=1

PF=1

分析:

本题主要考查指令对标志位的影响,总结如下。

(1)数据传送指令除了几个专门给标志寄存器赋值的指令(如:

POPFSAHF等)外,对标

志位都没有影响。

(2)算术运算指令中除了DEC和INC不影响CF外,其他算术指令对6个状态标志位都有影响。

(3)逻辑运算指令中,NOT不影响标志位,其它四种指令将使CF=OF=0AF无定义,而SF、ZF和PF则根据运算结果而定。

以上详细情况请参考教材。

12.编写程序段完成如下要求:

(1)用位操作指令实现AL(无符号数)乘以10。

(2)用逻辑运算指令实现数字0〜9的ASCII码与非压缩BCD码的互相转换。

(3)把DXAX中的双字右移4位。

(1)参考答案:

MOVBL,AL

MOVCL,3

SHLAL,CL;ALX8

SHLBL,1;ALX2

ADDAL,BL;ALX8+ALX2=ALX10

分析:

本题主要考察用移位指令实现乘除法

1)算术移位(SAL/SAR――把操作数看做有符号数;

逻辑移位(SHL/SHR)――把操作数看做无符号数。

2)移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。

例如:

MOVCL,4

SHRAL,CL;AL中的内容右移4位

3)影响C,P,S,Z,O标志。

4)结果未溢出时:

左移1位三操作数X2

右移1位三操作数/2

5)用移位操作代替乘除法可提高运算速度。

在编写汇编程序的时候,应该注意程序的执行效率,使程序得到最大程度的优化,特别是在处理海量数据的时候,这就变得非常必要。

移位指令作为系统指令的一部分,可以在一定程度上帮助我们实现复杂的数值运算,而不会增加系统负担,这是非常有意义的。

例:

计算x*10。

采用乘法指令:

MOVBL,10

MULBL

共需70-77个T周期。

采用移位和加法指令:

SAL

AL,1

;2T

MOV

AH,AL

;2T

SAL

AL,1

;2T

SAL

AL,1

;2T

ADD

AL,AH

;3T

只需11个T周期,仅相当于乘法指令的1/7。

2)参考答案:

ASCII码转换成非压缩型BCD码的指令是:

ANDAL,0FH

非压缩型BCD转换成ASCII码的指令是:

ORAL,30H

分析:

根据ASCII码与BCD码的特点:

1)0〜9的ASCII码为30H〜39H;

2)0〜9非压缩型BCD码为0H〜9H。

又根据或(OF)指令和与(AND指令的特点:

1)任何数和1相或(OF)结果都得1;

2)任何数和0相与(AND结果都得0。

(3)参考答案:

MOVBX,DX

AND

BX,

0FH

MOV

CL,

12

SHL

BX,

CL

MOV

CL,

4

SHR

DX,

CL

SHR

AX,

CL

OR

AX,1

BX

分析:

实现32位数据逻辑右移,要注意高字的低位移到低字的高位。

14•已知数据段500H〜600H处存放了一个字符串,说明下列程序段执行后的结果。

MOVSI,

600H

MOVDI,

601H

MOVAX,

DS

MOVES,

AX

MOVCX,

256

STD

REP

MOVSB

参考答案:

把500H〜600H处的256个字节的字符串顺序存放到偏移地址601H的地方。

分析:

本题和15题都在考查串操作指令的应用。

串操作类指令可以用来实现内存区域的数据串操作。

这些数据串可以是字节串,也可以

是字串。

(1)重复指令前缀

串操作类指令可以与重复指令前缀配合使用。

从而可以使操作得以重复进行,及时

停止。

重复指令前缀的几种形式见表3-1所示。

表3-1重复前缀

汇编格式

执行过程

影响指令

REP

⑴若(CX)=

重复

(1)-

=0,则退出;

(2)CX=CX-1;(3)执行后续指令;(4)

(3)

MOVSSTOS,

LODS

REPE/

REPZ

(1)若(CX)=0或ZF=0,则退出;

(2)CX=CX-1;(3)执行后续指

令;(4)重复

(1)-(3)

CMPSSCAS

REPNE/

REPNZ

(1)若(CX)=0或ZF=1,则退出;

(2)CX=CX-1;(3)执行后续指

令;(4)重复

(1)-(3)

CMPSSCAS

(2)串操作指令

串操作指令共有五种,具体见表3-2。

对串指令要注意以下几个问题:

各指令所使用的默认寄存器是:

SI(源串地址),DI(目的地址),CX(字串长

度),AL(存取或搜索的默认值)。

源串在数据段,目的串在附加段。

方向标志与地址指针的修改。

DF=1,则修改地址指针时用减法;DF=O时,则

修改地址指针时用加法。

MOVSSTOSLODS旨令不影响标志位。

表3-2串操作指令

功能

指令格式

执行操作

串传送

MOVSDSTSRC

MOVSB

MOVSW

由操作数说明是字节或字操作;其余同MOVS或MOVSW

[(ES:

DI)]—[(DS:

SI)];SI=SI±1,DI=DI±1;

[(ES:

DI)]—[(DS:

SI)];SI=SI±2,DI=DI±2;

串比较

CMPSDSTSRC

CMPSB

CMPSW

由操作数说明是字节或字操作;其余同CMPS或CMPSW

[(ES:

DI)]-[(DS:

SI)];SI=SI±1,DI=DI±1;

[(ES:

DI)]-[(DS:

SI)];SI=SI±2,DI=DI±2;

串搜索

SCASDST

SCASB

SCASW

由操作数说明是字节或字操作;其余同SCASB或SCASW

AL-[(ES:

DI)]];DI=DI±1;

AX-[(ES:

DI)];DI=DI±2;

存串

STOSDST

STOSB

STOSW

由操作数说明是字节或字操作;其余同STOSB或STOSW

AL—[(ES:

DI)]];DI=DI±1;

AX^[(ES:

DI)];DI=DI±2;

取串

LODSSRC

LODSB

LODSW

由操作数说明是字节或字操作;其余同LODSB或LODSW

[(DS:

SI)]]—AL;SI=SI±1;

[(DS:

SI)]—AXSI=SI±2;

17•控制转移类指令中有哪几种寻址方式?

参考答案:

控制转移类指令中的寻址方式主要有:

(1)段内直接寻址;

(2)段内间接寻址;

(3)段间直接寻址;

(4)段间间接寻址。

分析:

题17〜题22都是在考查与转移地址有关的寻址方式。

与数据有关的寻址方式最终确定的是一个数据的地址,而与转移地址有关的寻址方

式最终确定一条指令的地址。

有三种表示转移距离的操作符:

(1)SHORT专移,称为短转移,位移量用一个字节(8位)来表示。

(2)NEAR转移,称为近转移,位移量用16位表示,因为程序控制仍然在当前代码

段,所以只修改IP的值,CS的值不变。

(3)FAR转移,称为远转移,因为程序控制超出了当前代码段,所以CS和IP都必

须修改为新的值。

几种转移方式可以描述为:

(1)段内直接寻址

这种寻址方式在指令中直接指出转向地址,如:

JMPSHORTNEXT

JMPNEARPTRAGAIN

其中,NEXT和AGAIN均为转向的符号地址。

在机器指令中,操作码之后给出的是相对于当前IP值的位移量(转移距离),所以,转向的有效地址是当前IP值与指令中给出的位移量(8位或16位)之和。

注:

这种寻址方式适用于条件转移及无条件转移指令,当用于条件转移指令时,位移量只允许8

位。

例如:

已知(DS)=2000H,(BX)=1256H,(SI)=528FH,位移量=20A1H,(232F7H)=3280H,(264E5H)=2450H。

则执行JMPBX指令后

(IP)=1256H

执行JMP[BX][SI]指令后

(IP)=(16dX(D

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

当前位置:首页 > 经管营销 > 销售营销

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

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