汇编语言测试题.docx
《汇编语言测试题.docx》由会员分享,可在线阅读,更多相关《汇编语言测试题.docx(42页珍藏版)》请在冰豆网上搜索。
![汇编语言测试题.docx](https://file1.bdocx.com/fileroot1/2023-8/14/dfe230c1-26ab-4a82-b8f9-54c99cb386a1/dfe230c1-26ab-4a82-b8f9-54c99cb386a11.gif)
汇编语言测试题
汇编语言自测题1
一•选择题
I.指令ADDCX55H[BP]的源操作数的寻址方式是(D)。
(A)寄存器寻址(B)直接寻址(C)寄存器间接寻址(D)寄存器相对寻址
2.设(SS)=3300H(SP)=1140H在堆栈中压入5个字数据后,又弹出两个字数据,则(SP)=(A)。
(A)113AH(B)114AH(C)1144H(D)1140H
3.若SI=0053H,BP=0054H,执行SUBS]BP后,贝U(C)
(A)CF=QOF=0(B)CF=0OF=1(C)CF=1OF=0(D)CF=1OF=1
[解析]只有两个正数相加变成负数或两个负数相加变成正数才会产生溢出(运算结果超出了
所能表达的范围,只针对有符号数),两个数想减不会产生溢出,故题中OF=0b
4.已知(BP)=0100H,(DS)=7000H,(SS)=8000H,(80100H)=24H,(80101H)=5AH,(70100H)=01H,(70101H)=02H,指令MOVBX,[BP]执行后,(BX)=(D)。
(A)0102H(B)0201H(C)245AH(D)5A24H
5.实模式下80486CPU对指令的寻址由(A)决定。
(A)CSIP(B)DSIP(C)SSIP(D)ESIP
6.使用80486汇编语言的伪操作指令定义:
VALDB2DUP(12,3DUP(3),2DUP(1,0))则在VAL存储区内前十个字节单元的数据是(D)。
(A)1,2,3,3,2,1,0,1,2,3(B)1,2,3,3,3,3,2,1,0,1
(C)2,1,2,3,3,2,1,0(D)1,2,3,3,3,1,0,1,0,1
7.下列四条指令都可用来使累加器清"0",但其中不能清"进位"位的是(C)o
(A)XORALAL(B)ANDAL0(C)MOVAL,0(D)SUBALAL
&若(AX)=96H,(BX)=65H,依次执行ADDAX,BX指令和DAA指令后,(AL)=(C。
(A)0FBH(B)01H(C)61H(D)0BH
9.下列能使CF标志置1的指令是(C)o
(A)CMC(B)CLC(C)STC(D)CLD
10.MOVAX,[BP+SI隐含使用的段寄存器是(D)o
(A)CS(B)DS(C)ES(D)SS
II.设AL=7FH,要使AL=80H,应使用下列哪一条指令(D)。
(A)ANDAL,80H(B)ORAL80H(C)XORAL80H(D)NOTAL
12.在执行十进制调整指令DAA,DAS之前必须将结果存放于(C)中。
(A)AX(B)AH(C)AL(D)BL
(A)MOV(B)PUSH(C)ADD(D)XCHG
14.唯一能对应存储单元的地址是(A)。
(A)物理地址(B)端口地址(C)有效地址(D)逻辑地址
15.计算机能直接执行的语言是(A)。
(A)机器语言(B)汇编语言(C)高级语言(D)程序设计语言
16.需采用先进后出原则操作的存储区是(D)。
(A)寄存器组(B)地址缓冲器(C)数据寄存器(D)堆栈区
17.寄存器SP用于对(B)的操作。
(A)空闲单元(B)堆栈单元(C)数据单元(D)指令单元
18.若(BX)=1000H,(DS)=2000H,(21000H)=12H,(21001H)=34H,执行LEASI,[BX]指令后,
SI寄存器的内容是(C)o
(A)1234H(B)3412H(C)1000H(D)0010H
19.若(AL)=80H,执行NEGAL指令后,CF和OF标志位的状态分别为(AC)。
(A)0和0(B)0和1(C)1和0(D)1和1
20.若要完成(AX)*7/2运算,则在下列四条指令之后添加(C脂令。
MOVBX,AX
MOVCL,3
SALAXCL
SUBAXBX
()
(A)RORAX1(B)SALAX1(C)SARAX1(D)DIVAX,2
21.在保护模式下,代码段的段基址存在于(D)中。
(A)段选择符(B)指令指针寄存器(C)段寄存器(D)段描述符
22.查表指令XLAT规定,待查表的首址应存入(D)中。
(A)BP(B)SI(C)DI(D)BX
23.将要取的某一条指令的偏移地址由(D)提供。
(A)SI(B)BP(C)SP(D)IP
24.寄存器间接寻址方式中,操作数在(C)中。
(A)通用寄存器(B)堆栈(C)主存单元(D)段寄存器
25.运算型指令的寻址和转移型指令的寻址,其不同点在于(A)o
(A)前者取操作数,后者决定程序的转移地址
(B)后者取操作数,前者决定程序的转移地址
(C)两者都是取操作数(D)两者都是决定程序的转移地址
26.JMPWORDPTR[。
是(A)。
(A)段内间接转移(B)段间间接转移(C)段内直接转移(D)段间直接转移
27.INC指令不影响(B)标志。
(A)OF(B)CF(C)SF(D)ZF
28.逻辑移位指令SHL用于(C)。
(A)带符号数乘2(B)带符号数除2(C)无符号数乘2(D)无符号数除2
29•算术移位指令SAR用于(B)。
(A)带符号数乘2(B)带符号数除2(C)无符号数乘2(D)无符号数除2
30.下列指令中,有语法错误的是(D)。
(A)MOV[SI],AX(B)INALDX
(C)XORAX1234H(D)OUT210H,AL
31.在下列伪指令中定义字变量的是(B)。
(A)DD(B)DW(C)DQ(D)DT
32.下列指令中,能使AL的内容固定为偶数的是(C)
(A)ADDAL,01H(B)ORAL0FEH(C)ANDAL0FEH(D)XORAL0FEH
33.改变(C寄存器的值,可改变堆栈中栈顶元素的位置。
(A)BP(B)IP(C)SP(D)BX
34.加减类运算指令对标志位的状态(A)o
(A)有影响(B)部分影响(C)无影响(D)任意
35.当AH=(C时,执行INT21H指令可在屏幕上显示一组字符。
(A)01H(B)02H(C)09H(D)0AH
36.已知VARDW1,2,$+2,5,6若汇编时VAR分配的偏移地址是2010H,则汇编后2014H单元的内容是(D)o
(A)6H(B)14H(C)5H(D)16H
37.若某数据段位于存储区68000H〜7FFFFH则该数据段的段基址是(D)。
(A)68000H(B)7FFFFH(C)6000H(D)6800H
38.SP的作用是用来指示(A)o
(A)栈顶元素的有效地址(B)下一条要执行指令的地址
(C)下一条要取的指令的地址(D)栈底元素的有效地址
OF、SF、CF、ZF标志
o即指令性语句
DX的值为(D)o
(A)通用寄存器(B)段寄存器(C)存储器(D)通用寄存器和存储器
40.转移类指令对标志位的状态(C)。
(A)有影响(B)部分影响(C)无影响(D)随意
41.欲从存储单元取某操作数,可采用(D)。
(A)寄存器寻址、寄存器间接寻址(B)立即寻址、直接寻址
(C)立即寻址、寄存器间接寻址(D)寄存器间接寻址、直接寻址
42.在指令MOVAX,0执行后,CPU状态标志位ZF的取值(D)。
(A)为0(B)为1(C)不确定(D)不改变
43.已知AL=10010111H,BL=00010101H,执行ADDAL,BL指令后,的状态为(B)。
(A)1、0、1、1(B)1、1、0、0(C)0、0、1、1(D)0、1、0、1
44.下列指令中,错误的是(C)。
(A)MOVBX,OFFSETBUF(B)LEASIBUF
(C)LEADIOFFSETBUF(D)MOVBP,SEGBUF
45.输入/输出指令对标志位的状态(C)。
(A)有影响(B)部分影响(C)无影响(D)任意
46.下列描述正确的是(B)。
(A)汇编语言仅由指令性语句组成
(B)汇编语言包括指令性语句和伪指令语句
(C)指令性语句和伪指令语句的格式是完全相同的
(D)指令性语句和伪指令语句需经汇编程序翻译成机器代码后才能执行解析:
我们写的指令,由“编译软件”翻译成机器码的,称为指令语句;有一些是写给“编译软件”看的,不翻译成机器码,这样的就是“伪指令”可以翻译成机器代码,而伪指令不能翻译成机器代码。
47.下列指令中不属于逻辑运算指令的是(B)。
(A)XOR(B)CWD(C)NOT(D)OR
48.假定DX=10111001B,CL=3,CF=1,则执行指令SHLDXCL后,
(A)005CH(B)0017H(C)1700H(D)05C8H
49.下列指令中不会改变指令指针寄存器内容的是(A)o
(A)MOV(B)JMP(C)CALL(D)RET
50.伪指令ENDP告诉汇编程序(B)o
(A)宏定义结束(B)过程定义结束
9号(AH=9)功能,显示一个字符串,
(B)DS:
DX=字符串末地址
(D)CS:
DX=字符串末地址52.在下列伪指令中定义双字变量的是(C)o
(A)DB(B)DW(C)DD(D)DT
二、判断题
I.指令MOVAX,[BX]的源操作数是寄存器寻址方式。
(X)
2.对堆栈区的操作必须遵循先进先出的原则。
(X)
3.比较两个带符号数的大小,可根据CF标志来判断。
(X)
4.逻辑操作符AND,OR,XOR和NOT,只能用于数字表达式。
(V)
5•不能给段寄存器赋立即数。
(V)
6.OF位可用来表示有符号数的溢出。
(V)
7.无条件转移指令只能用于段内直接转移。
(X)
6MOVAX,[BP]的源操作数的物理地址为16*(DS)+(BP)°(X)
9.指令MOVDI,OFFSET[BX][S是正确的。
(X)
解析:
改为leadi,[bx][si]就正确了。
原因:
(相对)基址变址寻址方式形成的值在汇编指令时还是未知的,而offset在汇编时要求确定的值,所以上句是错的,而lea是指令,到运行时
才会起作用。
offset属于在汇编时进行运算的伪操作符,lea属于计算机指令,不需要在汇编
时计算。
10.指令MOVCS,BX是非法的。
(V)
II.指令NOTAX,BX是合法的。
(X)
12.MOV[BX][BP],AX是对的。
(X)
13.80486中对堆栈单元的存取操作是以字节为单位的。
(X)
14.JMP指令要影响标志位。
(X)
15.INC指令影响所有状态标志。
(X)
16.欲交换寄存器SI,DI的内容,可用指令XCHGSJDI实现。
(V)
17.CPU中的程序计数器IP中存放的是指令的逻辑地址。
(V)
18.两个符号相同的数相减不会产生溢出。
(V)
19.汇编程序就是汇编语言程序。
(X)
20.相对寻址中的位移量只能用16位表示。
(X)
21.CLD指令是MOVSB指令的使用条件之一。
(X)
22.段寄存器间不能直接进行数据传送。
(V)
23.要把变量BUFF的有效地址送给BX,可用MOVBX,BUFF指令。
(X)
24.当对堆栈段的数据进行操作时,其操作数的有效地址可保存在BP中。
(V)
25.TEST指令属于逻辑运算指令。
(V)
26.CS和IP都不能作传送指令的目的操作数。
(V)
三、填空题
1.若SS=5310HSP=0E30H其物理地址为(53F30H)。
2.若CH=07H,CL=08H,执行指令ADDCH,CL后,AF=(0),CF=(0,OF=(0),PF=
(1)
3•指令由(操作码)和(操作数)两个字段构成。
4.条件转移指令JNE的测试条件是(ZF=O则转移)。
5•若用指针(BP)访问存储器,则数据包含在(SS)段中。
6.若AX=1234H,SP=1000H指令PUSHAX执行后AX=(1234H),SP=(0FFEH)。
7.指令采用(立即)寻址方式时操作数是在代码段中。
解析:
立即寻址时,操作数在指令中,而指令在代码段中。
四、阅读程序
1.程序中数据定义如下:
DATA1DW?
DATA2DB32DUP⑺
DATA3DD?
COUNTEQU$-DATA1
此时COUNT的值是(38)o
2.分析下列程序段,说出其功能。
MOVAX,1000H
MOVDS,AX
MOVES,AX
MOVSI,0100H
MOVDI,0200H
MOVCX,50D
REPMOVSB
解:
从原串1000H:
0100H将50个字节的数据传送给目的串1000H:
0200H。
答案:
将以10100H起始的50个单元的内容传送至以10200H起始的50个单元中
3.写出下列程序段的功能
MOVBX,2000H
MOVDS,BX
XORALAL
MOVCX,100
AGAIN:
MOV[BX],AL
INCBX
LOOPAGAIN
解:
将100个0放到内存地址为22000H~22100H的存储区域里。
答案:
将数据段中以2000H起始的100个单元中的内容清零
4•写出下列程序段的功能
LEASIBUFFER
LEADIARRAY
MOVCX,100
XORBLBL
LP:
CMP[SI],01H
JNZLP1
INCBL
LP1:
INCSI
LOOPLP
MOV[DI],BL
解:
计算数组单元BUFFER里数据为01H的个数,并将结果存到ARRAY单元里。
答案:
统计以BUFFER为首址的100个单元中数字为1的个数存入ARRAY单元
5•写出下列程序段的功能
MOVCX16
MOVAX,N
MOVBH,0
LP0:
SHLAX1
JCLP
INCBH
LP:
LOOPLP0
MOVSUM,BH
解:
统计N字中0的个数
6•写出下列程序段的功能
MOVAL,N
ANDN,0FH
MOVBL,N
SHRAL4
MOVBH,AL
解:
将N的内容拆为两部分分别存入BH,BL中
7.执行下列程序段后,AX=?
MOVAX,0702H
MOVBH,09H
AAD
DIVBH
解:
AX=0008H
&下面程序段执行后AL=?
ABCDW2152H,3416H,5731H,4684H
MOVBX,OFFSETABC
MOVAL,3
XLAT
解:
AL=34H
9.执行下面的程序段后AX=?
MOVCX5
MOVAX,50
NEXT:
SUBAXCX
LOOPNEXT
HLT
解:
AX=23H
10.执行下面的程序段后AX=?
TABDW1,2,3,4,5,6
ENTRYEQU6
MOVBX,OFFSETTAB
ADDBXENTRY
MOVAX,[BX]
解:
AX=0004H
11.执行下面程序段后AX=
ARRAYDW12,3,4,5,6,7,8,9,10
COUNTEQU$-ARRAY
XORAXAX
MOVCX,COUNT
MOVSI,OFFSETARRAY
NEXT:
ADDAX,[SI]
INCSI
LOOPNEXT
解:
AX=0055H
12.写出下列程序段的功能
MOVAH,1
INT21H
ANDAL,0FH
MOVBL,AL
MOVAH,1
INT21H
SHLAL4
ANDAL,BL
解:
将从键盘接受到的两个字符拼在一起
13.执行下列程序段后
NDB07H
XORBHBH
MOVBL,N
RCLBL1
ADDBH,BL
XORBH0FFH
HLT
寄存器BH的值是(),寄存器BL的值是()。
解:
BH=0FFHBL=0EH
14.分析下列程序段
MOVAL,N
XORAHAH
MOVCL,4
DIVCL
当N=3CH时,程序执行完后AX=(000FH)
15.程序段如下:
CLC
MOVAL,6
MOVBL,9
ADDAL,BL
MOVBL,AL
DAA
执行上面程序段后,AL=(15H),AF=
(1),BL=(0FH)
16.执行下列指令后
TABLEDB19H55H,9CH
LEABXTABLE
MOVAL,[BX]
XORAL89H
MOV[BX],AL
寄存器AL的值是(90H)
17.分析下列程序段,说明该程序段执行何种功能。
MOVCX,10
MOVDL,30H
NEXT1:
MOVAH,2
INT21H
INCDL
LOOPNEXT1
解:
连续显示0到9数字到屏幕上。
答案:
向屏幕上依次输出0,1,…,9
18.执行下列指令后
MOVAX,1245H
MOVBX,5689H
ADDAL,BL
MOVCL,AL
MOVAL,AH
ADCAL,BH
DAA
寄存器AL的值是(68H),寄存器CL的值是(0CEH)
19.分析下列程序段:
MOVAL,N
XORAH,AH
MOVBL,16
DIVBL
当N=57H时,程序执行完后AX=(0705H)
20.在下面程序的括号中分别填入如下指令:
1LOOPXH②LOOPNEXH③LOOPEXH
问在这三种情况下,当程序执行完后,AX、BX、CX、DX四个寄存器中的内容分别是什么?
STARTMOVAX,04
MOVBX,02
MOVCX,03
MOVDX,05
XH:
INCAX
ADDBX,AX
SHRDX1
()
HLT
解:
①AX=0007H,BX=0014H,CX=0,DX=0
2AX=0007H,BX=0014H,CX=0,DX=0
3AX=0005H,BX=0007H,CX=0002H,DX=0002H
21•阅读程序,请说出该程序的功能是什么?
MOVAX,DATA
MOVDS,AX
LEASIBUFFER
XORBLBL
MOVCX,100
AGAIN:
MOVAL,[SI]
TESTAL1
JNZNEXT
INCBL
NEXT:
INCSI
LOOPAGAIN
HLT
解:
统计以BUFFER为起始地址的100个单元中偶数的个数。
22.从键盘上接收一字符,若是“Y”转YES是“N”转NO,否则继续等待,到输入“Y”
或“N”为止。
程序段如下:
MOVAL,N
ANDAL,OFH
ADDAL,90H
DAA
ADCAL40H
MOVRUT,AL
HLT
问:
①若N=5,下列程序执行后AL=?
②该程序段的功能是什么?
解:
①35H②将十六进制数转换为ASCII码
23.执行下列程序段后:
DATASEGMENT
DT1LABLEWORD
DT2DB12H,34H
DATAENDS
MOVAL,DT2
MOVDX,DT1
寄存器AL的值是①,寄存器DX的值是②。
解:
①12H②3412H
24.读下列程序,请说出该程序的功能是什么?
DATASEGMENT
SUMDW0
DATAENDS
STACKSEGMENT
DB200DUP(?
)
STACKENDS
CODESEGMENT
ASSUMEDSDATASS:
STACKCSCODE
STARTMOVAX,DATA
MOVDS,AX
MOVCX,50
MOVAX,0
MOVBX,1
NEXT:
ADDAX,BX
INCBX
INCBX
DECCX
JNENEXT
MOVSUM,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
解:
求从1开始的50个奇数之和。
25.设伪指令定义如下,请画出内存分配示意图。
BUFDB
DW‘AB'
DW'C'
DW1234H
26.执行下列程序段后:
DATASEGMENT
DT1DW8A9BH
DT2DB7CH6DH
DATAENDS
MOVAX,DT1
MOVBX,OFFSETDT1
0002H。
MOVSI,OFFSETDT2
寄存器BX的值是0000H,寄存器SI的值是
27.执行下列指令后:
TABLEDB10H33H,41H
MOVBX,OFFSETTABLE
MOVAL,[BX]
XORAL80H
MOV[BX],AL
寄存器AL的值是多少?
解:
(AL)=90H
28.执行下列程序段后:
BUFDB01H
XORALAL
MOVAL,BUF
MOVBL,AL
SALAL1
ADDAL,BL
XORAL0FFH
HLT
寄存器AL的值是多少?
寄存器BL的值是多少?
解:
①AL=0FCH②BL=1
五.程序填空
1.下列程序是在键盘上输入120个字符,然后将输入反序后显示在屏幕上。
请将程序填写
完整。
;通过将输入的字符一个个压入堆栈中,显示时从栈顶一个个弹出字符显示的方法
STACK1SEGMENT
STPDW120DUP(?
)
STACK1ENDS
CODESEGMENT
ASSUMECSCODESS:
STACK1
STARTMOVAX,STACK1
MOVSSAX
MOVSP,SIZESTP
MOVCX120
LOOP1:
MOVAH,