汇编语言程序设计试题
注意:本试卷的一、二大题的答案涂在答题卡上,三、四、五、六大题的答案答在答题纸上。
并且要正确地书写站点、班级、学号及姓名。
一、单项选择题(从四个备选答案中选出一个正确的答案涂在答题卡上)(20分)
1. 指令MOV AL,100H[SI]的源操作数的寻址方式为()。
A. 基址寻址
B. 寄存器间接寻址
C.变址寻址
D.基址变址寻址
2.确定下列哪些数据在汇编语言中的表示是合法的()。
A. AL+3
B. 25D AND 36H
C. 108Q
D. 102B
3.若栈顶的物理地址为20100H,当执行完指令PUSH AX后,栈顶的物理地址为()。
A. 20098H
B. 20102H
C. 200FEH
D. 20100H
4. JMP WORD PTR[SI] 的目标地址偏移量为()。
A. SI的内容
B. SI所指向的内存字单元的内容
C. IP+SI的内容
D. IP+[SI]
5. NEXT是程序中某指令语句标号,下述哪个程序段不能实现转移到NEXT语句执行()。
A. JMP NEXT
B. MOV BX,OFFSET NEXT
JMP BX
C. MOV BX,NEXT
D. LEA AX,NEXT
JMP BX JMP AX
6. 已知AX=8065H,BX=103AH,则指令ADD BL,AL执行后,OF和CF的值分别为()。
A. 0,0
B. 0,1
C. 1,0
D. 1,1
7. 已知AL,BX中各存放一个带符号数,计算AL*BX的积,用下述程序段()。
A. XOR AH,AH
B. CBW
MUL BX MUL BX
C. XOR AH,AH
D. CBW
IMUL BX IMUL BX
8. 当CX=0时,REP MOVSB执行的次数为。
( )
A. 1次
B. 0次
C. 25535次
D. 25536次
9. 已知CALL DWORD PTR[BX]执行前SP=100H, 执行后SP的内容为 ( )
A. 0FEH
B. 0FCH
C. 104H
D. 96H
10. 下面各组语句在语法上正确的是()
A. X EQU 100
B. X EQU 100
X EQU X+X X = X+X
C. X = 100
D. X = 100
X EQU X+X X = X+X
二、判断题(判断每题正误,并在答题卡上涂上所选的答案)。
(10分)
11. MOV DS,2000H
A. 正确
B. 错误
12. ADD AL,BX
A. 正确
B. 错误
13. MOV BX,[BX]
A. 正确
B. 错误
14. AND 10, AL
A. 正确
B. 错误
15. MOV CS,AX
A. 正确
B. 错误
16. SHL AL,CL
A. 正确
B. 错误
17. MOV [SI],10H
A. 正确
B. 错误
18. RET 4
A. 正确
B. 错误
19. POP AL
A. 正确
B. 错误
20. CALL 10H
A. 正确
B. 错误
三、填空题。
(20分)
1.已知:BX=100H,BP=200H,SI=300H,DS=1000H,SS=2000H,CS=3000H,指出下述指令中存储器操作数的有效地址及实际地址。
(6分)
指令有效地址实际地址
MOV AL,[SI+50H] ⑴⑵
MOV AL,[BP] ⑶⑷
MOV CS:[BX+SI-30H],AL ⑸⑹
2. 执行下列指令后,AX寄存器中的内容是什么?(4分)
(1)TABLE DB 10,20,30,40,50 (2)TABLE DW 10,20,30,40,50
ENTRY DW 3 ENTRY DW 3
::
::
MOV BX,OFFSET TABLE MOV BX,OFFSET TABLE
ADD BX,ENTRY ADD BX,ENTRY
MOV AX,[BX] MOV AX,[BX]
AX=__⑺____ AX=__⑻____
3. 写出下述两条数据定义伪指令语句经过汇编后的内存分配情况。
(4分)
DATA1 DB -35,‘34’
DATA2 DW -35,‘34’
4.依据下述子程序说明文件把子程序补充完整。
(6分)
(1)子程序名:MADD
(2)子程序功能:求两个多字节数据之和
(3)入口条件:两个数据的低字节地址分别在SI和DI中,数据长度在CL中
(4)出口条件:和的低字节地址在SI中
(5)受影响的寄存器:F
MADD PROC NEAR
PUSH AX
PUSH DI
PUSH SI
PUSH CX
()
AGAIN: MOV AL,[DI]
()
INC SI
INC DI
DEC CL
JNZ AGAIN
POP CX
POP SI
POP DI
POP AX
()
MADD ENDP
四、改错题。
(10分)
下列程序有错,请将它们找出并改正过来。
已知程序欲完成的功能是从两个无符号数中选出较大者送入MAX单元,若两者相同,则将MAX单元清0。
要求:不必操题,将错误的行号及正确的答案写在答题纸上;如果要删除某一行,则写出本行的行号,并在后面表明删除字样;若需要在某两行之间插入,则在两行的行号之间自选一个作为行号,并在后面写出插入的内容。
1. DSEG SEGMENT
3. DAX DB 300
5. DAY:DB A3H
7. MAX DB 0
9. DSEG END
11.CSEG SEGMENT
13.ASSUME CS:CSEG;DS:DSEG
15.BEGIN: MOV DS,DSEG
19.CMP AL,DAY
21.JE ZERO
23.JG LMAX
25.MOV AL,DAY
28.LMAX MOV MAX,AL
30.ZERO MOV AX,4CH
32.INT 21H
35.CSEG ENDS
38.END START
五、简答题(25分):用尽可能少的指令编写完成下列功能的程序段
1.将寄存器AL的高4位和低4位互换。
2.将DX,AX中的双字数据逻辑左移一位。
3.将寄存器AL的第i位清0,AL的其它位状态不允许改变,已知i值在CL中。
4.已知AL中存放一个带符号数,如果AL中的数据为0,则在显示器上输出字符0;
如果AL中的数据为负,则在显示器上输出“-”;否则在显示器上输出“+”。
5.设一逻辑段定义如下:
DSEG SEGMENT
DATA1 DB 10H,20H,30H,40H,50H,60H
DATA2 DB 10H,20H,30H,40H,50H,60H
COUNT DW 6
DSEG ENDS
现想用数据串操作指令CMPSB与重复前缀连用判断在DATA1和DATA2开始的连续单元中存放的两组数据是否相等,若相等,则将CF置1;否则将CF清0,试编写该程序段。
六、程序设计题。
(15分)
已知一组带符号字节数据存放在内存DATA开始的连续单元中,数据个数在CNT单元存放。
编制程序求出该组数据的最小值,并将其存入MIN单元。
答案:C B C B C C D B B D
B B A B B A B A B B。