1. 主观题 (20分)
若程序的数据段定义如下,写出各指令语句独立执行后的结果。
DSEG SEGMENT
DATA1 DB 10H, 20H, 30H
DATA2 DW 10 DUP(?)
STRING DB ‘123’
DSEG ENDS
MOV AL, DATA1 ; (1)
MOV BX, OFFSET DATA2 ; (2)
LEA SI, STRING ; (3)
MOV DI, WORD PTR DATA1
ADD DI, SI
我的答案
DSEG SEGMENT
DATA1 DB 10H, 20H, 30H
DATA2 DW 10 DUP(?)
STRING DB ‘123’
DSEG ENDS
MOV AL, DATA1 ; AL=10H
MOV BX, OFFSET DATA2 ; BX=0003H
LEA SI, STRING ; SI=0017H
MOV DI, WORD PTR DATA1 ; DI=2010H
ADD DI, SI ; DI=2027H
2. 主观题 (10分)
(易错)执行下列指令后,AX 寄存器的内容是多少?
TABLE DW 10, 20, 30, 40, 50
ENTRY DW 3
MOV BX, OFFSET TABLE
ADD BX, ENTRY
MOV AX, [BX]
我的答案
TABLE DW 10, 20, 30, 40, 50
ENTRY DW 3
MOV BX, OFFSET TABLE
ADD BX, ENTRY
MOV AX, [BX] ; 1E00H
分析过程
3. 主观题 (30分)
请完成将中断类型码为 10H 的某中断服务子程序 MYINT 的中断向量放入向量表的程序段。
我的答案
MOV AX, 0000H
MOV DS, AX
MOV SI, 10H*4 ; 不要自作聪明算出来,这可是16进制乘法
MOV BX, OFFSET MYINT
MOV [SI], BX
MOV BX, SEG MYINT
MOV [SI+2], BX
4. 主观题 (40分)
编程实现将下列 MEM1 单元中的 10 个无符号数按从大到小的顺序进行重新排列。
DSEG SEGMENT
MEM1 DW 1000H, 1001H, 1002H, 1007H, 1008H
DW 1009H, 1003H, 1004H, 1005H, 1006H
DSEG ENDS
我的答案
DSEG SEGMENT
MEM1 DW 1000H, 1001H, 1002H, 1007H, 1008H
DW 1009H, 1003H, 1004H, 1005H, 1006H
DSEG ENDS
SSEG SEGMENT STACK
DB 100H DUP(0)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
START:
MOV AX, DSEG
MOV DS, AX
; 使用冒泡排序法
MOV DX, 10
; 外层循环
LOP1:
MOV CX, 9
MOV SI, OFFSET MEM1
; 内层循环
LOP2:
MOV BX, [SI]
ADD SI, 2
CMP BX, [SI]
JAE BIGGER
; 若前一个数小于后一个数,则交换
MOV AX, BX
MOV BX, [SI]
MOV [SI], AX
BIGGER: DEC CX
JNZ LOP2
DEC DX
JNZ LOP1
MOV AH, 4CH
INT 21H
CSEG ENDS
END START