一、单项选择题(每小题1 分,共20 分)
1. 设段地址和偏移地址是3F4BH : 00C7H,那么它所对应存储单元中的物理地址是(C)。
A. 3F4B7H B. 3F598H
C. 3F577H D. 3EB76H
2. 在下列段寄存器中,堆栈段寄存器是(D)。
A. ES B. CS
C. DS D. SS
3. 下列汇编语言指令中,正确的指令是(B)。
A. MOV [BX] [BP],AX B. AND DH,DL
C. ADD [SI],DA_ BYTE D. LEA DS,40 [SI]
4. 下面指令执行后,变量DA_BYTE 中的内容是(C)。
DA_WORD DW AC05H
DA_BYTE DB 0FAH
…
MOV AL,BYTE PTR DA_WORD
SUB DA_BYTE,AL
A. 0EAH B. 0FAH
C. 0F5 D. 00H
5. 设数据段中已有:
DA1 DB 12H,34H
DA2 DW 56H,78H
下面有语法错误的语句是( )。
A. MOV DA1+2,AX B. ADR DW DA1
C. MOV BYTE PTR DA2+1,AL D. MOV WORD PTR DA1+1,AX
1 不可能把一个值赋给表达式。也许应改为:MOV [DA1+1],AX
6. 若(AX)=2000H,(BX)=0050H,(20050H)=12H,(20051H)=34H,执行MOV AX,[BX]指令后,AX 寄存器中的内容是(D)。
A. (AX)=0050H B. (AX)=0012H
C. (AX)=1234H D. (AX)=3412H
7. 在执行PUSH [BX]指令寻找目的操作数时,段地址和偏移地址分别是(B)。
A. 无段地址和偏移地址 B. 在DS 和BX 中
C. 在ES 和BX 中 D. 在SS 和BP 中
8. 已定义DA_WORD DW 50 DUP(0),则指令MOV CX,SIZE DA_WORD 汇编后的等效指令是(B)。
A. MOV CX,50 B. MOV CX, 100
C. MOV CX,200 D. MOV CX,100 DUP (0)
9. 完成将带符号数AX 的内容除以2 的正确指令是(答案错了)。
A. RCR AX,1 B. ROR AX,1
C. SHR AX,1 D. SAR AX,1
1 sar是保留符号位,把剩下的二进制位向右移一位(原最低位丢弃) 2 把n进制数右移1位就相当于原数除以n取整, 3 比如十进制数123,右移一位是12("3"被丢弃),而123/10=12
10. 设BL=40H,SI=0600H,DS=3000H,(30600H)=0C0H,CF=1。执行SBB BL,[SI]后,正确的结果是(C)。
A. BL=5FH,SF=l,CF=1 B. BL=60H,SF=1,CF=0
C. BL=5FH,SF=0,CF=1 D. BL=60H,SF=0,CF=0
11. 设SP =1FFD,下列指令执行后,SP 寄存器的内容是(C)。
…
PUSH BX
POPF
…
A. 1FFB B. 1FFF
C. 1FFD D. 2000
12. 下面指令执行后,改变AL 寄存器内容的指令是(D)。
A. CMP AL,BL B. OR AL,AL
C. TEST AL,BL D. AND AL,BL
13. INC BYTE PTR [BX]指令中的操作数的数据类型是(C)。
A. 双字 B. 字
C. 字节 D. 四字
14. 用指令的助记符、符号地址、标号和伪指令、宏指令等书写程序的语言称为(A)。
A. 汇编语言 B. 高级语言
C. 机器语言 D. 低级语言
15. 完成将累加器AX 清零,下列指令中错误的指令是(D)。
A. XOR AX,AX B. SUB AX,AX
C. AND AX,00H D. OR AX,00H
16. 下面各组伪指令中,使用错误的是(C)。
A. STACK_SEG SEGMENT‘STACK’
B. SEGMENT‘CODE’
C. MAIN_PROC PROC FAR
…
MAIN_PROC NEDP
END MAIN_PROC
D. MYDATA SEGMENT‘DATA’
…
ENDS
17. 在8086/8088 系统中,存储器是分段组织的,每段最大字节的长度是(C)。
A. 8K B. 16K
C. 64K D. 1M
18. 设(AX)=0A8H,(CL)=3,CF=1,执行RCL AX, CL 指令后,AX 寄存器的内容是(B)。
A. 0545H B. 0544H
C. 0547H D. 00B5H
19. 已知DS=2000H, BX=1000H,COUT=0020H,SI=6D50H,(21020)=1080H,(21022)=4000H,则执行指令LDS SI,COUT [BX]后,SI、DS 寄存器的内容分别是(C)。
A. SI=6D50H,DS=2000H B. SI=1080H,DS=2000H
C. SI=1080H,DS=4000H D. SI=6D50H,DS=1080H
20. 执行下列指令序列后,正确的结果是(D)。
MOV AL,81H
ADD AL,AL
SBB AL,AL
A. AL=01H B. AL=10H
C. AL=00H D. AL=0FFH
二、填空题(每空1 分,共5 分)
名词解释:请将各小题的叙述与下面的词语联系起来,在括号内填上对应的A,B,C,D,E。
1. 保存当前栈顶地址的寄存器是(D)。
2. 惟一代表存储空间中每个字节单元的地址是(C)。
3. 能被计算机直接识别的语言是(E)。
4. 记录指令操作结果的标志:OF、SF、ZF、AF、PF、CF 是(A)。
5. 由汇编程序在汇编过程中执行的指令是(B)。
词语:A. 状态标志 B. 伪指令 C. 物理地址 D. SP E. 机器语言
三、简答题(每小题2 分,共6 分)
1. 已知在数据段中定义的数据如下:
NAME DB ‘TOM’
DB 20
DB ‘STRING’
请指出下列指令是否正确。若不正确,错在哪里?
__不正确,数据类型不匹配__
MOV AX,NAME
__前两条指令正确,第三条数据类型不匹配。__
MOV BX,4×3
MOV SI,7
MOV AX,NAME [BX][SI]
2. 下列两条语句有何区别? X 不能多次赋值,Y 可以多次赋值。
X EQU 1000H
Y=1000H
3. 有符号定义语句如下:
ARRAYI DB 3,6,9,‘123’ 0~5
ARRAY2 DB 0 6
L EQU ARRAY2-ARRAY1
问L 的值是多少? L=6
四、程序分析题(每小题5 分,共35 分)
1. 设寄存器AL=45H,BL=76H,CL=85H
XOR AL,0FH
AND BL,0FH
OR CL, 0FH
执行上述指令序列后,AL=4AH ,BL=06H ,CL=8FH 。
2. 下列语句执行后,AX 寄存器的内容是多少?
ARRAY DW 10,20,30,40,50
ENTRY DW 3
…
MOV BX,OFFSET ARRAY
ADD BX,ENTRY
MOV AX,[BX] 5040H
3. 现有程序段如下:
MOV AX,01H
MOV BX,02H
MOV CX,03H
LOP:INC AX
ADD BX,AX
SHR AX,1
LOOP LOP
上述程序段执行后AX、BX 寄存器的值分别是多少? (AX)=1,(BX)=8
4. 已知(SP)=2000H,(SS)=5000H,(52000H)=4500H,(DS)=4000H,(BX)=1200H,则POP [BX]指令执行完后,(SP)=2002H ,(41200H)= 4500(一个字的内容)。
5. 已知AL=35H,DL = 29H
执行:
ADD AL,DL
DAA
上述程序段执行后,AL= 64h,CF= 0。
6. 设AX=6FF8H,CF=1
MOV DX,80
XOR DH,0FFH
SBB AX,DX
上述程序段执行后,(AX)=7078h ,CF=1 。
7. 设:
XOR AX,0
MOV BX,1
MOV CX,10
LOP: ADD AL,BL
INC BL
INC BL
LOOP LOP
问: (1)该程序完成的功能是什么? 完成的功能是求 10 个奇数的累加和。
(2)程序执行后(AX)=100 。
五、程序填空题(每小题6 分,共12 分)
1. 已知数据段定义如下:
DATA SEGMENT
ORG 20H
DA1 DB 12,34
DA2 DB 56,78
ADRR DW DA1,DA2
DATA ENDS
为使ADDR+2 字存储单元中存放的内容为“0022H”,上述空格中应填写什么语句?
2. 下列程序实现把20 个字符“A”的字符串从原缓冲区传送到目的缓冲区的功能,试将程序中的空白处填上适当的指令(每一空只填一条指令)。
1 DATA SEGMENT ;define data segment 2 3 SOURCE_STRING DB 20 DUP(‘A’) 4 5 DATA ENDS 6 7 8 EXTRA SEGMENT ;define extra segment 9 10 DEST_STRING DB 20 DUP(?) 11 12 EXTRA ENDS 13 14 15 CODE SEGMENT ;define code segment 16 17 ASSUME CS:CODE,DS:DATA,ES:EXTRA 18 19 START:MOV AX,DATA 20 21 MOV DS,AX 22 23 MOV AX,EXTRA 24 25 MOV ES,AX 26 27 __mov si,offset SOURCE_STRING__ 28 29 LEA DI,DEST_STRING 30 31 CLD 32 33 MOV CX,20 34 35 __rep movsb__ 36 37 MOV AH,4CH 38 39 INT 21H 40 41 CODE ENDS 42 43 END START
六、编程题(共22 分)
1. 编写程序段,将标志寄存器中的高8 位和低8 位互换。(5 分)
1 pushf 2 3 pop ax 4 5 ; 直接这一句就行了XCHG AH 6 7 mov bl,ah 8 9 mov bh,al 10 11 push bx 12 13 popf
2. 数据区定义如下:
DATA SEGMENT
ARRAY DB 23H,24H,25H,26H
DISP DB 30 DUP(‘ ’),‘$’
DATA SEGMENT
编写程序段,将此数据区复制10 次,并将结果显示出来。(5 分)
1 CLD 2 LEA SI,ARRAY 3 LEA DI,DISP 4 MOV CX,10 5 REP MOVSB 6 MOV AH,09H 7 INT 21H
3. 数据区中首地址为ARRAY 的N 字数组,定义如下:
DATA SEGMENT
ARRAY DW 23,-20,130,-5,…,326,-2110 ;表示N 个带符号数
CUNT EQU $-ARRAY
RESUT DB ? ;存放正数的个数
DB ? ;存放’0’的个数
DB ? ;存放‘负数’的个数
DATA ENDS
试编写一个程序,统计ARRAY 数据区中正数、负数及“0”的个数,结果送入RESUT 起始的三个字节单元中(12 分)。
1 DATA SEGMENT 2 ARRAY DW 23,-20,130,-5,…,326,-2110 3 COUT EQU $-ARRAY 4 RESUT DB? 5 DB? 6 DB? 7 DATA ENDS 8 CODE SEGMENT 9 ASSUME CS:CODE,DS:DATA 10 START: MOV AX,DATA 11 MOV DS,AX 12 MOV AX,0 13 MOV BX,0 14 LEA SI,ARRAY 15 MOV CX,CUNT 16 SHR CX,1 17 LOP: CMP WORD PTR[SI],0 18 JZ ZERO 19 JNS PLUS 20 INC BL 21 JMP NEXT 22 ZERO: INC AH 23 JMP NEXT 24 PLUS: INC AL 25 NEXT: ADD SI,TYPE ARRAY 26 LOOP LOP 27 MOV RESUT,AL 28 MOV RESUT+1,AH 29 MOV RESUT+2,BL 30 MOV AH,4CH 31 INT 21H 32 CODE ENDS 33 END START