文档视界 最新最全的文档下载
当前位置:文档视界 › 汇编语言与接口技术习题答案

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

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

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

本章主要讲授:80X86的数据类型、寻址方式、指令格式、指令系统(数据传送指令、算术运算指令、逻辑运算指令、串操作数指令、控制转移指令、处理机指令和高级语言指令)和80486指令等。通过本章的学习,注意下面几方面的内容:

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

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

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

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

习题精解

1.已知DS=2000H,BX=0100H,SI=0002H,存储单元[20100H]~[20103H]依次存放12 34

56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行后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]

参考答案:

根据物理地址形成公式:物理地址=段基址×16+有效地址,得:

(1)1200H

(2)0100H

(3)4C2AH

(4)3412H

(5)4C2AH

(6)7856H

(7) 65B7H

分析:本题主要考查点是数据寻址方式,寻址方式就是指令中用于说明操作数所在地址的方法,或者是寻找操作数有效地址的方法。包括数据寻址和转移地址寻址两大类。

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

(1) 立即寻址方式

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

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

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

例: MOV AL,5

MOV AX,1234H

MOV EAX,12345678H

(2) 寄存器寻址方式

操作数存放在指令规定的某个寄存器(如:对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DL,SP或BP;而对8位操作数,寄存器可以是AH,AL,BH,BL,CH,CL,DH 或DL)中。

例:MOV AL,BH

MOV AX,CX

MOV EAX,EBP

(3) 存储器寻址

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

?位移量:是存放在指令中的一个8位、16位或32位的数;

?基址:其值存放在基址寄存器中。 BX、BP、任何32位通用寄存器都可以作

为基址寄存器使用;

?变址:其值存放在变址寄存器中。SI、DI 、除ESP外的32位通用寄存器都

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

?比例因子:是80386及后继机型中新增寻址方式中的术语。其值可为1、2、

4、8。

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

1)直接寻址(direct addressing)

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

EA=立即数

例:MOV AX,[200H]

2)寄存器间接寻址(register indirect addressing)

操作数的有效地EA存放在基址寄存器(BX或BP)或变址寄存器(DI或SI)中。计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS

EA=寄存器中的值

例:MOV AX,[BX]

MOV AX,[BP]

MOV AX,[SI]

MOV AX,[DI]

3)寄存器相对寻址(register relative addressing)

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

EA =基址或变址寄存器(BX、BP、DI、SI)±8位或16位的位移量

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

例:MOV AX,[BX+2]

MOV AX,[BP+1]

MOV AX,[SI-1]

MOV AX,[DI-2]

MOV AX,[BX+2000H]

MOV AX,[BP+1000H]

MOV AX,[SI-1000H]

MOV AX,[DI-2000H]

4)基址变址寻址(base-plus-index addressing)

有效地址由基址寄存器(BP或BX)的内容加上变址寄存器(DI或SI)的内容形成。如基址寄存器为BX时,与DS形成的物理地址指向数据段;如基址寄存器为BP时,与SS形成的物理地址指向堆栈段。

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

例:MOV AX,[BX+SI]

MOV AX,[BX+DI]

MOV AX,[BP+SI]

MOV AX,[BP+DI]

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

例:MOV CL, [BX+BP] 或 MOV AX, [SI+DI] 均为非法指令。

5)基址变址相对寻址(base-plus-index relative addressing)

有效地址由基址寄存器(BP或BX)、变址寄存器(DI或SI)及相对偏移量形成。缺省段的使用仍然是DS与BX组合,SS与BP组合。

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

例:MOV AX,[BX+SI+2]

MOV AX,[BX+DI+1]

MOV AX,[BP+SI-1]

MOV AX,[BP+DI-2]

MOV AX,[BX+SI+2000H]

MOV AX,[BX+DI+1000H]

MOV AX,[BP+SI-1000H]

MOV AX,[BP+DI-2000H]

6)比例变址寻址方式

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

例:MOV EAX,[ESI×4+100H]

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

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

例:MOV EAX,[ESI×4+EBX]

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

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

例:MOV EAX,[ESI×4+EBX+8]

(4) 隐含寻址

指令操作数是隐含的,在指令中未显式地指明。

例:MUL BL

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

类似的指令还有:DIV、CBW、MOVS等。

(5)I/O端口寻址

直接端口寻址

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

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

间接端口寻址

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

例:MOV DX,0FF03H

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

;内容所指定的端口中

2.指出下列指令的错误

(1)MOV CX,DL (2)MOV IP,AX

(3)MOV ES,1234H (4)MOV ES,DS

(5)MOV AL,300 (6)MOV [SP],AX

(7)MOV AX,BX+DI (8)MOV 20H,AH

参考答案:

(1)字长不同

(2)不能给IP赋值

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

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

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

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

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

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

分析:本题主要考查在应用通用传送指令时,需要注意以下几项(以MOV指令为例):(1)传送指令可传送8位数据,也可传送16位数据,具体取决于指令中涉及的寄存器是8

位还是16位,也取决于立即数的形式。例如:

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

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

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

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

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

的,这可减少指令长度。因此,一个立即数不能直接送直接寻址的内存单元。交换指令(XCHG)两个操作数都不能是立即数。

例如: MOV WORD PTR [1000H],32A8H 错误

MOV WORD PTR [BX],32A8H 正确

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

例如: MOV [2000H],[35AH] 错误

MOV WORD PTR [BX],[8729H] 错误

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

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

例如: MOV CS,[35AH] 错误

MOV CS,AX 错误

MOV AX,IP 错误

MOV IP,WORD PTR[BX] 错误

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

寄存器为SS。

例如:对于MOV WORD PTR[BP],1000和MOV WORD PTR[BX],2000,设DS=3000H,SS=4000H,BX=5000H,BP=6000H,则前一条指令将立即数1000送到物理地址为46000H和46001H 的两单元中,后一条指令将立即数2000送到物理地址为35000H和35001H的两单元中。

(6)8086系统规定,凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,

等到本条指令和下条指令执行后,又自动恢复对SS寄存器赋值前的中断开放状态。这样做是为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。了解这点后,就应该注意在修改SS和SP的指令之间不要插入其他指令。

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

MOV SS,AX

MOV DL,38H

MOV AH,2

INT 21H

MOV SP,BX

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

(8)立即数不能直接送段寄存器DS、ES以及SS。

例如: MOV DS,875BH 错误

MOV AX,875BH

MOV DS,AX 正确

MOV WORD PTR[BX],32A8H

MOV ES,[BX] 正确

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

3.已知数字0~9对应的格雷码依次为:18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H,它存在于以TABLE为首地址(设为200H)的连续区域中。对如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。

LEA BX,TABLE

MOV AL,8

XLAT

参考答案:

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

MOV AL,8 ;立即数8赋值给AL,即AL中存放的是相对于表首的偏移地址XLAT ;利用查表转换指令,实质是查找8的格雷码

结果是(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的状态。

MOV AL,89H

ADD AL,AL

ADD AL,9DH

CMP AL,0BCH

SUB AL,AL

DEC AL

INC AL

参考答案:

MOV AL, 89H ;(AL)=89H 各状态标志位不变

ADD AL, AL ;(AL)=12H CF=1 ZF=0 SF=0 OF=1 PF=1

ADD AL, 9DH ;(AL)=AFH CF=0 ZF=0 SF=1 OF=0 PF=1

CMP AL, 0BCH ;(AL)=AFH CF=1 ZF=0 SF=0 OF=0 PF=0

SUB AL, AL ;(AL)=0H CF=0 ZF=1 SF=0 OF=0 PF=1

DEC AL ;(AL)=FFH CF=0(不影响CF) ZF=0 SF=0 OF=1 PF=1

INC AL ;(AL)=0H CF=0(不影响CF) ZF=1 SF=0 OF=1 PF=1

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

(1)数据传送指令除了几个专门给标志寄存器赋值的指令(如:POPF,SAHF等)外,对标志位都没有影响。

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

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

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

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

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

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

(3)把DX.AX中的双字右移4位。

(1)参考答案:

MOV BL, AL

MOV CL, 3

SHL AL, CL ;AL×8

SHL BL, 1 ;AL×2

ADD AL, BL ;AL×8+ AL×2= AL×10

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

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

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

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

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

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

4)结果未溢出时:

左移1位≡操作数×2

右移1位≡操作数/2

5)用移位操作代替乘除法可提高运算速度。在编写汇编程序的时候,应该注意程序的执行效率,使程序得到最大程度的优化,特别是在处理海量数据的时候,这就变得非常必要。移位指令作为系统指令的一部分,可以在一定程度上帮助我们实现复杂的数值运算,而不会增加系统负担,这是非常有意义的。

例:计算x*10。

采用乘法指令:

MOV BL,10

MUL BL

共需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码的指令是:

AND AL, 0FH

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

OR AL, 30H

分析:根据ASCII码与BCD码的特点:

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

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

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

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

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

(3)参考答案:

MOV BX, DX

AND BX, 0FH

MOV CL, 12

SHL BX, CL

MOV CL, 4

SHR DX, CL

SHR AX, CL

OR AX, BX

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

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

MOV SI,600H

MOV DI,601H

MOV AX,DS

MOV ES,AX

MOV CX,256

STD

REP MOVSB

参考答案:

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

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

串操作类指令可以用来实现内存区域的数据串操作。这些数据串可以是字节串,也可以是字串。

(1)重复指令前缀

串操作类指令可以与重复指令前缀配合使用。从而可以使操作得以重复进行,及时停止。重复指令前缀的几种形式见表3-1所示。

表3-1重复前缀

(2)串操作指令

串操作指令共有五种,具体见表3-2。对串指令要注意以下几个问题:

?各指令所使用的默认寄存器是:SI(源串地址),DI(目的地址),CX(字串长

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

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

?方向标志与地址指针的修改。DF=1,则修改地址指针时用减法;DF=0时,则

修改地址指针时用加法。

?MOVS、STOS、LODS指令不影响标志位。

表3-2 串操作指令

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

参考答案:

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

(1)段内直接寻址;

(2)段内间接寻址;

(3)段间直接寻址;

(4)段间间接寻址。

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

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

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

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

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

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

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

须修改为新的值。

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

(1)段内直接寻址

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

JMP SHORT NEXT

JMP NEAR PTR AGAIN

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

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

例如:已知(DS)= 2000H,(BX)= 1256H,(SI)= 528FH,

位移量 = 20A1H,(232F7H)= 3280H,(264E5H)= 2450H。

则执行 JMP BX指令后

(IP)= 1256H

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

(IP)=(16d ×(DS)+(BX)+(SI))

=(20000H + 1256H + 528FH)

=(264E5H)

= 2450H

(2)段内间接寻址

这种寻址方式在指令中用数据寻址方式(除立即寻址方式外)间接地指出转向地址,如:

JMP BX

JMP NEAR PTR [BX]

JMP TABLE[SI]

注意:这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。

(3)段间直接寻址

段间直接寻址和段内直接寻址类似,指令中直接给出转向地址,不同的是,在符号地址之前要加上表示段间远转移的操作符FAR PTR。

指令格式如下:

JMP FAR PTR OUTSEG

因为是段间转移,CS和IP都要更新,这个新的段地址和偏移地址由指令操作码之后的连续两个字提供,所以只要将指令中提供的转向偏移地址装入IP,转向段地址

装入CS,就完成了从一个段到另一个段转移的工作。

(4)段间间接寻址

这种寻址方式仍然是用相继两个字的内容装入IP和CS来达到段间的转移目的的,但这两个字的存储器地址是通过指令中的数据寻址方式(除立即寻址方式和寄存器寻址方式外)来取得的。

为了说明寻址两个字单元,指令中必须加上双字操作符DWORD。指令格式如下:JMP DWORD PTR [SI]

JMP DWORD PTR[TABLE+BX]

另外,8086条件转移只能近转移,即其范围为-128~+127。这种转移容易使用不慎超出范围而出错,解决办法:一般可以增加分支或改用长跳转指令。

23.假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用比较指令和条件转移指令实现以下判断:

(1)若DX>DI,转到ABOVE执行;

(2)若AX>SI,转到GREATER执行;

(3)若CX=0,转到ZERO执行;

(4)若AX?SI产生溢出,转到OVERFLOW执行;

(5)若SI≤AX,转到LESS_EQ执行;

(6)若DI≤DX,转到BELOW_EQ执行。

参考答案:

(1) CMP DX, DI

JA ABOVE

(2) CMP AX, SI

JG GREATER

(3) CMP CX, 0

JE ZERO

(4) SUB AX, SI

JO OVERFLOW

(5) CMP SI, AX

JLE LESS_EQ

(6) CMP DI, DX

JBE BELOW_EQ

分析:本题主要考查比较指令,包括有符号数的比较和无符号数的比较。

比较指令主要用于比较两个数之间的关系。在比较指令(CMP)后面常跟条件转移指令,根据比较结果不同产生不同的分支,总结如下:

1)相等的比较,根据ZF标志即可判断两者是否相等。

①若两者相等,相减以后结果为零,ZF标志为1,否则为0;

②若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。

2)大小的比较,分为有符号数的比较和无符号数的比较。主要的条件转移指令及转移指令如表3-3所示。

表3-3 条件转移指令表

从表3-3可以看到,条件转移指令是根据两个数的比较结果或某些标志位的状态来决定转移的。在条件转移指令中,有的根据对符号数进行比较和测试的结果实现转移。这些指令通常对溢出标志位OF和符号标志位SF进行测试。对无符号数而言,这类指令通常测试标志位CF。对于带符号数,分大于、等于、小于3种情况;对于无符号数,分高于、等于、低于3种情况。在使用这些条件转移指令时,一定要注意被比较数的具体情况及比较后所能出现的预期结果。

24.有一个首地址为ARRAY的20个字的数组,说明下列程序段的功能。

MOV CX,20

MOV AX,0

MOV SI,AX

SUM_LOOP:ADD AX,ARRAY[SI]

ADD SI,2

LOOP SUM_LOOP

MOV TOTAL,AX

参考答案:

该程序段的功能是把首地址ARRAY开始的20个字的数组相加,结果放到地址为TOTAL 的内存单元中。

分析:本题主要考查循环指令LOOP的应用

LOOP指令执行的操作是先把CX减1,再判断是不继续循环,当CX=0就不再循环。

注:重复前缀REP是先判断CX是不是0,然后决定是否继续循环。

例如:MOV CX, 0

REP MOVSB

则一次都不会循环,即不会执行MOVSB这条指令。

对于需要重复进行的操作,可用循环程序结构来进行,8086/8088系统为了简化程序设计,设置了一组循环指令,这组指令主要对CX或标志位ZF进行测试,确定是否循环,如表3-4所示。

表3-4 循环指令表

27.已知AX,BX存放的是4位压缩BCD表示的十进制数,请说明如下子程序的功能和出口参数。

ADD AL,BL

DAA

XCHG AL,AH

ADC AL,BH

DAA

XCHG AL,AH

RET

参考答案:

本程序的功能是把两个4位的十进制数相加,结果放在AX中。

分析:

本题和28题主要考查BCD码运算。所谓BCD码是用二进制数的形式表示十进制数,又分为:压缩BCD码,即规定每个字节表示两位BCD数;非压缩BCD码,即用一个字节表示一位BCD数,在这字节的高四位用0填充。例如,十进制数25D,表示为压缩BCD数时为:25H;

表示为非压缩BCD 数时为:0205H ,用两字节表示。

计算机中的算术运算,都是针对二进制数的运算,而人们在日常生活中习惯使用十进制。在8086/8088系统中,为了避免出现非法的BCD 码(如A ~F )及调整计算机中二进制运算规则(逢2进1),对BCD 码(即十进制)算术运算有一类BCD 码调整指令,如表3-5所示。

注:BCD 码进行乘除法运算时,一律使用无符号数形式,因而AAM 和AAD 应固定地出现在MUL 之前和DIV 之后。

习题汇编 1.选择题

(1)寄存器间接寻址方式中,操作数处在( )。 A .通用寄存器 B .主存单元 C .程序计数器 D .堆栈

(2)若IMUL BL 指令执行后,CF=OF=1,(AL )=82H ,则表示( )。 A .(BL) > 0 B.(AH)=FF C.被乘数小于零 D.乘积大于128

(3)若(SS )=2000H,(SP)=0100H,(AX)=2107H,执行指令PUSH AX 后存放数据21H 的物理地址是( )。

A. 20102H

B.20101H

C.200FEH

D.200FFH (4)对于给定的数据定义

A1 DW 1, 2, 3, ‘AB' A2 DB 6 DUP(?) A3 DB 0 R1 EQU A3-A1

变量 R1 的值为 ( )。

A . 12

B . 18

C . 16

D . 14

(5)指令LOOPNZ 在循环中退出循环的条件是( )。

A . CX=0且ZF=0

B .CX=0或ZF=1

C . CX ≠0或ZF=0

D .CX ≠0且ZF=1 (6)汇编程序的数据段中定义了两个变量

A D

B 20H,21H B DW 22H

执行了MOV DX ,WORD PTR [A+1]后,DX 中的值为 ( )。 A .0021H B .2221H C .2122H D .0022H

(7)为使CX=-1时,转至标号MINUS 开始的指令序列,其中错误的序列是( )。

A .INC CX

表3-5 BCD 码调整指令

JZ MINUS

B.SUB CX,OFFFFH

JZ MINUS

C.AND CX,OFFFFH

JZ MINUS

D.XOR CX,OFFFFH

JZ MINUS

(8)执行下面指令序列后,结果是()。

MOV AL,72H

CBW

A.AX=0FF72H B.AX=8072H C.AX=0072H D.AX=0F72H

(9)执行下列三条指令

MOV SP,1000H

PUSH AX

CALL 2000:1000H

SP的内容为()。

A.(SP)=1000H B.(SP)=0FFEH C.(SP)=1004H D.(SP)=0FFAH (10)指令JMP SI 的目标地址偏移量为()。

A.SI的内容 B.SI所指向的内存字单元之内容

C.IP+[BX]之和 D.IP+[SI]

(11)设(AL)=0FFH,依次执行ADD AL,12和AND AL,0FH指令后,标志位ZF和SF的状态分别为()。

A.0和0 B.0和1 C.1和0 D.1和1

(12)若(BX)=1000H,(DS)=2000H,(21000H)=12H,(21001H)=34H,执行LEA SI,[BX]指令后,SI寄存器中的内容是()。

A.1234H B.3412H C.1000H D.0010H

2.简答题

(1)写出能完成下列任务的指令:

1)将12H送入AL;

2)将12H送入由BX所指出的内存单元;

3)将12H送入数据段内偏移地址为2000H的内存单元;

4)将CL的内容拷贝到BH中;

5)将23000H单元中的内容拷贝到AL中。

(2)假定初始情况 (DX)=0B9H, (CL)=3, (CF)=1,下列各条指令单独执行以后,DX的值分别是多少?

SHR DX, 1

SAR DX, CL

SHL DX, CL

SHL DX, 1

ROR DX, CL

ROL DX, CL

SAL DH, 1

RCL DX, CL

RCR DL, 1

(3)AL= 79H, BL = 97H,则以下指令执行以后,AL、CF和AF的结果如何?

ADD AL, BL

DAA

AL=( )、 CF=( ) 、AF=( )。

(4)设DS=1000H,BX=200H,SI=2H,(10200H)~(10205H)的内容为10H、2AH、3CH、46H、59H、6BH。试问,下列每条指令单独执行完成后,AX寄存器的内容是什么?

MOV AX,0200H

MOV AX,[200H]

MOV AX,BX

MOV AX,3[BX]

MOV AX,[BX+SI]

MOV AX,2[BX+SI]

(5)请问下面程序段各循环多少次数?

1) MOV CX, 0

LOP: NOP

LOOP LOP

2) MOV CX, 0

REP MOVSB

(6)写出将AX寄存器清零的4种方法。

(7)试用指令实现:

1)AL 寄存器低 4 位清 0 ;

2)BL 寄存器低 4 位置 1 ;

3)CL 寄存器低 4 位取反;

4)测试 DL 寄存器的D2位是否为 0

(8)读下列程序段,对程序加以注释,并说出程序的功能;当AL=5BH,写出执行程序后AL 的值。

MOV BL,AL

MOV CX,8

AGAIN : ROL BL,1

RCR AL,1

LOOP AGAIN

(9)设(IP)=1234H,(CS)=4050H,(SP)=0F178H,当执行CALL 2000:009AH后,写出下列寄存器的内容。

(IP)=

(CS)=

(SP)=

[SP]=

[SP+1]=

[SP+2]=

[SP+3]=

(10)程序实现两位BCD码数转换成ASCII码,填写相关指令,完成程序功能。

BCD1 EQU 59H

BUF DB 2 DUP(?)

MOV AL,BCD1

MOV SI,0

MOV BL,AL

ADD AL,30H

MOV BUF[SI],AL

MOV CL,4

BL,CL

ADD BL,

MOV BUF[SI],BL

(11)读下面程序段,并回答执行下面的代码后, AL与BL的内容是什么?并说明该程序段的功能。

MOV AL, 12H

MOV BL, AL

AND AL, 0FH

OR AL, 30H

MOV CL, 4

SHR BL, CL

ADD BL, 30H

(12)如果堆栈的起始地址为2200:0000H,栈底为0100H,(SP)=00A8H,求1)栈顶地址;

2)SS的内容;

3)再存入数据5678H,3AF2H后,SP的内容。

(13)设(BX)=11001011B,变量VAR的内容为00110010B,求下列指令单独执行后BX的内容。

XOR BX,VAR

AND BX,VAR

OR BX,VAR

XOR BX,11110000B

AND BX,00001111B

TEST BX,1

(14)假设(EAX)=00002000H, (EBX)=00003000H,(DS)=0010H,问以下指令访问的内存实际物理地址是多少?

MOV ECX, [EAX+EBX]

MOV [EAX+3*EBX],CL

MOV AL, [EBX+2*EAX+200H]

(15)80X86的指令在形式上只给出了偏移地址,请问是如何确定当前的段寄存器的?(16)若在数据段0200H中有一个数,把它的前4位取反,后四位维持不变,再送回同一个地址单元中,请编程实现。

(17)已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再

执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图(标出存储单元的地址)。(18)已知程序段如下:

MOV AX,1234H

MOV CL,4

ROL AX,CL

DEC AX

MOV CX,4

MUL CX

INT 20H

试问:1)每条指令执行后,AX寄存器的内容是什么?

2)每条指令执行后,CF,SF及ZF的值分别是什么?

3)程序运行结束时,AX及DX寄存器的值为多少?

第4章 80X86汇编语言程序设计

本章主要讲授MASM宏汇编语句结构以及开发过程、MASM汇编语言表达式和运算符、伪指令、分支程序设计、循环程序设计、子程序设计技术。通过本章学习,应从以下几方面掌握和理解相关内容。

一、掌握MASM宏汇编语句结构以及开发过程。掌握汇编、连接、调试的应用。

二、掌握MASM汇编语言表达式、运算符。

三、80X86的伪指令,包括数据定义伪指令、符号定义伪指令、段定义伪指令、过程定义伪

指令、结束伪指令等。注意伪指令语句和指令语句的区别。

四、掌握复杂数据结构。

五、掌握掌握宏汇编。

六、掌握基本汇编语言程序设计,包括顺序结构、分支结构、循环结构及子程序的设计。

七、了解高级汇编语言程序设计。

习题精解

1.伪指令语句与硬指令语句的本质区别是什么? 伪指令有什么主要作用?

参考答案:

伪指令语句是一种不产生机器代码的语句,是说明性语句,是面向汇编程序和连接程序的。如:定义变量,分配存储单元,指示程序开始和结束等。

硬指令是能产生机器代码,CPU可以执行的,能完成特定功能的语句,它主要由CPU 指令组成。

伪指令的作用:在汇编过程中,告诉汇编/连接程序如何汇编/连接。

2.什么是标识符,汇编程序中标识符怎样组成?

参考答案:

标识符是指由字母或数字组成的,且只以字母为开头的字母数字串。

汇编程序中标识符可由下列字符组成:

字母:A~Z ;数字:0~9 ;特殊字符:?、·、@、_、$ 。

数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为31个字符。

注:标识符不能用保留字(如寄存器名,指令助记符,伪指令)。

5.汇编语言程序的开发有哪4个步骤,分别利用什么程序完成,产生什么输出文件?

参考答案:

汇编语言程序开发有4个步骤:

源程序的编辑:利用文件编辑器,产生ASM源程序;

源程序的汇编:利用MASM完成,产生OBJ文件;

目标文件的连接:利用LINK连接程序,产生EXE文件、LST列表文件和MAP映像文件;

汇编语言程序设计练习题

汇编语言程序设计练习题 一、字符与串处理类 1.逆序输出字符串“BASED ADDRESSING”。 2.试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。 3.编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 4.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。 5.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。)放在STRING中,试编制一个程序测试字符串中是否存在数字。如有,则把CL的第5位置1,否则将该位置置0。 6.从键盘上输入一串字符(用回车键结束,使用0A号功能调用。),将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。 7.试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。 8.试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MATCH”。 9.试编写一段程序,要求输入两个字符串,如两个字符串相等则显示“MATCH”, 否则显示“NO MATCH”。 10.试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。 11.在内存区域0B800:0000-0B800:0FFFF(都是16进制数)内查找首地址为SOURCE的串(SOURCE的首字节为串长度),如果找到,则把AL的第0位置0,否则将该位置置1。 12.已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中。 13.在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一个程序:在数组中查找该数,如果找到此数,则把它从数组中删除。 二、数字输入输出类 1. 试编制一个程序,把BX寄存器内的二进制数以十六进制数的形式在屏幕上显示出来。 2. 试编制一个程序,把BX寄存器内的二进制数以八进制数的形式在屏幕上显示出来。 3. 试编制一个程序,把BX寄存器内的二进制数以十进制数的形式在屏幕上显示出来。 4.从键盘上输入2个一位数,求出它们的和(假设和不超过1位)。 5.试编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 6.试编写一段程序,从键盘接收一个0-65535间的十进制无符号数,并在终端上显示与它等值的二进制数。 7.试编写一段程序,从键盘接收一个-32768-32767间的十进制有符号数,并在终端上显示与它等值的二进制数。 8.编写一个程序,从键盘输入一个0~65535之间的10进制无符号数,然后以16进制

汇编语言基础练习题目

、填空 1. 在8086/8088的计算机中,存储单元的20位物理地址由两部分组成,即16 位的 段地址 和16位的 偏移地址,物理地址=段地址X 10H+偏移量。 2. 段的起始地址必须是某小段的首地址,它能被 10H 整除。 3. 已知01020H 字单元的内容为6A58H 请分别写出它的两个字节单元的地址和 内容: (01020H =58H, ( 01021H =6AH 4. 指令执行后,若标志寄存器的ZF=0,则表示结果不为0;若SF=0,则表示结 果的符号是正号,即结果为正数。 5. 控制器从存储器取出一条指令后,指令指针寄存器IP 的内容是 将要执行的下 一条指令开始的偏移地址。 6. 段地址和偏移地址为1000: 127B 的存储单元的物理地址是1127BH 解:由物理地址=段地址X 10H+偏移量的公式可得 物理地址=1000HX 10H+127BH=10000H+127BH=1127BH 、选择 1. 与CS 寄存器组合才能形成代码段的物理地址的寄存器是 解:16K 个字单元,即为32K 个字节单元。由于2的15次方为32K,因此至 少需要15位二进制数才能表示16K 个字单元。 3. 已知一数据段的段地址是0100H,这个段的第6个字单元的物理地址是(B ) o 解:由于一个字单元占用两个字节,第一个字单元的偏移地址为 0000H,因 此第一个字单元的物理地址为 01000H 。以后每一个字单元的地址在前一个的基 C )。 A. SP 寄存器 B. BP 寄存器 C. IP 寄存器 D. BX 寄存器 2.如果存储器分段时, 的二进制数至少是( 一个段最多允许16K 个字单元,那么表示该段内偏移地址 A )o A.15 位 位 B.16 位 C.17 位 D.18 A. 01010H B. 0100AH C.01012H D.01006H

嵌入式简单汇编程序实例

ARM实验报告 姓名:郭健傧学号:L2101898 1.实验目的 (1)了解ADS1.2集成开发环境及ARMulator软件仿真; (2)熟悉ARM的乘法指令和逻辑指令; (3)结合ARM处理器硬件特性,比较处理函数的特性; 2.实验设备 硬件:pc机一台; 软件:Windowsxp系统,ADS1.2集成开发环境; 3.实验内容 (1)建立一个新的工程; (2)建立一个汇编文件,并添加到工程; (3)根据所给的两个C语言函数编写相应的汇编程序,并比较一下代码中fact1和fact2两个函数的特性; 4.实验步骤 (1)启动ADS1.2IDE集成开发环境,使用ARM Executable Image 工程模块建立一个工程heiye。 (2)建立汇编源文件test.s,编写程序实验,并添加到工程heiye中。 (3)设置工程连接地址Ro Base为0x40000000,RWBase为0x40003000。设置调试入口地址Image entry point为0x40000000。 (4)编译链接工程,并启动AXD进行软件仿真调试。 5.编写程序如下: C程序源代码: int fact1(int limit) { int fact=1; for(i=1;i

汇编语言试题及参考答案

汇编语言试题及参考答案 一,填空题 1.ZF标志位是标志结果是否为零的,若结果,ZF为( 1 ),否则ZF为( 0 ).当ZF为1时,SF为( 0 ) 2.标号可以有两种类型属性.它们是( )和( ) 3.8位无符号整数的表示范围为0--255,写成16进制形式为( ),8位有符号整数的表示范围为-128--+127,写成16进制形式为( ) 4.伪指令DB,GROUP 和NAME 三个标号名字域必须有名字的是( ),不得有名字的是( ),可有可无名字的是( ). 5.循环程序通常由( )( )( )和循环结果外理四部分构成 6.在数值不达式中,各种运算符可可混合使用,其优先次序规则*,/( )于+,-;XOR,OR( )于AND,LT( )于GT 7. 宏指令定义必须由伪指令( )开始,伪指令( )结束,两者之间的语句称为( ) 8.调用程序与子程序之间的参数传递方法有四种,即堆栈法( )( )( ) 9.分别用一条语句实现下述指明的功能 (1)栈顶内容弹出送字变量AYW( ) (2)双字变量AYD存放的地址指针送ES和SI( ) (3)变量AY2类型属性送AH( ) (4)不允许中断即关中断( ) (5)将字符串'HOW ARE YOU!'存入变量AYB( ) (6)子程序返回调用程序( ) (7)地址表达式AYY[4]的偏移地址送字变量ADDR( ) (8)AX的内容加1,要求不影响CF( ) (9)BX的内容加1,要求影响所有标志位( ) (10)若操作结果为零转向短号GOON( ) 二,单选题 1.IBM PC微机中,有符号数是用( )表示的 1.原码 2.补码 3.反码 4.BCD码 2.把汇编源程序变成代码程序的过程是( ) 1.编译 2.汇编 3.编辑 4.链接

汇编程序习题

汇编程序习题 1.试分析以下程序段完成什么功能? MOV CL,4 SHL DX,CL SHL AX,CL SHR BL,CL INT 3 2.写出执行以下计算的指令序列: 1)Z←W+(Z-X)2)Z←W-(X+6)-(R+10) 3)Z←(W*X)/(R+6)4)Z←((W-X)/5*Y)*2 3.求两个数56H和67H进行ADD,并求出标志OF,CF,SF,ZF的值。4.阅读程序段,回答下述问题: 1)MOV AX,4000H 2)MOV AX,5678H 3)MOV AX,1234H OV DS,AX MOV BX,99AAH MOV CX,8912H MOV BX,1238H PUSH BX CMP AX,CX MOV〔BX〕,2244H PUSH AX INT 3 MOV AL,〔BX〕 POP DX SF=?OF=?JA成立否? INT 3 POP CX AL=?存储器的物理地址=?DX=?CX=? 5.下列程序能完成什么功能? DATY1 DB 300DUP(?) DATY2 DB 100DUP(?) …… MOV CX,100 MOV BX,200 MOV SI,0 MOV DI,0 NEXT:MOV AL,DATY1〔BX〕〔SI〕 MOV DATY2〔DI〕,AL

INC SI INC DI LOOP NEXT 6.下列指令哪些是错误的?并简述之。 1)MOV 15,BX 2)CMP OP1,OP2(假定OP1,OP2是用DB定义的变量) 3)CMP AX,OP1 4)CMP OP1,25H 5)MOV DS,CS 7.下列程序段执行后,BX的值是什么? MOV CL,3 MOV BX,0B8H ROL BX,1 ROR BX,CL 8.编写一个程序段,将内存200H单元开始的256个单元的内容,取绝对值后传送到400H开始的256个单元中。 9.求出下列各数与62A0H之和,并根据结果确定SF,ZF,CF,OF的值。 1)1234H 2)4321H 3)CFA0H 4)9D60H 10.求出下列各数与4AE0H之差,并根据结果确定SF,ZF,CF,OF的值。 1)1234H 2)5D80H 3)9090H 4)EA04H

51汇编程序练习题1

单片机汇编程序设计练习 一、存储器之间的数据传送 1、编程实现将单片机内部RAM60H开始的连续32个单元置为FFH。 2、编程实现将内部RAM30H开始的连续16个数传送到内部RAM50H开始的连续单元中。 3、编程实现将单片机外部RAM2000H为首地址的数据块传送到单片机内部RAM30H开始的单元中,数据块的长度为32个字节。 4、编程实现将单片机内部RAM30H为首地址的数据块传送到外部RAM2000H 开始的单元中,数据块的长度存放于内部RAM的20H单元。 5、编程实现将单片机外部RAM2000H为首地址的数据块传送到单片机内部RAM30H开始的单元中,直到数据内容为0DH时停止传送。 6、编程实现将ROM1000H地址的内容传送到内部RAM的25H单元。 7、编程实现将ROM2000H开始的连续10个地址的内容传送到内部RAM的25H 开始的单元。 8、编程实现将ROM1000H开始的连续100个地址的内容传送到外部RAM2000H 开始的连续单元中。 二、查表程序设计 1、编写查表程序,要查表的数据存放在R7中,其范围为0~9。编程查其平方值,并存放于40H。 2、编写查表程序,要查表的数据存放在R7中,其范围为0~9。编程查其立方值,并存放于R6。 3、单片机外部ROM TAB1地址开始存放一组ASCII码表,试用查表方法,将R2的内容(范围为0~F)转换为与其对应 的ASCII码,并从P1口输出。 4、使用8051的P1口作为段控驱动共阳 LED数码管,硬件连接如图。 编程实现将8051 R7单元内容(在 00H-09H之间)显示在数码管上。00H-09H 的共阳字形代码如下表所示。 04H 05H 06H 07H 08H 09H

汇编语言题库

汇编语言题库 一、单项选择题 1、在下列的选项中,能够组成计算机系统的是()。 A.硬件系统和软件系统 B.CPU、存储器、输入/输出设备 C.操作系统、各种语言 D.系统软件和应用软件2、汇编语言属于()。 A.用户软件 B.系统软件 C.高级语言 D.机器语言3、汇编语言源程序经汇编程序汇编后产生的文件的扩展名是()。 A.EXE B.OBJ C.ASM D.LST 4、汇编语言的什么文件经链接(LINK)后产生可执行文件? A.ASM B.EXE C.LST D.OBJ 5、中央处理器CPU是由()组成的。 A.运算器 B.控制器 C.寄存器组 D.前三者6、IBM PC机的DOS是属于()。 A.用户软件B.系统软件C.系统硬件 D.一种语言7、汇编语言源程序是()程序。 A.不可直接执行的B.可直接执行的 C.经汇编程序汇编后就可执行的D.经连接后就可直接执行的8、8086/8088 CPU的寄存器组中,8位的寄存器共有()个。 A.4B.6C.8D.109、8086/8088 CPU的寄存器组中,16位的寄存器共有()个。 A.10B.12C.13D.1410、8086/8088 CPU执行算术运算时PSW共有()个标志位会受影响。 A.4B.5C.6D.711、在程序执行过程中,IP寄存器始终保存的是()。 A.上一条指令的首地址B.本条指令的首地址。 C.下一条指令的首地址D.需计算有效地址后才能确定地址。 12、IBM PC机的存储器可分()个段。 A.4B.256C.512D.65536 13、当使用BP作编程地址时,此时使用的是()段。 A.CSB.DSC.ESD.SS

汇编语言复习题(附答案)

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课 后四、六章的答案,大家抓紧时间复习哦! 一、选择题 1. 把要执行的程序与库文件连接起来形成可执行文件的系统程序是(B )。 A. 汇编程序 B. 连接程序 C. 机器语言程序 D.源代码程序 2. 在8088/8086的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是 (C )。 A..SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 3. 为了使主机访问外设方便起见,外设中的每个寄存器给予一个(C )。 A.物理地址 B. 逻辑地址 C. 端口地址 D. 段地址 4. MOV AX, 3064H,该指令中源操作数采用的寻址方式是(A )。 A.立即 B. 直接 C. 寄存器相对 D. 寄存器间接 5. 换码指令的助记符是(C )。 A. XCHG B. LEAS C.XLAT D. MOV 6. 如果A> B (A、B有符号数)发生转移,应选择的条件转移指令是(JGE )。 7. 下列符号中,可用作标识符的是(C )。 A.MOV B.AX C.MSG1 D.1ABC 8. X DB 10H DUP (1 , 2)内存变量定义语句拥有了( A )个字节的存储空间。 A.20D B.10D C.20H D.10H 9. 当DF=0时,执行串操作指令MOVSB变址寄存器SI、DI的值将(C )。 A.不变 B. 减1 C. 加1 D. 无法确定 10. 如下指令可将AX寄存器内容改变的是(A )。 A. AND AX , BX B . TEST AX , BX C. CMP AX , BX D . XCHG AX , AX 11.16位CPU支持的I/O 地址范围是(D )。 A. 0~0FFFFFH B. 0~0FFFFH C. 0~0FFFH D. 0~0FFH 12. MUL CL指令实现的功能是(A )。 A.无符号乘法:AX AL X CL B.有符号乘法:AX AL X CL C.无符号乘法:DX AL X CL D .有符号乘法:DX AL X CL 13. DOS系统功能调用(INT 21H )中,显示字符串的功能号是(D )。 A.01H B.02H C.08H D. 09H 14. 在16位CPU读取指令时,需要用到的寄存器对是(C )。 A.SS 和SP B.DS 和DI C.CS 和IP D.ES 和SI 15. 下列指令中,源操作数(既第2操作数)属于基址加变址寻址方式是(B )。 A.MOV AX,23H B. MOV AX,[BX+SI] C.SUB AX,[BX] D. ADD AX,BX 16. 有内存变量定义语句:VAR DW 10 DUP(1 , 2), 1234H, VAR的属性TYPE LENGTH和

汇编语言程序例题0001

【例】试编写一程序计算以下表达式的值。 w = (v- (x * y + z -540 )) /x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。 DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP (?) DATA ENDS STACK SEGMENT STACK DB 200 DUP (0) STACK ENDS CODESEGMENT ASSUME DS DATA CS: CODE SS: STACK START MOV AX DATA MOV DS AX ; DATA>AX MOV AX X IMUL Y ; (X) * (DX AX MOV CX AX

MOV BX,DX ;(DX AX) T BX : CX ) MOV AX,Z CWD ; (Z)符号扩展 ADD CX,AX ADC BX,DX ; ( BX: CX)+( DX:AX)BX: CX) SUB CX,540 SBB BX,0 ;( BX:CX) - 5 40~BX : CX) MOV AX,V CWD ; (V)符号扩展 SUB AX,CX SBB DX, BX ;( DX: AX)-((BX CX DX: AX) IDIV X ;( DX:AX)/X MOV W,AX ;商5 MOV W+2 DX ;余数D?W+2 MOV AH,4CH INT 21H CODEENDS ;退出DOS 状态 END START 【例】已知某班学生的英语成绩按学号(从 1 开始)从小到大的顺序排列在要查的学 生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下: STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB 80 ,85,86,71,79,96 DB 83 ,56,32,66,78,84 NO DB 10 ENGLIST DB ? DATA ENDS CODE SEGMENT ASSUME DS: DATA,SS: STACK,CS: CODE BEGIN: MOV AX,DATA MOV DS,AX LEA BX,TAB MOV AL,NO DEL AL XLAT TAB MOV ENGLIS,H AL MOV AH,4CH INT 21H CODEENDS TAB表中,

汇编题库重点复习题

1.已知X=76,则[X]补=_______。 A.76H B. 4CH C. 0B4H D. 0CCH 2.已知[X]补=80H,则X =_______。 A.80H B.0 C. 0FFH D. -80H 3.已知[X]补=80H,则[X]补/2=_______。 A.0CCH B.4CH C. 49H D. 31H 4.已知X=78,Y=-83,则[X+Y]补=_______。 A.0F5H B.0A1H C. 0FBH D. 65H 5.将124转换成十六进制的结果是_______。 A.7CH B.7DH C. 7EH D. 7BH 6.将93H看成一个压缩的BCD码,其结果是_______。 A.10010101 B.10010011 C. 10000011 D. 10000001 7.45转换成二进制数是_______。 A.10101101 B.00111101 C. 00101101 D. 10011101 8.6CH 转换成十进制数是_______。 A.118 B.108 C. 48 D. 68 9.将93H扩展为字的结果是_______。 A.FF93H B.0093H C. 1193H D. 1093H 10.56的压缩BCD码是_______。 A.38H B. 56H C. 0506H D. 3536H 11.ASCII中的47H表示字符的是_______。 A.“7” B. “G” C. “g” D. “E” 12.十进行数-1的8位二进制数补码是_______。 A.11111110 B. 11110000 C. 11111111 D. 10001111 13.下列为补码表示,其中真值最大的数是_______。 A.10001000 B. 11111111 C. 00000000 D. 00000001 14.十六进制数88H,可表示成下面几种形式,请找出错误的表示_______。 A.无符号十进制数136 B. 1带符号十进制数-120D C. 压缩BCD码十进制数88 D. 8位二进制数-8的补码 15.计算机对字符、符号采用统一的二进制编码。其编码采用的是_______。 A.BCD码 B. 二进制码 C. ASCII D. 十六进制码第二章 16.在微机中分析并控制指令执行的部件是_______。 A.寄存器 B. 数据寄存器 C. CPU D. EU 17.在计算机的CPU中执行算术逻辑运算的部件是_______。 A.ALU B. PC C. AL D. AR 18.执行指令PUSH CX后堆栈指针SP自动_______。 A.+2 B. +1 C. —2 D. —1 19.在标志寄存器中表示溢出的是_______。 A.AF B. CF C. OF D. SF 20.对汇编语言源程序进行翻译的是程序是_______。 A.连接程序 B. 汇编程序 C. 编译程序 D. 目标程序

完整版汇编语言试题及答案..doc

一,单项选择题 (每小题 1 分,共 20 分 1-10CCCCAADACB 11-20.ADBBAADDCC 1.指令 JMP FAR PTR DONE 属于 ( C A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 2.下列叙述正确的是 ( A.对两个无符号数进行比较采用CMP 指令 ,对两个有符号数比较用CMP S 指令 B.对两个无符号数进行比较采用CMPS 指令 ,对两个有符号数比较用CM P 指令 C.对无符号数条件转移采用JAE/JNB 指令 ,对有符号数条件转移用JGE/J NL 指令 D.对无符号数条件转移采用JGE/JNL 指令 ,对有符号数条件转移用JAE/J NB 指令 3.一个有 128 个字的数据区 ,它的起始地址为 12ABH:00ABH, 请给出这个数据区最末一个字单元的物理地址是 ( A.12CSBH B.12B6BH

C.12C59H D.12BFEH 4.在下列指令的表示中 ,不正确的是 ( A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL 5.在进行二重循环程序设计时,下列描述正确的是 ( A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内 B.外循环初值应置外循环之内;内循环初值应置内循环之内 C.内、外循环初值都应置外循环之外 D.内、外循环初值都应置内循环之外,外循环之内 6.条件转移指令 JNE 的测试条件为 ( A.ZF=0 B.CF=0 C.ZF=1 D.CF=1 7.8086CPU在基址加变址的寻址方式中,变址寄存器可以为 ( A.BX 或 CX

汇编语言程序设计练习题

汇编语言程序设计练习题 阅读程序并完成填空: 1.1.MOV BL,85H MOV AL,17H ADD AL,BL AL=?,BL=?,CF=? 2.2.MOV AX,BX NOT AX ADD AX,BX INC AX AX=?,CF=? 3.3.MOV AX,0FF60H STC MOV DX,96 XOR DH,0FFH SBB AX,DX AX=?,CF=? 4.4.MOV BX,0FFFEH MOV CL,2 SAR BX,CL 5.5.MOV BX,0FFH AND BX,0FFFH OR BX,0F0FH XOR BX,00FFH 上述程序段运行后,BX=?,CF=? 6.6.CMP AX,BX JGE NEXT XCHG AX,BX NEXT:CMP AX,CX JGE DONE XCHG AX,CX DONE:。。。。。 试回答: (1)(1)上述程序段执行后,原有AX、BX、CX中最大数存放在哪个寄存器中? (2)(2)这3个数是带符号数还是无符号数?

7.7.在数据段ADDR1地址处有200个字节,要传送到数据段ADDR2处。 MOV AX,SEG ADDR1 MOV DS,AX MOV ES,------- MOV SI,------- MOV DI,OFFSET ADDR2 MOV-----,200 CLD REP--------- 8.8.ADDR1开始的单元中连续存放两个双字数据,将其求和存放在ADDR2开始的单元。 MOV CX,2 XOR BX,BX CLC NEXT:MOV AX,[ADDR1+BX] ADC AX,------- MOV[ADDR2+BX],AX ADD--------,2 ---------NEXT 9.9.设初值AX=1234H,BX=5678H,DX=0ABCDH,则执行下面一段程序后AX=------,BX=----,DX=--------。 MOV CL,4 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 10.10.设有一个首地址为ARRAY有N个字数据的数组,要求求出该数组之和,并把结果存入TOTAL地址中,有关程序如下:MOV CX,------ MOV AX,0 MOV SI,0 START:ADD AX,-----

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

STC12系列单片机的PWM输出汇编语言示例程序

STC12系列单片机的PWM输出汇编语言示例程序

对于以下程序我的理解是:equ是一个符号定义伪指令pulse_width_max equ 0f0HMOV A,#pulse_width_max 它的意思是:将pulse_width_max里的值作为数值赋到寄存器A里.MOV A,pulse_width_max 它的意思是:将pulse_width_max里的值作为地址赋到寄存器A里. 相关帖子>>>: ?我的8个PWM给你参考(2774字)coody[63次]2006-8-29 15:01:43 ;************************************************************** ?;************************************************************** ?T0interrupt: ;max 53T ? PUSH PSW ? PUSH ACC ? ?;*************************** 30T *********************************** ? MOV P1,PWM_TEMP ? ? INC PWM_DUTY ? MOV A,PWM_DUTY ? JNZ L_PWM ? MOV PWM_TEMP,PWM_TEMP1 ? SJMP L_QuitPWM ?

?L_PWM: ? CJNE A,PWM0,L_NotClearPWM0 ? SETB B_PWM0 ?L_NotClearPWM0: ? ? CJNE A,PWM1,L_NotClearPWM1 ? SETB B_PWM1 ?L_NotClearPWM1: ? ? CJNE A,PWM2,L_NotClearPWM2 ? SETB B_PWM2 ?L_NotClearPWM2: ? ? CJNE A,PWM3,L_NotClearPWM3 ? SETB B_PWM3 ?L_NotClearPWM3: ? ? CJNE A,PWM4,L_NotClearPWM4 ? SETB B_PWM4 ?L_NotClearPWM4: ? ? CJNE A,PWM5,L_NotClearPWM5 ? SETB B_PWM5 ?L_NotClearPWM5: ? ? CJNE A,PWM6,L_NotClearPWM6 ? SETB B_PWM6 ?L_NotClearPWM6: ? ? CJNE A,PWM7,L_NotClearPWM7 ? SETB B_PWM7 ?L_NotClearPWM7: ?L_QuitPWM: ?;************************************************************** ? ?L_QuitT0Interrupt: ? POP ACC ? POP PSW

汇编语言试题及答案.

一,单项选择题(每小题1分,共20分 1-10CCCCAADACB 11-20.ADBBAADDCC 1.指令JMP FAR PTR DONE属于( C A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 2.下列叙述正确的是( A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMP S指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CM P指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/J NL指令 D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/J NB指令 3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是( A.12CSBH B.12B6BH

C.12C59H D.12BFEH 4.在下列指令的表示中,不正确的是( A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL 5.在进行二重循环程序设计时,下列描述正确的是( A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内 B.外循环初值应置外循环之内;内循环初值应置内循环之内 C.内、外循环初值都应置外循环之外 D.内、外循环初值都应置内循环之外,外循环之内 6.条件转移指令JNE的测试条件为( A.ZF=0 B.CF=0 C.ZF=1 D.CF=1 7.8086CPU在基址加变址的寻址方式中,变址寄存器可以为( A.BX或CX

B.CX或SI C.DX或SI D.SI或DI 8.已知BX=2000H,SI=1234H,则指令MOV AX,[BX+SI+2]的源操作在(中。 A.数据段中偏移量为3236H的字节 B.附加段中偏移量为3234H的字节 C.数据段中偏移量为3234H的字节 D.附加段中偏移量为3236H的字节 9.执行如下程序:( MOV AX,0 MOV AX,0 MOV BX,1 MOV CX,100 A:ADD AX,BX INC BX LOOP A HLT 执行后(BX=( A.99

汇编语言期末复习题库

一、填空题 1.中央处理器包括运算器、控制器、寄存器组。 2.物理地址是指实际的20 位主存单元地址,每个存储单元对应唯一 的物理地址。 3.用二进制代码书写指令和程序的语言,称为机器语言。 4.计算机中的指令由操作码和操作数两部分组成。 5.把A和B两个寄存器的内容进行异或运算,若运算结果是0 ,那么 A、B寄存器的内容必定相同。 6.AL,BL中存放着压缩的BCD数,(AL)=18H,(BL)=47H,执行如下 两条指令ADD AL,BL 和DAA后,(AL)=65H 。 7.当指令“SUB AX,BX”执行后,CF=1,说明最高有效位有借位; 对有符号数,说明操作结果溢出。 8.FLAG状态标志寄存器中,AF为辅助进位标志,CF为进位标志, SF为符号标志,ZF为零标志,OF为溢出标志,PF为奇 偶性标志。 9.指出下列指令源操作数的寻址方式: MOV AX,ARRAY[SI] 变址寻址 MOV AX,ES:[BX] 寄存器间接寻址 MOV AX,[200H] 直接寻址 MOV AX,[BX+DI] 基址变址寻址 MOV AX,BX 寄存器寻址 MOV AX,1200H 立即数寻址

MOV AX,20[BX+SI]基址变址寻址 MOV AX,[DI+20] 变址寻址 10.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H, (20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21023H)=65H,下列指令执行后填入AX寄存器的内容: (1)MOV AX,1200H;(AX)= 1200H (2)MOV AX,BX;(AX)=0100H (3)MOV AX,[1200H];(AX)= 4C2AH (4)MOV AX,[BX];(AX)= 3412H (5)MOV AX,1100[BX];(AX)= 4C2AH (6)MOV AX,[BX][SI];(AX)= 7856H (7)MOV AX,1100[BX][SI];(AX)= 65B7H 11.已知‘A’的ASCII是41H,那么‘E’的ASCII是45H 。 12.Ends 是段定义结束伪指令,与Segment配套使用。 13.逻辑地址由段基值和偏移量组成。将逻辑地址转换为物理地址的公 式是段基值*16+偏移量。其中的段基值是由段寄存器存储。 14.一个有16个字的数据区,它的起始地址为70A0:0100H,那么该数据 区的最后一个字单元的物理地址为70B1E H。 15.DEBUG命令中,显示内存命令 D ,显示寄存器命令R,汇编命令 A ,执行命令G 。

汇编语言试题及答案

一,单项选择题(每小题1分,共20分) 1.指令JMP FAR PTR DONE属于() A.段内转移直接寻址 B.段内转移间接寻址 C.段间转移直接寻址 D.段间转移间接寻址 2.下列叙述正确的是() A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS 指令 B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP 指令 C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JN L指令 D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JN B指令 3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是() A.12C5BH B.12B6BH C.12C5AH D.12BFEH 4.在下列指令的表示中,不正确的是() A.MOV AL,[BX+SI] B.JMP SHORT DONI C.DEC [BX] D.MUL CL 5.在进行二重循环程序设计时,下列描述正确的是() A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内B.外循环初值应置外循环之内;内循环初值应置内循环之内 C.内、外循环初值都应置外循环之外 D.内、外循环初值都应置内循环之外,外循环之内 6.条件转移指令JNE的测试条件为() A.ZF=0 B.CF=0 C.ZF=1 D.CF=1 7.8086CPU在基址加变址的寻址方式中,变址寄存器可以为()A.BX或CX B.CX或SI C.DX或SI D.SI或DI 8.已知BX=2000H,SI=1234H,则指令MOV AX,[BX+SI+2]的源操作在()中。 A.数据段中偏移量为3236H的字节 B.附加段中偏移量为3234H的字节 C.数据段中偏移量为3234H的字节 D.附加段中偏移量为3236H的字节 9.执行如下程序:()

汇编语言例子

实验三: 1)题目:在内存中从ARRAY开始的连续三个字节单元存放着30H,40H,50H。编制程序将这三个连续的数据传送到内存TABLE开始的单元。 DATA SEGMENT ARRAY DB 30H,40H,50H 定义数据段 TABLE DB 3 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,ARRAY LEA DI,TABLE MOV CX,3 REP MOVSB JMP $ CODE ENDS END START (2)题目:把内存2000H和3000H字单元的内容相加,结果存入4000H单元。(不考虑溢出) DATA SEGMENT ORG 2000H DW 1234H ORG 3000H DW 5678H ORG 4000H DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,[2000H] ADD AX,[3000H] MOV [4000H],AX JMP $ CODE ENDS END START 实验四 1、数据传送指令和算术运算指令完成NUM1和NUM2相加,结果放入SUM中。

DATA SEGMENT NUM1 DW 0012H,0030H,0FC21H ; 数1 NUM2 DW 3E81H,44E9H,6D70H ; 数2 SUM D W 3 DUP(?) ; 结果单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX,3 LEA SI,NUM1 LEA DI,NUM2 LEA AX,SUM HE: MOV BX,[SI] ADD BX,[DI] MOV [AX],BX INC SI INC DI INC AX LOOP HE MOV AH, 4CH ; 返回DOS INT 21H CODE ENDS END START 2、内存中自TABLE开始的七个单元连续存放着自然数0至6的立方值(称作立方表)。;任给一数X(0≤X≤6)在XX单元,查表求X的立方值,并把结果存入YY单元中。;提示用XLAT指令 DATA SEGMENT TABLE DB 0H,1H,2H,3H,4H,5H,6H XX DB 1 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TABLE MOV AL,[XX] XLAT MOV DL,AL MOV AH,02H INT 21H JMP $

相关文档
相关文档 最新文档