汇编语言复习题.docx
《汇编语言复习题.docx》由会员分享,可在线阅读,更多相关《汇编语言复习题.docx(24页珍藏版)》请在冰点文库上搜索。
汇编语言复习题
选择题
1、80X86通用寄存储器各有不同特殊功能,其中CX寄存器特定用法是-----B------。
A、I/O指令间接寻址中作地址寄存器
B、在循环指令作循环计数寄存器
C、间接寻址中作变址寄存储器在
D.间接寻址中作基址寄存器
2、80X86通用寄存储器各有不同特殊功能,其中DX寄存器特定用法是----A-------。
A、I/O指令间接寻址中作地址寄存器
B、在循环指令作循环计数寄存器
C、间接寻址中作变址寄存储器在
D.间接寻址中作基址寄存器
(AX,BX,CX,DX,SI,DI,BP等作用)
3、指令MOV[BX][DI],DX中段内地址为----------A----------。
A、BX值加DI值B、BX值减DI值
C、BX值左移4位加DI值D、BX值加DI值左移4位
4、如下指令可将AX寄存器内容改变的是---------C---------。
A、XCHGAX,AXB、CMPAX,BX
C、ANDAX,BXD、TESTAX,BX
5、指令MULCX是将-------B-----------。
A、(AX:
DX)←(AX)*(CX)B、(DX:
AX)←(AX)*(CX)
C、(AX:
BX)←(AX)*(CX)D、(AX:
CX)←(AX)*(CX)
6、下列指令的表示中,不正确的是--------B-----------。
A、MOVAX,100B、MOVDS,200C、ADDAL,200D、MOVAX,DS
7、下列指令中不会改变指令指针寄存器IP内容的是-------A------------。
A、ADDB、JMPC、CALLD、RET
8、汇编程序中语句DAT1DB08H的含义是-----------D----------。
A、用DAT1表示08H
B、从标号DAT1对应的地址起08H个单元被分配
C、定义DAT1为变量,其地址为0008H
D、定义DAT1为变量,其初值为08H
9、指令SHLAL,CL是-------B-------。
A、AL内容左移到CL寄存器中,低位补0
B、AL内容左移CL指出的位数,低位补0
C、AL内容左移到CL寄存器中,低位补AL高位
D、AL内容左移CL指出的位数,低位补AL高位
(SAL、SHR、SAR、ROL、ROR、RCL、RCR如何?
)
10、中断处理系统一般是由------D--------组成。
A、软件B、硬件C、固件D、硬件与软件
11、在8088/8086系统中,中断向量是指-------B--------.
A.中断类型号B.中断服务程序入口地址
C.存放中断处理程序入口地址的存储单元的地址
D.保护断点的栈区地址
12、执行INAL,DX指令后,进入AL寄存器的数据来自D。
A、寄存器 B、存储器 C、立即数 D、外设端口
13、指令JMPFARPTRDONE属于C
A.段内转移直接寻址 B.段内转移间接寻址
C.段间转移直接寻址D.段间转移间接寻址
14、对于下列程序段:
AGAIN:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
INCDI
LOOPAGAIN
也可用A指令完成同样的功能。
A.REPMOVSB B.REPLODSB
C.REPSTOSB D.REPESCASB
15、串指令中的目的操作数地址是由___C___提供。
A.SS:
[BP] B.DS:
[SI]
C.ES:
[DI] D.CS:
[IP]
16、在下列指令的表示中,不正确的是C。
A.MOVAL,[BX+SI] B.JMPSHORTDONI
C.DEC[BX]D.MULCL
填空题
1.如果用24位存储一个无符号数,该数的范围是
;如果存储的是一个补码表示的有符号数,该数的范围则是
。
2.指令MOVAX,[BX][SI]中源操作数的寻址方式为____基址变址寻址__________,目的操作数的寻址方式为______寄存器寻址__________。
3.已知存储器中2000:
1000H单元中的数据为1234H,则此单元的物理地址为21000,有效地址为1000H。
4.变量的类型有db、dw、dd,标号的类型有near、far。
5. 设内存中某一单元的物理地址为12345H,试完成下列不同的逻辑地址表示:
(1)1234H:
0005H
(2)1200H:
0345H
6.已知两数5678H和0DCBAH相加,试写出下列各标志位的置位情况和相加结果。
OF:
0SF:
0AF:
1CF:
1结果:
3332H
7.已知两数5678H和0DCBAH相减,试写出下列各标志位的置位情况和相加结果。
OF:
0SF:
0AF:
1CF:
1结果:
79beH
8.写出下列存储器地址的段基址、偏移地址和物理地址。
4132H:
5300H
段基址:
4132H偏移地址:
5300H物理地址:
46620H
9.已知DS=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,
(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,说明下列指令执行后AX寄存器的结果。
(1)MOVAX,1200H1200H
(2)MOVAX,BX0100H
(3)MOVAX,[1200H]4C2AH(4)MOVAX,[BX]3412H
(5)MOVAX,1100H[BX]4C2AH(6)MOVAX,[BX][SI]7856H
(7)MOVAX,1100H[BX][SI]65B7H
10、设(SS)=2F00H,(SP)=0140H,若在堆栈中存入5个数据,则栈顶的物理地址为______2F136_____H,若又从堆栈中取出3个数据,则栈顶的物理地址为___2F13C____H。
11、令MOVAX,0F0F0H和ADDAX,4652H执行后,CF=___1___,SF=____0____。
12、汇编语言程序中语句格式由标识符、操作符、操作数、注释四部分组成。
13、映像文件产生于______汇编______阶段,列表文件产生于______连接________阶段。
14、808CPU具有20根地址线,直接寻址能力可达1M。
15、8088CPU中共有14个寄存器,这些寄存器可分为2大组。
16、8088CPU从结构上可以分为执行单元EU和接口单元BIU。
17、AX、BX、CX、DX均为16位寄存器,也可作为两个8位寄存器使用。
18、F标志寄存器共有9个标志位,除OF、SF、AF和CF外,还有PF、ZF、TF、IF、DF,其中用于记录是否产生进位的标志位是CF。
19操作数有三种类型,分别为DB操作数、DW操作数和DD操作数。
20、一个源程序中可以包含代码段、数据段及堆栈段。
其中代码段是源程序中必不可少的,其它两个段可有可无。
21、SEGMENT/ENDS称为段定义伪指令;ASSUME称为段寻址伪指令;源程序结束伪指令为END;三种数据定义伪指令分别为DB、DW、DD。
22、常用的DOS功能调用中的1号功能调用完成由键盘输入一个字符操作,2号功能调用完成在屏幕上显示一个字符。
9号功能调用:
在屏幕上显示一个字符串;0A号功能调用:
由键盘读入一个字符串。
23、一般称SP为堆栈指针寄存器,称AX为累加寄存器。
判断正误,并改正错误
1.一个段允许的最大容量为64KB,故无法使用超过64KB之外的存储器单元。
F(允许段超越)
2.指令POPCS可用于改变CS寄存器的值。
F(popcs是非法指令,会导致代码段非正常改变)
3.CS段只能存放程序代码,DS段只能存放数。
F(数据可以放在CS段,也可以放在DS段,程序代码亦然。
但是CPU不会把放在CS段中的数据当作数据执行,也不去读DS段中的程序代码)
4.若AX=1234H,执行进栈指令后,SS:
SP单元的内容为1234H。
T
5.汇编语言程序中可以使用的语句有指令,伪指令和宏指令。
T
6.循环指令LOOP为短转移指令。
T
7.JNA指令与JB指令是等价的指令。
F(JNA为不高于则转移,JB为低于则转移
8.指令MOV[SI],[DI]是错误指令。
T(两个操作数不能同时为内存单元)
9.指令ADD[SI],5是正确的指令。
T
10.inc和loop指令不影响CF标志位。
T
简答题
1、8086/8088CPU从功能上分为几个独立的功能部件,分别是什么?
答:
分为两个独立的功能部件:
(1)总线接口部件(BIU):
功能,负责CPU与存储器、I/O端口传送数据。
即从内存取指令,送指令队列缓冲器。
(2)执行部件(EU):
功能,负责指令的译码、执行指令。
2、简述微机中对存储器进行地址分段的原因。
答:
IBMPC机的字长为16位,可以访问的最大存储空间为
=64KB;IBMPC的最大存储容量为1M=
,要访问1M字节空间的存储空间需20位地址。
采用存储器地址分段的方法,实现在16位字长的机器里,提供20位地址。
3、在8086/8088CPU中,物理地址和逻辑地址是指什么?
已知逻辑地址为2E00:
5A00H,计算出其对应的物理地址。
答:
Cpu与存储器进行数据交换时在地址总线上提供的20位地址信息称为物理地址。
逻辑地址是16位段地址和16位偏移地址组成的地址。
33A00H
4、试比较“ADD”和“+”的区别。
答:
“ADD”是加法指令,为指令的操作码部分,有对应的机器码;“+”是算术操作符,没有对应的机器码,在指令的操作数部分;汇编程序对包含“+”操作符的表达式进行计算后,得到一个数值。
5、什么是寻址方式,有哪三种?
答:
指令通常由操作码和操作数两部分组成,寻址方式即指如何寻找操作码或操作数的方式,大多数情况是指寻找操作数的问题。
可分为立即寻址、寄存器寻址和内存寻址三大种。
解释下列名词:
(1)机器指令程序
(2) 汇编指令(3) 汇编语言(4) 汇编语言程序
(5) 汇编语言源程序(6)寻址方式
答:
(1)机器指令程序:
指CPU能直接识别并执行的指令程序。
(2)汇编指令:
指汇编语言中使用的一些操作符和助记符,还包括一些伪指令。
(3)汇编语言:
是面向机器的程序设计语言,由汇编指令、伪指令和其他符号组成。
(4)汇编语言程序:
也称为汇编语言源程序,是用汇编语言编写的一种计算机程序,属于计算机低级语言程序,是属性为ASM的源文件。
(5)汇编语言源程序:
同(4)。
(6)寻址方式:
定位内存单元的方法。
指出下列指令中源操作数和目的操作数分别采用的是哪种寻址方式。
(1)MOVDAT,64H;源:
立即寻址;目的:
直接寻址
(2)ADDAL,DAT[BX][SI];源:
相对基址变址寻址;目的:
寄存器寻址
(3)MUL[BX];源:
寄存器间接寻址;目的:
寄存器寻址
(4)MOVBX,100H;源:
立即寻址;目的:
寄存器寻址
(5)MOVSW;源:
寄存器间接寻址;目的:
寄存器间接寻址
(6)ADDAX,BX;源:
寄存器寻址;目的:
寄存器寻址
(7)MOVBX,[100];源:
直接寻址;目的:
寄存器寻址
指出下列各指令分别属于哪一类指令
(1) ADCAX,BX;算术运算指令(ADC:
带进位加法)
(2) LEABX,DAT;目的地址传送指令(LEA:
装入有效地址)
(3) RCLAX,CL;逻辑运算指令(RCL:
通过进位的循环左移。
CL指定次数)
(4) CLD;控制指令(CLD:
方向标志位置0指令)
(5) XORAL,0FH;逻辑运算指令(XOR:
异或运算)
(6) LOOPNEXT;循环控制指令
(7) HLT;控制指令(HLT:
停机)
(8) OUTDX,AL;输出传送指令
指出下列指令的功能。
(1)MOVAX,DISP[SI];以偏移量DISP与SI中的内容的和为源单元地址,将该地址中的内容送入AX中。
(2)LEADX,BUF;将BUF中的偏移地址装入DX中。
(3)PUSHBX;将BX中的数据入栈,SP指向SP-2。
(4)JNCNEXT;当CF=0时,则跳转到NEXT标号处。
指出下列指令的错误。
(1)MOV[BX],[DI];两个操作数不能同时在存储器中
(2)MOVDS,100H;立即数不能直接传送给段寄存器
(3)RLCAX,4;没有此操作码
(4)CMPBYTEPTR[BX],AB;不能对两个存储器中的操作数进行比较
(5)MOVAX,[BX][BP];同一个操作数中不能同时用两个基址寄存器
(6)ADD15H,BX;目的操作数不能为立即数
(7)MOVCS,AX;不能用MOV指令修改CS的值
(8)MOVAX,[SI]{DI};DI中使用的括号不对
根据以下要求,写出对应的汇编语言指令
(1)用偏移地址1020H直接寻址,把存储单元一个字内容与立即数3相加,结果存入存储单元。
ADDWORDPTR[1020H],3
(2)写出清AL寄存器内容和CF的指令。
Subal,al
(3)写出AL内容不变,仅清CF的指令。
Cmpal,al
(4)写出执行以下计算的指令序列,其中各变量均为16位有符号数。
①Z←W+(Z-X)
MOV AX, W
MOV BX, Z
SUB BX, X
ADD AX, BX
MOV Z, AX
②Z←(W*X)/(Y+6)
MOVAX,W
IMULX
MOVBX,Y
ADDBX,6
IDIVBX
MOVZ,AX
程序分析题:
1、设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
MOVAX,X;ax=X
IMULY;dx,ax=X*Y
MOVCX,AX;cx=X*Y的低16位
MOVBX,DX;bx=X*Y的高16位
MOVAX,Z;ax=Z
CWD;dx,ax=Z(双字)
ADDCX,AX;cx=Z的低16位+X*Y的低16位
ADCBX,DX;bx=Z的高16位+X*Y的高16位+低位进位
SUBCX,540;cx=Z的低16位+X*Y的低16位-540
SBBBX,0;bx=Z的高16位+X*Y的高16位+低位进位-低位借位
MOVAX,V;ax=V
CWD
SUBAX,CX;ax=V的低16位-(Z的低16位+X*Y的低16位-540)
SBBDX,BX;dx=V的高16位-(Z的高16位+X*Y的高16位+低位进位-低位借位)-低位借位
IDIVX;/X
运算公式:
[V-(X*Y+Z-540)]/X,AX存商,DX存余数
2、设有三个八位无符号数x、y、z分别存放在DAT、DAT1、DAT2单元中,请写出下列程序段的功能:
MOVAX,0;ax=0
MOVRES,AX;res=ax=0
LEABX,DAT;bx=offsetx
MOVAL,3;al=3
CALLSUB1;puship,jmpnearptrsub1
MOVAL,5;al=5
CALLSUB1;puship,jmpnearptrsub1
MOVAL,7;al=7
CALLSUB1;puship,jmpnearptrsub1
HLT;暂停
SUB1:
MUL[BX];ax=
ADDRES,AX;res=
MOVAX,0;ax=0
INCBX;bx=bx+1
RET;popip
答:
计算3x+5y+7z的值,送入res及res1单元保存。
3、 若DATA1与DATA2都是内存单元的地址,请指出下列程序段的功能:
MOVAL,0;al=0
LEASI,DATA1;si=offsetdata1
LEABX,DATA2;bx=offsetdata2
MOVCX,64H;cx=64h,循环100次
NEXT:
MOVAL,[SI];al=data1单元的数据
MOV[BX],AL;data2中的内容=data1单元的数据
INCSI
INCBX
LOOPNEXT
HLT
答:
将从data1单元地址开始的100个字节类型的数传到以data2单元地址开始的存储区。
4、阅读下面程序段,指出完成什么功能?
BEGIN:
MOVAL,ADR1;ADR1是字节单元地址
TESTAL,1;测试al=1,test做“与”,仅改变ZF位
JZBRCH;若ZF=1,转到brch
MOVBL,80H;若al=0,则bl=-1
JMPSTOP;
BRCH:
MOVBL,0H;若al=1,则bl=0
STOP:
MOVADR2,BL;ADR2是字节地址
HLT
答:
if(adr1)=1
Then(adr2)=0
Else(adr2)=-1
5、假设X和X+2单元的内容为双精度数P,Y和Y+2单元的内容为双精度数Q,(X和Y为低位字),说明下列程序段的功能。
SUB1:
MOVDX,X+2;dx=x+2
MOVAX,X;ax=x
ADDAX,X;ax=2x
ADCDX,X+2;dx=2(x+2)+cf,
CMPDX,Y+2;(cmp相当于做减法运算,但不保存结果。
先判断p的高位的2倍)
JLL2;若p高位两倍小于y+2,则跳至L2处
JGL1;若p高位两倍大于y+2,则跳至L1处
CMPAX,Y;P的低位的两倍与Q的低位作比较
JBEL2;若P的低位的两倍低于等于Q的低位时,跳到L2处
L1:
MOVAX,1;若2P大于Q,则ax=1
JMPSHORTEXIT;
L2:
MOVAX,2;若2P小于等于Q,则ax=2
EXIT:
RET
答:
判断2P是否大于Q。
如果大于,AX=1,否则AX=2.程序的算法是先判断高字节,如果高字节相等再判断低字节。
6、阅读下列程序,并将该程序执行后的结果填入空格
DATASEGMENT
BLOCKDB00H,12H,35H,64H,41H,7FH
DB80H,0ABH,0EFH,5FH
VALDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
XORAX,AX;进行异或运算
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETBLOCK;ds:
bx指向数据段0位置处
MOVAL,[BX];将data段数据送入al
INCBX
MOVCX,09
AGAIN:
CMPAL,[BX]
JGNEXT;大于则转移
MOVAL,[BX]
NEXT:
INCBX
DECCX
JNZAGAIN;若ZF=0,则跳到again
MOVVAL,AL
MOVAX,4C00H
INT21H
CODEENDS
ENDMAIN
结果:
BX=0aH
[VAL]=0EFH标志位CF=0
该程序的功能是:
将数据段的数据逐个比较,将较大的数送入AL中,再将最后的结果送入VAL中。
7、下面程序查找字符串string中是否有字母“A”,有则AL=0;否则AL=-1,请将程序填写完整。
MOVCX,20;假设字符串长度为20
MOVSI,0
Moval,65
NEXT:
CMPAL,STRING[SI]
JEYESA
INCSI
LOOPNEXT
NOA:
MOVAL,-1
JMPSHORTDONE
YESA:
MOVAL,0
DONE:
HLT
8、补全编程,利用jcxz指令实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中
assumecs:
code
codesegment
start:
movax,2000h
movds,ax
movbx,0
s:
movcl,[bx]
Movch,0
Jcxzok
Incbx
jmpshorts
ok:
movdx,bx
movax,4c00h
int21h
codeends
endstart
9、补全编程,利用LOOP指令实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中
assumecs:
code
codesegment
start:
movax,2000H
movds,ax
movbx,0
s:
movcl,[bx]
movch,0
Inccx
incbx
loops
ok:
decbx
Movdx,bx
movax,4c00h
int21h
codeends
endstart
编写程序题:
1、A、B、C均为8位有符号数,求它们的和,送入TOTAL。
Assumecs:
code,ds:
data
Datasegment
Totaldw0
Dataends
Codesegment
Start:
Movax,data
Movds,ax
Moval,0Ah;取A
Cbw;扩展为16位
Movdx,ax;第一个数转存入dx
Moval,0Bh;取B
Cbw