汇编语言程序设计汇编.docx
《汇编语言程序设计汇编.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计汇编.docx(26页珍藏版)》请在冰豆网上搜索。
![汇编语言程序设计汇编.docx](https://file1.bdocx.com/fileroot1/2023-1/2/ef631b20-a7a7-4685-891d-3763d4465aff/ef631b20-a7a7-4685-891d-3763d4465aff1.gif)
汇编语言程序设计汇编
汇编语言程序设计
一、选择题
1、某寄存器中的值有时是地址,因此只有计算机的(指令)才能识别它。
2、指令系统中采用不同寻址方式的目的主要是(缩短指令长度,扩大寻址空间,提高编程灵活性)。
3、某计算机的字长16位,它的存储容量是64KB,若按字编址,那么它的寻址范围是(32K).
4、用于对某个寄存器中操作数的寻址方式称为(寄存器直接)寻址。
5、描述汇编语言特性的概念中,有错误的句子是(C)。
A.对程序员的训练要求来说,需要硬件知识B.汇编语言对机器的依赖性高
C.用汇编语言编制程序的难度比高级语言小D.汇编语言编写的程序执行速度比高级语言快
6、算术右移指令执行的操作是(符号位不变,并顺次右移1位,最低位移至进位标志位).
7、寄存器直接寻址方式中,寄存器中所存的是(操作数)。
8、下面描述RISC指令系统中基本概念不正确的句子是(C)。
A.选取使用频率高的一些简单指令,指令条数少B.指令长度固定
C.指令格式种类多,寻址方式种类多D.只有取数/存数指令访问存储器
9、在CPU中,暂存指令的寄存器是(指令寄存器)。
10、用于对某个寄存器中操作数的寻址方式称为(寄存器直接)寻址。
11、指令周期是指(PU从主存取出一条指令加上CPU执行这条指令的时间)。
12、执行的操作是(符号位填0,并顺次右移1位,最低位移至进位标志位).
13、变址寻址方式中,操作数的有效地址等于(变址寄存器内容加上形式地址)。
14、由于CPU内部的操作速度较快,而CPU访问一次主存所花的时间较长,因此机器周期通常用(主存中读取一个指令字的最短时间)来规定。
15、在指令的地址字段中,直接指出操作数本身的寻址方式,称为(立即寻址)。
16、寄存器间接寻址方式中,操作数处在(主存单元)。
17、程序控制类指令的功能是(改变程序执行的顺序)。
18、堆栈寻址方式中,设A为累加寄存器,SP为堆栈指示器,Msp为SP指示器的栈顶单元,如果操作的动作是:
(A)→Msp,(SP)-1→SP,那么出栈操作的动作为:
(B)
A.(Msp)→A,(SP)+1→SPB.(SP)+1→SP,(Msp)→A
C.(SP)-1→SP,(Msp)→AD.(Msp)→A,(SP)-1→SP
19、一个子程序在主程序执行期间可以多次被调用,甚至可以自己调用自己,实现这种调用的最好的办法是使用(堆栈)。
20、指令寄存器的作用是(保存当前正在执行的指令)。
21、运算型指令的寻址与转移型指令的寻址不同点在于(前者取操作数,后者决定程序转移地址)。
22、寄存器直接寻址方式中,操作数处在(寄存器)。
23、位操作类指令的功能是(对CPU内部通用寄存器或主存某一单元任一位进行状态检测或强置)。
24、CPU从主存取出一条指令并执行该指令的时间叫做(指令周期)。
二、填空题
1.指令格式是指令用二进制代码表示的结构形式,通常格式中由操作码字段和地址码字段组成。
2.CPU中至少有如下六类寄存器指令寄存器,程序计数器,地址寄存器,通用寄存器,状态条件寄存器,缓冲寄存器。
3.条件转移、无条件转移、转子程序、返主程序、中断返回指令都属于程序控制类类指令
4.CPU中,保存当前正在执行的指令的寄存器为指令寄存器IR,保存当前正在执行的指令的地址的寄存器为程序计数器PC。
5.CPU从存储器取出一条指令并执行这条指令的时间和称为指令周期。
由于各种指令的操作功能不同,各种指令的指令周期是不相同的。
6.堆栈是一种特殊的数据寻址方式,它采用先进后出原理。
三、判断题
1、判断下列指令书写是否正确
(1)MOVAL,BX
(2)MOVAL,CL(3)INC[BX](4)MOV5,AL(5)MOV[BX],[SI](6)MOVBL,F5H(7)MOVDX,2000H(8)POPCS(9)MOVCS,2000H(10)MOVAX,[DX](11)MOVDS,ES(12)MOVDS,2000H
(1)(×)
(2)(√)(3)(√)(4)(×)(5)(×)(6)(√)(7)(√)(8)(×)(9)(×)(10)(√)(11)(×)(12)(×)
2、要想完成把[2000H]送[1000H]中,用指令MOV[1000H],[2000H]是否正确?
如果不正确,应用什么办法?
(×)
应用MOVAX,[2000H]
MOV[1000H],AX
四、简答题
1、分析汇编语言源程序应该由哪些逻辑段组成?
各段的作用是什么?
语句标号和变量应具备哪3种属性?
解:
汇编语言源程序应该由若干个逻辑段组成,可以有若干个数据段、代码段、堆栈段和附加数据段,至少要有一个代码段。
各段的作用如下:
1)代码段用来存放程序和常数。
2)数据段用于数据的保存。
3)堆栈段用于保护数据,尤其在子程序调用、中断过程中进行现场信息保护。
4)附加数据段用于数据的保存。
语句标号和变量应具备的3种属性:
段属性、偏移属性和类型属性。
2、比较宏指令与子程序,它们有何异同?
它们的本质区别是什么?
解:
宏与子程序两者的相同之处在于都是用来处理在编程过程中多次使用的功能程序的方法,两者均能简化源程序。
两者的区别在于:
1)宏调用通过宏指令名进行,汇编时,随时调用随时展开,并不简化目标程序;子程序调用是在程序执行期间执行CALL指令,代码只在目标程序中出现一次,所以也简化了目标程序。
2)宏调用时的参数由汇编程序通过实参转换成形参的方式传递,具有很大的灵活性。
宏定义中允许设置若干形式参数代替数值、指令、寄存器、各种字符串等。
宏调用时可用程序所需要的实际参数来替换,使编程人员感觉非常灵活;而子程序的参数传递要麻烦得多。
3)宏调用在汇编时完成,不需要额外的时间开销;子程序调用和子程序返回都需要时间,还涉及堆栈操作。
故若优先考虑速度,用宏指令;若优先考虑存储空间,用子程序。
3.说明存储器操作数有效地址EA的构成。
通常有效地址是由位移量、基址、变址之和决定。
4.简述指令LEA与LDS/LES区别。
LEA指令取内存储器操作数的16位段内偏移量地址装入指定的通用寄存器。
LDS和LES指令则将指定存储器中连续4个单元内的低地址连续二个字节内容送通用寄存器,高地址连续二个字节内容送数据段(LDS)或送附加段(LES)
5.实现寄存器AX清零的方法有哪些?
实现清零方法如下。
1)传送指令:
MOVAX,02)减法指令:
SUBAX,AX;SBCAX,AX3)异式指令:
XORAX,AX
6.当8086微处理器响应总线请求发出HLDA信号后,有哪些引脚信号处于高阻?
~
,
~
,
,
,
,IO/
,
,
处于高阻,ALE无效。
7.指令AND与TEST有何异同?
AND与TEST指令均为将目标操作数与源操作数进行逻辑与操作,AND指令运算结果要送回目标操作数,TEST指令不送回目标操作数。
两者标志位都有相同的位发生变化。
8.简述8086/8088端口寻址方式,并说明各自的端口寻址范围。
端口寻址方式有如下两种。
1)直接寻址方式:
如INAL,20H;OUT40H,AL;端口数为0~255。
2)间接寻址方式:
如INAL,DX;OUTDX,AX;端口数为0~65535。
9.简述AAA与DAA指令的区别。
AAA指令为非压缩BCD码加法调整指令,将非压缩BCD码相加的结果仍调整为非压缩形式的BCD码。
DAA为压缩BCD码加法调整指令。
将压缩BCD码相加,其结果仍调整为压缩形式的BCD码。
两条指令编程时放在加减法指令后面,以便调整。
10.什么是寻址方式?
简述8086/8088寻址方式。
所谓寻址方式是寻找操作数的方法。
8086/8088微处理器寻址方式有寄存器寻址、立即寻址、直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址变址寻址方式。
11.说明JMP与JXX所能实现转移的范围。
与使用JMP指令进行转移时,其转移范围不受限制,可在段内直接或间接转移,也可以在段间直接或间接转移。
JXX指令是条件转移指令,执行指令时,根据微处理器标志寄存器的状态决定是否控制程序转移,若满足条件,则将控制转移到指令所规定的目标;若条件不满足,则继续顺序执行。
所有的条件转移指令都是段内转移,且是短距离的,即目标必须在当前指令段内,且与下一条指令的第一字节距离在-128~+127字节之内。
12.8086/8088微处理器当响应总线请求发出HLDA信号后,执行部件EU是否立即停止操作?
执行部件此时将继续执行已经进入微处理器指令队列中的指令,直到遇到一条需要使用总线的指令时,执行部件才停下来。
13.指令系统中哪些指令是成对出现的?
指令系统中成对出现的指令、即在程序中两者同时出现,有PUSH/POP、PUSHF/POPFF、CALL/RET。
14.说明指令MOVAL,LOH[SI]中源操作数的寻址方式及其存放位置?
指令MOVAL,20H[SI]中源操作数的寻址方式是变址寻址方式,待寻找的操作数在内存储器中。
15.执行SAHF和LAHF指令可对哪些标志位进行处理?
SAHF和LAHF指令是对F寄存器中的低8位SF、ZF、AF、CF进行处理。
45.INCAX与ADDAX,1指令有何异同?
两条指令都能使AX内容增1,但前者CF标志无影响,后者CF有影响。
16.简述SAR与SHR指令的区别。
SHR指令为逻辑右移指令,可用于无符号数除2的操作;SAR指令为算术右移指令,可用于带符号数除2的操作。
执行SHR指令时,右移一位,最高位补零,执行SAR指令一次,右移一位,最高位自动这回,保留原值不变。
17.指令SUB与CMP有何异同?
两条指令都能将目标操作数与源操作数进行相减操作,SUB能将结果送目标操作数中,并反映在标志位。
18.什么叫指令?
什么叫指令系统?
指令就是要计算机执行某种操作的命令指令系统就是一台计算机中所有机器指令的集合
19.说明CPU中的主要寄存器及其功能。
1.指令寄存器(IR):
用来保存当前正在执行的一条指令。
2.程序计数器(PC):
用来确定下一条指令的地址。
3.地址寄存器(AR):
用来保存当前CPU所访问的内存单元的地址。
4.缓冲寄存器(DR):
<1>作为CPU和内存、外部设备之间信息传送的中转站。
<2>补偿CPU和内存、外围设备之间在操作速度上的差别。
<3>在单累加器结构的运算器中,缓冲寄存器还可兼作为操作数寄存器。
20.通用寄存器(AC):
当运算器的算术逻辑单元(ALU)执行全部算术和逻辑运算时,为ALU提供一个工作区。
21.状态条件寄存器:
保存由算术指令和逻辑指令运行或测试的结果建立的各种条件码内容。
除此之外,还保存中断和系统工作状态等信息,以便使CPU和系统能及时了解机器运行状态和程序运行状态。
22.什么是指令周期?
什么是机器周期?
什么是时钟周期?
三者之间的关系如何?
指令周期是完成一条指令所需的时间。
包括取指令、分析指令和执行指令所需的全部时间。
机器周期也称为CPU周期,是指被确定为指令执行过程中的归一化基准时间,通常等于取指时间(或访存时间)。
时钟周期是时钟频率的倒数,也可称为节拍脉冲或T周期,是处理操作的最基本单位。
一个指令周期由若干个机器周期组成,每个机器周期又由若干个时钟周期组成。
23.指出下列指令中的源操作数与目的操作数的寻址方式
(1)MOVSI,200
(2)MOVCX,DATA[SI](3)ADDAX,[BX][DI](4)ANDAX,BX(5)MOV[SI],AX(6)PUSHF
(1)源:
立即寻址;目的:
寄存器寻址
(2)源:
变址寻址;目的:
寄存器寻址(3)源:
基址变址寻址;目的:
寄存器寻址(4)源:
寄存器寻址;目的:
寄存器寻址(5)源:
寄存器间接寻址;目的:
寄存器寻址(6)源:
寄存器寻址;目的:
直接寻址
24.给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?
(1)立即寻址
(2)直接寻址(3)使用BX的寄存器寻址(4)使用BX的间接寻址(5)使用BX的寄存器相对寻址(6)基址变址寻址(7)相对基址变址寻址
(1)立即寻址0
(2)直接寻址7237H(3)使用BX的寄存器寻址0(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址637DH+7237H=D5B4H(6)基址变址寻址637DH+2A9BH=8E18H(7)相对基址变址寻址637DH+2A9BH+7237H=1004FH
25、试根据下列要求写出相应的汇编语言指令
(1)把BX寄存器和DX寄存器的内容相加,结果存到DX寄存器中。
(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,结果存到AL寄存器中。
(3)用寄存器BX和位移量0B2H寄存器相对寻址方式把存储器中的一个字与(CX)相加,结果存到存储器中。
(4)用位移量0524H直接寻址方式把存储器中的一个字与数2A59H相加,结果存到存储器中。
(5)把数0B5H与(AL)相加,并把结果存到AL中。
(1)MOVAX,BXADDAX,DXMOVDX,AX
(2)ADDAL,BYTE[BX][SI]
(3)MOVAX,CXADDAX,[BX]+0B2HMOV[BX]+0B2H,AX
(4)MOVAX,2A59HADDAX,[0524H]MOV[0524H],AX
(5)ADDAL,0B5H
26、现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各指令执行后AX寄存器的内容。
(1)MOVAX,1200H
(2)MOVAX,BX(3)MOVAX,[1200H](4)MOVAX,[BX](5)MOVAX,1100[BX](6)MOVAX,[BX][SI](7)MOVAX,1100[BX][SI]
(1)AX=1200H
(2)AX=0100H(3)AX=4c2AH(4)AX=3412H(5)AX=4c2AH(6)AX=7856H(7)AX=65B7H
27、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?
其物理地址是什么?
(1)MOVAX,0ABH
(2)MOVAX,BX
(3)MOVAX,[100H](4)MOVAX,VAL
(5)MOVAX,[BX](6)MOVAX,ES:
[BX]
(7)MOVAX,[BP](8)MOVAX,[SI]
(9)MOVAX,[BX+10](10)MOVAX,VAL[BX]
(11)MOVAX,[BX][SI](12)MOVAX,VAL[BX][SI]
(1)立即寻址0
(2)寄存器寻址0(3)直接寻址20100H(4)直接寻址20050H
(5)基址寻址20100H(6)段超越的基址寻址21100H(7)堆栈段基址寻址15010H(8)源变址寻址200A0H(9)带偏量的基址寻址20110H(10)带偏移量的基址寻址20150H(11)基址加变址寻址201A0H(12)带偏移量的基址加变址寻址201F0H
28、如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别?
指令执行完后AX寄存器的内容是什么?
MOVAX,TABLE
LEAAX,TABLE
将TABLE为偏移量的内存中数据放入AX
将TABLE的地址偏移量的放入AX
29、假设(BX)=0E3H,变量VALUE中存放的内容为79H,确定下列指令单独执行后的结果。
(1)XORBX,VALUE
(2)ANDBX,VALUE(3)ORBX,VALUE
(4)XORBX,0FFH(5)ANDBX,0(6)TESTBX,01H
(1)11100111XOR01111001=10011110H
(2)01100001(3)11111111H
(4)0001100021(5)00000000(6)0E3H
30、试分析下面程序段执行完成什么样的功能?
MOVCL,04
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
将DX,AX中的双字节左移四位
31、试写出程序段把DX,AX中的双字右移四位。
MOVCL,04H
SHRAX,CL
MOVBL,AH
MOVBH,DL
SHRBX,CL
ORAH,BL
SHRDX,CL
32、假定(DX)=0B9H,(CL)=3,(CF)=1,确定下列指令单独执行后的DX中的内容。
(1)SHRDX,1
(2)SARDX,CL(3)SHLDX,CL(4)SHLDX,1(5)RORDX,CL(6)ROLDX,CL(7)SALDH,1(8)RCLDX,CL(9)RCRDX,1
(1)(DX)=05CH
(2)(DX)=017H(3)(DX)=05C8H(4)(DX)=0172H(5)(DX)=2017H(6)(DX)=05C8H(7)(DX)=0172H(8)(DX)=05CCH(9)(DX)=805CH
五、综合题
计算21*12-117/9的源程序.
答:
moval,21;将21取出来
movbl,17;将17取出来
mulbl;计算21*17
movcx,ax;将结果暂存起来(得结果1)
movax,117;将117取出来
movbl,13;将13取出来
divbl;计算117/13(得结果2)
subcx,ax;将结果1-结果2,得到最终结果
hlt
2、执行下列指令后,AX寄存器中的内容是什么?
TABLEDB10,20,30,40,50
ENTRYDW3
……
MOVBX,OFFSETTABLE
ADDBX,ENTRY
MOVAX,[BX]
AX=
【解答】AX=3228H
3、执行完下列程序后,回答指定的问题。
MOVAX,0
MOVBX,2
MOVCX,50
LP:
ADDAX,BX
ADDBX,2
LOOPLP
问:
(1)该程序的功能是。
(2)程序执行完成后,(AX)=。
解:
(1)完成0到100间所有偶数求和的功能。
(2)2550
4、编写程序,计算下面函数的值。
【解答】
DATASEGMENT
XDW34
SDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,X;将X送到AX中
CMPAX,0;(AX)>0吗?
JLDOUB;是,转向doub
CMPAX,10;否,(ax)<10吗?
JLETRIB;是,转向trib
SALAX,1;否,乘以4
SALAX,1
JMPEXIT
DOUB:
SALAX,1;乘以2
JMPEXIT
TRIB:
SALAX,1;乘以3
ADDAX,X
EXIT:
MOVS,AX;保存结果
MOVAH,4CH;结束
INT21H
CODEENDS
ENDSTART
注意,在比较的过程中使用的是针对带符号数的跳转指令,χ应该看作带符号数。
程序中还用了移位指令代替了乘法指令。
5、从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。
【解答】
DATASEGMENT
BLOCKDB100DUP(?
)
COUNTDB?
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVDL,0
LEASI,BLOCK
LP:
MOVAH,1
INT21H
CMPAL,0DH
JZEXIT
MOV[SI],AL
CMPAL,30H
JAENEXT
CMPAL,39H
JBENEXT
INCDL
NEXT:
INCSI
JMPLP
EXIT:
MOVCOUNT,DL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6、已知在内存中从BLOCK单元起存放有20个带符号字节数据,统计其中负数的个数并放入COUNT单元。
【解答】
DATASEGMENT
BLOCKDB-7,1,12,-90,-70,34,-1,56,45,-12
DB-3,-4,23,0,12,11,-9,-8,67,-56
CNEQU$-BLOCK
COUNTDB?
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVDL,0
LEASI,BLOCK
MOVCX,CN
LP:
MOVAL,[SI]
TESTAL,80H
JZNEXT
INCDL
NEXT:
INCSI
LOOPLP
MOVCOUNT,DL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
7、从键盘输入一个大写英文字母,将其转换为小写字母并显示出来,要求输入其它字符时,能够有出错提示信息。
【解答】
DATASEGMENT
MESSDB'INPUPERROR!
',0AH,0DH,'$'
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVAH,01H
INT21H
CMPAL,'A'
JBERR
CMPAL,'Z'
JAERR
ADDAL,20H
MOVDL,AL
MOVAH,02H
INT21H
JMPEXIT
ERR:
MOVDX,OFFSETMESS
MOVAH,09H
INT21H
EXIT:
MOVAH,02H
INT21H
CODEENDS
ENDSTART
8、试定义将一位十六进制数转换为ASCII码的宏指令。
【解答】
HEXTOAMACRO
ANDAL,0FH
CMPAL,9
JNAHEXTOA1
ADDAL,7H
HEXTOA1:
ADDAL,30H
ENDM
9、变量X,Y为二进制的ASCII码串,请编程序计算并显示出下式的值:
Z←X+(Y-5)
答案:
求一个代数式(或表达式)的值,一般的做法是根据运算符的优先级顺序进行计算,如上式先计算(Y-15),