注意:答案全部写在最后一张试卷纸上,要求表明题号,字迹清楚,答在试卷上不给分
一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题2分,共20分)
1.十六进制数88H,可表示成下面几种形式,请找出错误的表示( )。
(A) 无符号十进制数136
(B) 带符号十进制数-120
(C) 压缩型BCD码十进制数88
(D) 8位二进制数-8的补码表示
2.指令指针寄存器是( )。
(A) IP
(B) SP
(C) BP
(D) PSW
3.当执行指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是( )。
(A) 表示结果中含1的个数为偶数
(B) 表示结果中含1的个数为奇数
(C) 表示该数为偶数
(D) 表示结果中低八位含1的个数为偶数
4.完成将累加器AL清零,并使进位标志CF清零,下面错误的指令是( )。
(A) MOV AL,00H
(B) AND AL,00H
(C) XOR AL,AL
(D) SUB AL,AL
5.下列指令执行后总是使CF=0,OF=0的是( )。
(A) AND
(B) NEG
(C) NOT
(D) INC
6.完成同指令XCHG AX,BX相同功能的指令或指令序列是( )。
(A) MOV AX,BX
(B) MOV BX,AX
(C) PUSH AX
POP BX
(D) MOV CX,AX
MOV AX,BX
MOV BX,CX
7.设AH=0,AL=06H,BL=09H,执行指令
ADD AL,BL
AAA
之后,其结果应是( )。
(A) AH=01,AL=05
(B) AH=1 AL=15
(C) AH=0 AL=0FH
(D) AH=0 AL=05
8.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为( )。
(A) OF=1,CF=0
(B) OF=1,CF=1
(C) OF=0,CF=0
(D) OF=0,CF=1
9.在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是( )。
(A) CX=0且ZF=0
(B) CX=0且ZF=1
(C) CX=0或ZF=0
(D) CX=0或ZF=1
10.下面指令中,合理而有意义的指令是( )。
(A) REP LODSB
(B) REP SCASB
(C) REP CMPSB
(D) REP MOVSB
二、简答题(每小题4分,共12分)
1.在某子程序的开始处要保护AX,BX,CX,DX四个寄存器信息,在子程序结束时要恢复这四个寄存器信息。例如:
PUSH AX\\
PUSH BX \\ 保护现场
PUSH CX /
PUSH DX/
:
}恢复现场
试写出恢复现场时的指令序列。
2.完成下列操作,选用什么指令:
(1)将AX的内容,减去0520H,和上次运算的借位;
(2)将变量名TABL的段地址送AX;
3.D1 DB 20H DUP(?)
D2 DW D1
请写出用一条指令实现取D1的偏移地址=>SI中的三种方法。
三、程序分析题(每小题6分,共36分)
1. A DW 1234H
B DW 5678H
:
PUSH A
PUSH B
POP A
POP B
试回答:(A)上述程序段执行后(A)=___________,(B)=___________
(B)设执行前SP=200H,执行后SP=____________
2.现有下列程序段:
MOV AX,6540H
MOV DX,3210H
MOV CL,04
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,BL
试问上述程序段运行后,
(AX)=_____________
(BL)=_____________
(DX)= _____________
3.分析下面程序段,
MOV AL,200
SAR AL,1
MOV BL,AL
MOV CL,2
SAR AL,CL
ADD AL,BL
试问程序段执行后(BL)=____________(AL)=_____________
4.程序段如下:
BLK1 DB 46,84,34,-5,20,122,73
:
MOV CX,7
LEA S1,BLK1
NEXT: MOV AL,[SI]
INC SI
TEST AL,81H
LOOPZ NEXT
MOV BL,[SI]
:
请回答程序段运行后:(AL)=____________
(BL)=____________
5.STRING DB ‘ABCDEFGHIJ'
:
MOV AH,01 ;从键盘输入字符1~9
INT 21H
AND AL,0FH
DEC AL
XOR AH,AH
MOV BX,OFFSET STRING
ADD BX,AX
MOV BL,[BX]
MOV AH,02H ;显示输出
INT 21H
:
试回答:(1)上述程序段的功能是什么?
(2)如从键盘输入字符‘4',程序段有什么结果?
6. AND AL,AL
JZ BRCH1
RCR AL,1
JZ BRCH2
RCL AL,1
INC AL
JZ BRCH3
:
上述程序运行后,试回答:
(1)当(AL)=__________时,程序转向BRCH1
(2)当(AL)=__________时,程序转向BRCH2
(3)当(AL)=__________时,程序转向BRCH3
四、程序填空题(下列各小题中,一个空只能填一条指令。每小题6分,共12分)
1.设AX,BX中的数一个为正数,一个为负数,下面程序段完成将正数送到PLW单元中存放,请将程序中所缺指令语句补上。
TEST AX,8000H
___________
MOV PLW,BX
JMP DONE
K1:_____________
DONE:
2.现有下列数据段:
DATA SEGMENT
STR1 DB‘ABCDEFGHIJKL'
COUNT EQU -STR1
BUF DB COUNT DUP(0)
DATA ENDS
下面程序段是实现把STR1中所有字符逆向传送到BUF缓冲区(即STR1中第一个字符送到BUF的最后一个单元,STR1中最后一字符送到BUF的第一个单元)。试把程序中所空缺的指令填上。
MOV SI,OFFSET BUF-1
MOV DI,OFFSET BUF
MOV CX,COUNT
_________________
LOOP:MOVSB
_______________________________
LOOP LOP
五、编制程序(段)题(第1小题10分,第2小题10分,共20分)
1.编程序段x , y , z , v 均为16位带符号数,计算 ( v - ( x*y + z – 540 ) ) / x(需把试题要求的有关指令序列书写出来并写出注释著名所计算到的步骤。)
2..编程序段将首地址为A的字数组32,85,16,15, 8从小到大排序(气泡算法,多重循环)
汇编语言程序设计试卷2答案
一、 单项选择题(每小题1分,共20分)
1.(D) 2.(A) 3.(D) 4.(A) 5.(A)
6.(D) 7.(A) 8.(B) 9.(C) 10.(D)
二、 简答题(每小题4分,共12分)
1.POP DX (1分)
POP CX(1分)
POP BX(1分)
POP AX(1分)
2.(1)SBB AX,0520H(2分)
(2)MOV AX,SEG TABL(2分)
3.三种方法,对1个得1.5分,对2个得3分,全对4分。
(A) LEA SI,D1
(B) MOV SI,OFFSET D1
(C) MOV SI,D2
上述三种方法无先后顺序。
三、 程序分析题(每小题6分,共36分)
1.(A)(A)=5678H(2分)(B)=1234H(2分)
(B)SP=2000H(2分)
2.(AX)=5400H(2分)(BL)=06H(2分)(DX)=2106H(2分)
3.(BL)=0E4H(3分)(AL)=0DDH(3分)
4.(AL)=-5或0FBH(3分)
(BL)=14H或20(3分)
5.(A)程序段功能:根据从键盘输入的字符‘1’~‘9’,确定在显示器上显示STRING中第几个字符。(4分)
(B)显示器显示字符‘D’(2分)
6.(A)(AL)=0,(B)(AL)=1,(C)(AL)=-1(每个回答各2分)
四、 程序填空题(每小题6分,共12分)
1.(A)JE K1或JZ K1(3分)
(B)MOV PLW,AX (3分)
2.(A)CLD (3分)(B)SUB SI,2(3分)
或(A)STD(3分)(B)ADD DI,2(3分)
五、编制程序题(第1小题10分,第2小题10分,共20分)
1. 参考程序:
MOV AX, X
IMUL Y ; x*y →(DX,AX)
MOV CX, AX
MOV BX, DX
MOV AX, Z
CWD ;Z →(DX,AX)
ADD CX, AX
ADC BX, DX ; x*y+z →(BX,CX)
SUB CX, 540
SBB BX, 0 ; x*y+z-540
MOV AX, V
CWD ;V →(DX,AX)
SUB AX, CX
SBB DX, BX ; v-(x*y+z-540)
IDIV X ; (v-(x*y+z-540))/x→(AX)
余数→(DX)
2. 参考程序:
mov cx, 5 ;元素个数
dec cx ;比较遍数
loop1: mov di, cx ;比较次数
mov bx, 0
loop2:
mov ax, A[bx] ;相邻两数
cmp ax, A[bx+2] ; 比较
jle continue
xchg ax, A[bx+2] ;交换位置
mov A[bx], ax
continue:
add bx, 2
loop loop2
dec di
mov cx, di
loop loop1