汇编语言参考复习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
填空题
1.在寻址方式中,可作基址寄存器的有__________、_________。 BX,BP
2.累加器专用传送指令IN间接访问I/O端口,端口号地址范围为__________。0-65535
3.指令MOV AX,[DI-4]中源操作数的寻址方式是______________。寄存器相对寻址方式(相对寄存器寻址方式)
选择题
1.8086中8位算术运算指令执行后,结果为10010001B,则ZF和SF标志位的值为______。
A)ZF=0 SF=1 B)ZF=0 SF=0 C)ZF=1 SF=1 D)ZF=0 SF不确定
2.可以充当端口指针的寄存器是___________。
A) BX B) DI C) SI D) DX
3.在指令MOV ES:[SI],AX 中,目的操作数为_______寻址方式。
A) 寄存器 B) 直接 C) 基址变址 D) 寄存器间接
简答题
1.写出6种常用的寻址方式。
立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址
2.在无超越说明时,通用数据读写、目的数据串、源数据串、堆栈操作和取指令操作分别自动选择哪些段寄存器搭配产生物理地址?
通用数据读写自动选择数据段寄存器(DS)
目的数据串自动选择附加数据段寄存器(ES)
源数据串自动选择数据段寄存器(DS)
堆栈操作自动选择堆栈段寄存器(SS)
取指令操作自动选择代码段寄存器(CS)
3.什么叫寻址方式?常用的寻址方式有哪些?
指令中获取操作数或操作数地址的方法。
常用的寻址方式有:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等。
4.IBM-PC有哪些寄存器可用来指示存储器的地址?
SP、BP、SI、DI、IP、BX、ES、DS、CS、SS
填空题
1.已知(BX)=2000H,(DI)=3000H,(SS)=4000H,(DS)=6000H,(SS)=5000H,66000H单元的内容为28H,则指令MOV AL,[BX+DI+1000H]的执行结果是_______________。(AL)=28H (28H送到AL寄存器)
2.指令“MOV AX,BX”源操作数的寻址方式为_______________。寄存器寻址
3.执行PUSH AX指令后,SP自动_______________。 减2
4.若(DS)=2000H,(ES)=2100H,(CS)=1500H,(SI)=00A0H,(BX)=0100H, (BP)=0010H,数据量COUNT的偏移地址为0050H,则执行指令LEA AX,[BX][SI] 之后,(AX)=___________H,源操作数是____________寻址方式。01A0H,基址变址寻址
5.指令LEA DX,BUFFER 的功能是将_______________传送给DX。 变量BUFFER的段内偏移地址
6.若(CS)=1000H,(DS)=2000H,(SS)=3000H ,(ES)=4000H,(SI)=1000H,(BP)=2000H,则指令MOV AX,[BP]的功能是将_________单元的内容传送给AL,将_________单元的内容传送给AH(填写物理地址)。 32000H单元的内容,32001H单元的内容
7.指令MOV DX,OFFSET BUFFER 的功能是_______________。将变量BUFFER
的段内偏移地址送到DX寄存器中
选择题
1.已知(DS)=1000H,(BP)=0010H,(BX=0100H,(DI)=0100H,(010110H)=ABH,(010111H)=BAH,执行指令LEA CX,[BP][DI]后,(BX)=_________。
A) ABBAH B) 0100H C) BAABH D) 0110H
2.用MOV指令将十进制数89以压缩BCD码格式送入AX,正确使用的指令是_________。
A)MOV AX,0089 B)MOV AX,0809 C)MOV AX,0089H D)MOV AX,0809H
3.8086执行POP AX指令时,正确的操作是___________________。
A)AX<--[SP+1][SP],SP<--SP+2 B)AX<--[SP+1][SP],SP<--SP-2
C)SP<--SP+2,AX<--[SP+1][SP] D)SP<--SP-2,AX<--[SP+1][SP]
4.在执行MUL BL指令执行后,CF=OF=1,(AL)=82H,则表示________。
A)(BL)>0 B)(AH)=FFH C)被乘数小于零 D)乘积大于255
5.若(AL)=0FH,(BL)=04H,则执行CMP AL,BL后,AL,BL的内容__________。
A)0FH,04H B)0BH,04H C)0FH,0BH D)04H,0FH
6.若已知(SP)=2000H,(AX)=0020H,则执行指令,PUSH AX 后,(SP)和((SS):(SP))的值分别为_________。
A)2002H,00H B)2000H,20H C)1FFFH,00H D)1FFEH,20H
7.下列指令中错误的是________。
A) JMP DWORD PTR[BX] B) PUSH AH C) REP MOVSW D) CMP AX,[BX][SI]
8.下列指令中,有语法错误的是__________________。
A) MOV [SI],[DI] B) IN AL,DX
C) JMP WORD PTR[BX+8] D) PUSH WORD PTR 20[BX+SI-2]
9.若累加器AL的内容为13H,执行NEG AL指令后,AL内容为________。
A) OOH B) 13H C) 0ECH D) 0EDH
10.在下面80x86指令中,合法的是 ( )
A) ADD[BX],01H B) MOV BX,01H C) SHL CL,AX D) OUT 258H,AL
11.已知(DS)=1000H,(BP)=0010H,(BX=0100H,(DI)=0100H,(010110H)=ABH,(010111H)=BAH,执行指令LEA BX,[BP][DI]后,(BX)=_________。
A) ABBAH B) 0100H C) BAABH D) 0110H
12.下面的指令不合法的是________。
A) INT 21H B) ADC AX,[SI] C) IN AX,03H D) PUSH AL
13.指令IN AL,DX对I/O端口的寻址范围是____________。
A) 0—255 B) 0—65535 C) 0—1023 D) 0—32767
14.下列四条指令中,有几条指令需要使用DX寄存器_________?
MUL BX DIV BL IN AX,20H OUT 20H,AL
A) 1条 B) 2条 C) 3条 D) 4条
15.假设VAR为变量,MOV BX,OFFSET VAR的寻址方式是__________。
A) 直接寻址 B) 变量名寻址 C) 立即寻址 D)存储器寻址
16.下列指令中操作数在代码段中的是__________。
A) CMP AL,BL B) ADD AH,BL C) INC DS:[25H] D) MOV AL,25H
17.已知(AX)=1000H,(BX)=2000H,执行指令MOV AX ,BX后,(AX)=_______。
A) 0000H B) 1000H C) 2000H D
) 3000H
问答题
1.如BUFFER为数据段中0032单元的符号地址其中存放的内容为2345H,试问以下两条指令有什么区别?指令执行完成后AX寄存器的内容是什么?
(1)MOV AX,BUFFER (2)LEA AX,BUFFER
第一条指令是将BUFFER字单元的内容送到AX寄存器,而第二条指令是将BUFFER的段内偏移地址送到AX寄存器。 (1)(AX)=2345H (2)(AX)=0032H
2.设(DS)=1000H,(AX)=1C5AH,(BX)=2400H,(SI)=1354H,(13774H)=30H,(13775H)=20H,(13754H)=40H,(13755H)=10H 指令在此环境下执行,在各空中填入相应的执行结果。
SUB AX,20H[BX][SI]
(AX)=_____,SF=______,ZF=______,CF=_____,OF=______
(AX)=0FC2AH,SF=1, ZF=0, CF=1,OF=0
3.指出以下三条指令的区别(NUM为数据段一个变量名)。
(1)MOV SI,NUM
(2)LEA SI,NUM
(3)MOV SI,OFFSET NUM
(1)指令执行后SI取得的是内存变量NUM的值。
(2)指令执行后SI取得的是内存变量NUM的偏移地址。
(3)同(2)
填空题
程序控制类指令的功能是_______________。 改变程序执行的顺序
8086的I/O指令有_______________和_______________两种寻址方式。 直接寻址,寄存器间接寻址
执行指令段: AGAIN:MOV ES:(DI), AL
INC DI
LOOP AGAIN
完成的操作,与其等效的指令组:_______________、_______________。
CLD,REP STOSB
设当前的(SP)=0100H,执行PUSH AX指令后,(SP)=____ ______H,若改为执行INT 21H指令后,则(SP)=_____ ______H。 00FE,00FA
伪指令VR1 DB 2 DUP(?,3 DUP(1,2),5)在存贮器中被分配了_________字节。答案: 16个
若当前(SP)=6000H,CPU执行一条IRET指令后,(SP)=___ _____H;而当CPU执行一条段内返回指令RET 6后,(SP)=____ ______H。 6006H,6008H
伪指令X DB 4 DUP (6,2 DUP(6,8)); Y DW 6800H; 设X的偏移地址为2000H,则Y的偏移地址为___________H,若执行指令MOV BL,BYTE PTR Y后,则(BL)=________。 2014H,00
条件转移指令转移的范围是_______________。 -128——127字节
定义段结束的伪指令是__________;定义汇编程序结束的伪指令是_________。ENDS,END
汇编结束伪指令是_______________。END
若(AL)=35H,执行ROL AL,1 后,(AL)=_ _____。 6AH
选择题
下面指令序列执行后完成的运算,正确的算术表达式应是________________。
MOV AL,BYTE PTR X
SHL AL,1
DEC AL
MOV BYTE PTR Y,AL
A) Y=2X+1 B) X=2Y+1 C) Y=2X-1 D) X=2Y-1
完成将BX清零,并使标志位CF清零,下面错误的指令是_________。
A)SUB BX,BX B)XOR BX,BX C)MOV BX,00H D)AND BX,00H
对于8086的条件转移指令,其转移范围为___________。
A)只能是段内短程 B)只能是段内近程
C)只能是段间远程 D)没
有限制
在子程序的最后一定要有一条__________指令。
A) HLT B) RET C) IRET D) POP
分析下面指令序列执行后的正确结果是________________。
MOV BX,0FFFCH
MOV CL,2
SAR BX,CL
A) 3FFFH B) 0FFFFFH C) 0FFFCH D) 0FFFF5H
执行下面的程序后,AL中的内容是__________。
BUF DW 1234H,5678H,0001H
MOV BX,OFFSET BUF
MOV AL,2
XLAT
A) 12H B) 34H C) 56H D) 78H
问答题
在0624H单元内有一条二字节指令JNE OBJ,如其中位移量分别为(1)27H (2)6BH (3)0C6H 试问:转向地址OBJ的值是多少?
取出JNE OBJ指令后,(IP)=0626H,OBJ的值是:(IP)+D->IP
0626H+27H=064DH 0626H+6BH=0691H 0626H-3AH=05ECH
哪些指令能改变CS的内容?
JMP FAR,JMP DWORD,CALL FAR,CALL DWORD,RET,IRET,INT
中断服务程序结束时,用RET指令代替IRET指令能否返回主程序?这样做存在什么问题?
RET应该可以使中断服务程序返回主程序,但因为RETF是子程序返回指令,它只从堆栈中恢复CS和IP,而不能使状态字PSW得以恢复,所以不能使断点完全恢复,对源程序的继续执行造成不良影响。
在IBM PC中有专用的输入输出指令,请问I/O端口的地址范围是多少?地址范围的不同,应采用的指令格式不同,请写出在具体的范围和采用的指令格式。
I/O端口的地址范围是0000H--0FFFFH (64K)
当地址范围在0000H-00FFH 时可以使用直接端口地址访问和间接访问,格式如下(以8位为例):
IN AL ,PORT IN AL , DX
OUT PORT ,AL OUT DX,AL
而当地址范围在大于00FFH 时只能使用间接访问指令,格式如下(以8位为例):
IN AL,DX OUT DX,AL
指令判断题
MOV DS,1000H ( 错 )
LEA BX,DATA ;变量名 ( 对 )
执行下列指令可以将其00H送到端口地址为2F8H的外设上:( 对 )
MOV AL,00H
MOV DX,2F8H
OUT DX,AL
ADD AL,DAT1[BX] ( 对 )
MOV WORD PTR [BX],1000H ( 对 )
IN AL,N ;(N>255) ( 错 )
MOV [BX][DI],10 ( 错 )
MOV DS,AX ( 对 )
MOV CS,AX ( 错 )
执行下列指令可以将00H送到端口地址为1A0H的外设上。
MOV AL,00H
MOV 1A0H ,AL ( 错 )
MOV [BX],[1000] ( 错 )
MOV ES,3F00H ( 错 )
PUSH AL ( 错 )
SHL AX,2 ( 错 )
IN AL,DX ( 对 )
MOV [BX],[SI] ( 错 )
JMP BX (
对 )
MOV DATA1,DATA2 ;两个均为变量名 ( 错 )
XCHG CS,AX ( 错 )
MOV BYTE PTR [BX],1000H ( 错 )
XCHG BX,IP ( 错 )
PUSH CS ( 对 )
PUSH SS ( 对 )
POP CS ( 错 )
POP ES ( 对 )
IN BX,DX ( 错 )
MOV AL,[BX+10H] ( 对 )
1. 在Intel80x86系统中,若一个32位(4字节)的存储字11223344H的地址为10000H,则10000H的字节单元内容为_______________,10003H的字节单元内容为_______________。
2.试说明为什么有时候必须使用PTR属性操作符?
3.什么是汇编语言,什么是汇编?
4.若(AX)=9C5AH,(BX)=9754H,执行下列指令序列后,程序转向何处执行。
ADD AX,BX JNC L3
JNO L1 JNO L4
JNC L2 JMP L5
SUB AX,BX
5.已知在DAT至DAT+2单元中分别有八位无符号数a、b和c,试编写一个程序段计算表达式(a*b+c)/a ,商和余数分别存入RES和RES+1单元。
6.在数据区从BLOCK开始有若干个非0字型带符号数,并以0结尾,编程统计其中共有多少个数,其中正数有多少个,负数有多少个,分别存放在ALL,PLUS,MINUS三个字单元中。
7.编写一个完整的8086汇编语言程序,从附加段中首地址为ADR1(变量名)连续存放的100个字型无符号整数中找出最大数,并将此数及其偏移地址分别放入变量MAX和MAXM中。
8.编写一汇编语言程序,实现将数据段中首地址为1000H(偏移地址)的100个连续存放的字节型数据搬移至该段内首地址为1050H(偏移地址)的连续的100个内存单元中。
9.从100个带符号数中寻找最大值,结果放在MAX单元,只要写出实现功能的程序段即可。
10.阅读下面一段程序,写出该程序执行后AX寄存器中的内容。
MOV AX,1234H
MOV CL,4
ROL AX,CL
DEC AX
MOV CX,4
MUL CX
(AX)=________
一、填空题
1. 标号和变量都是存贮单元的符号地址,但其内容不同,标号是_______________的符号地址,而变量是_______________的符号地址。
2. 设有一程序定义如下:
ORG 0024H
AR1 DW 4,5,$+4
…
MOV AX,AR1+4
执行以上指令后,AX中的内容正确的是_______________。
A) 0028H B) 0032H C) 002AH D) 002CH
2. 下面表示段定义结束的命令是__________。
A) END B) ENDP C) ENDS D) ENDM
3.现用数据定义伪指令定义数据:BUF DB 4 DUP(0,2 DUP(1,0));问定义后,存储单元中有数据0100H的字单元个数是____________。
A) 4 B) 3
C) 8 D) 12
4.下列伪指令中定义字节变量的是________。
A) DB B) DW C) DD D) DT
5.变量的类型属性如下,下面错误的类型是__________。
A) 字节型 B) 字符型 C) 字型 D) 双字型
6.一个程序中,有下列伪指令:
ARY DW 35 DUP(3,4,4 DUP(?,1,0))
LEN DW $ - ARY
问LEN单元存储的值是多少?
7. 有一个程序片段如下
MSG DW 3 DUP(?, 2 DUP (5,4),3)
MEN DW $-MSG
┇
┇
MOV AX, SEG MEN
MOV DS, AX
MOV AX, MEN
问AX的值最后是多少?
二、问答题
1.子程序调用的操作过程包含哪几个步骤?
2.转子程序指令的功能是什么?
3.DOS系统功能调用的使用方法?
4.简述8086汇编语言中,指令语句和伪指令语句的区别和作用。
5.什么是变量,变量有哪些属性,如何使用这些属性?
三、程序设计题
1. 从BUFF单元起有一个字符串(长度小于65535),以'*'结束,编写一个完整程序求该字符串长度存入LENT单元,并统计字符串中含有大写英文字符的个数并存入COUNT单元。要求源程序具备必要的伪指令和段说明。
2.已知有X、Y、Z三个字变量,存放无符号整数,请编一个完整的程序实现公式Z=(X+Y)/(X-Y+600)(不考虑溢出情况)。
3.编写一个汇编语言程序,要求对键盘输入的小写字母用对应的大写字母显示出来,非小写字母不显示。如输入'abd'则应显示'ABD',输入字符以回车键结束。
4.有一带符号8位数X存于DAT单元.编一个程序段判断该数,若x小于0则将0FFH送MARK单元;若X等于0则将MARK+1单元置0FFH;若X大于0则置MARK+2单元为0FFH。
5.写出对存放在DX和AX中的双字长数求补的指令序列。
6.AX寄存器中存放着4位十六进制数。试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCII码,并依次存放到RESULT数组的4个字节中去,要求用调用子程序的方法实现。
7.通过键盘输入一串不长于100个字符的字符串,以回车键为结束符,统计该字符串中的小写字母数存放于CX寄存器中。
8.用8086/8088汇编语言编程,实现从键盘输入一个不多于60个元素的无序8位无符号数数组,输入结束符为非数字字符。然后对该数组用气泡排序法排序,最后用折半查找法在该数组中查找元素66,若查找到,显示'FOUND!',若找不到,则显示'NOT FOUND!'
9.已知(AX)=4BD5H,统计AX中1的个数和0的个数,并分别放在BL和DL中。编写程序段实现该功能。
10.从00AF0内存单元开始的100个8位带符号数中寻找最大、最小值,结果放在MAX、MIN中,画出程序流程图并编程实现。
试编制一源程序,统计DA1字单元中含1的个数,如统计的个数为奇数,
则将进位位置1,否则进位位清0
求1+2+3+。。。。。。N之和
1.编写一个程序,将变量ABC中的16位无符号数,用"除十取余"的方法转换成十进制数,要求结果用压缩BCD码保存在RESULT单元中。
2.将一个16位二进制数转换为非压缩的BCD码,并将结果显示出来(16位二进制数在0~65535之间)。
3.从DATA1地址起有50个字节的带符号数,求其平均值并将结果存于AV单元,求出正数和负数之和,分别存于NP和NM字单元中。
4.设有两个等字长字节型字符串。试编写一个汇编语言程序,比较它们是否完全相同;若相同,则将字符"Y"送入AL中,否则,将字符"N"送入AL中。
5.判断STRING1和STRING2两个等长字符串是否相等,如相等在RESULT单元中置1,如不相等在RESULT单中置0,要求用串比较指令。
二、阅读理解题
1.阅读下面一段程序,写出该程序完成什么功能。
PUSH DS
POP ES
CLD
MOV SI,OFFSET SOURCE
MOV DI,OFFSET DEST
MOV CX,100
AGAIN: MOVSW
DEC CX
JNZ AGAIN
HLT
2.阅读下面一段程序,写出该程序完成什么功能。
MOV AX,1000H
MOV DS,AX
MOV SI,2000H
MOV CX,100
MOV AL,[SI]
LP: CMP AL,[SI+1]
JGE NEXT
MOV AL,[SI+1]
NEXT:INC SI
LOOP LP
MOV [2100H],AL
MOV AX,4C00H
INT 21H
3.阅读下面一段程序,写出该程序完成什么功能。
XOR DX,DX
L1: MOV AH,1
INT 21H
CMP AL,'$'
JZ BACK
CMP AL,30H
JB L1
CMP AL,39H
JA L1
AND AL,0FH
ADD DL,AL
ADC DH,0
JMP L1
BACK: HLT
4.阅读下面一段程序
MOV AX, SEG BUFFER1
MOV DS, AX
MOV SI, OFFSET BUFFER1
MOV DI, OFFSET BUFFER2
MOV CX, 10
AGAIN: MOV AX, [SI]
ADD [DI], AX
ADC [DI+2], 0
ADD SI,2
LOOP AGAIN
请问:(1)本程序实现的功能是什么?
(2)结果在哪里存放?
5. MOV CX, 10
MOV BX, 1
AND AX, 0
NEXT: ADD AX, BX
INC BX
LOOP NEXT
MOV DX, AX ;
①上述程序的功能是
②当上述指令执行完后(DX)=________H ;(CX)= H
6.阅读下面一段程序,写出该程序执行后AX寄存器中的内容。
TAB DW 10H,20H,30H,40H
ENTRY DW 3
.
.
.
LEA BX,TAB
ADD BX,ENTRY
MOV AX,[BX]
(AX)=________
7.有一个程序,目的是要在屏幕上显示
"Windows NT Workstation 3.51",但是程序有错,请指出其错误所在并指出修改方法,源程序如下
CODE SEGMENT
ASSUME CS:CODE,DS:CODE MOV DX,MSG
MAIN PROC MOV AX,9
MSG DW "Windows NT Workstation 3.51" INT 21H
START: PUSH ES RET
PUSH AX MAIN ENDS
MOV AX,CS CODE ENDP
MOV DS,AX END MAIN