一、单项选择题(每小题1分,共15分)
1.设AL=57H,BL=24H,执行指令SUB AL,BL后,寄存器内容为( B )。
A.AL=57H,BL=24H C.AL=57H,BL=33H
B.AL=33H,BL=24H D.AL=33H,BL=0
2.设CL=8,AL=0C8H,执行SAR AL,CL后,AL中的数据是( A )。
A.0FFH B.80H C.00H D.0FEH
3.指令指针寄存器是( A )。
A.IP B.SP C.BP D.PSW
4.用REPE SCASB指令对某字符串进行扫描,若当扫描结束时CX≠0,则表示( B )。
A.在字符串中有一个与(AL)不同的字符 B.在字符串中找到了第一个与(AL)不同的字符 C.在字符串中有一个与(AL)相同的字符 D.在字符串中找到了第一个与(AL)相同的字符
5.下面的数据传送指令中,错误的指令是( D )。
A.MOV SS:[BX+DI],1000H B.MOV DX,1000H C.MOV WORD PTR[BX],1000H D.MOV DS,2000H
6.下面指令执行后,变量DAB中的内容是( C )。 DAW DW 2A05H DAB DB 0FAH
. . .
MOV AL,BYTE PRT DAW SUB DAB,AL
A.0DAH B.0FAH C.0F5H D.0D0H 7.执行下列指令后,正确的结果是( B )。
MOV AL,100
MOV BL,-2
A.AL=100H B.AL=64H C.AL=64H D.AL=100H BL=02H BL=0FEH BL=82H BL=0FEH 8.测试BL寄存器内容是否与数据4FH相等,若相等则转NEXT处执行,可实现的方法是( B )。
A.TEST BL,4FH B.XOR BL,4FH JZ NEXT JZ NEXT
C.AND BL,4FH D.OR BL,4FH JZ NEXT JZ NEXT
9.设 SP初值为2000H,执行指令PUSH AX后,SP的值是( D )。 A.1FFFH B.1998H C.2002H D.1FFEH 10.DA1 EQU BYTE PTR DA2 DA2 DW 0ABCDH ┇ SHL DA1,1 SHR DA2,1
上述指令序列执行后,DA2字存储单元的内容是( C )。 A.0ABCDH B.0AB9AH C.55CDH D.559AH 11. 下面指令执行后,改变AL寄存器内容的指令是( D )。 A.TEST AL,02H B.OR AL,0 C.CMP AL,BL D.AND AL,BL
12. 有指令MOV AX, 1234H,指令中的立即数1234H是存储在( B )。
A. 数据段 B. 代码段 C. 附加段 D. 堆栈段
13.下面指令序列执行后完成的运算,正确的算术表达式应是( C )。 MOV AL,BYTE PTR X SHL AL,1 DEC AL
MOV BYTE PTR Y,AL
A.y=x*2+1 B.y = x/2+1 C.y=x*2-1 D.y=x/2-1
14.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $ -BUF1
符号COUNT的值是( B )。
A. 6 B. 18 C. 16 D. 8
15.已知AX,BX中均为带符号数,当进行字相除时,下面指令或指令序列正确的是( B )。
A. DIV BX B. CWD C. XOR DX,DX D. CBW IDIV BX IDIV BX IDIV BX 二、填空题(每空2分,共20分)
16.有指令MOV CL,N,要使该指令合法,则N的最大值是 255 ,最小值是 -128 。(用十进制数表示)
17.8086/8088CPU允许最大的存储空间为1MB,因此CPU的地址总线是 20位。 18.指令MOV AX,SEG BUF的功能是把送到AX中。 19.已知存储器某单元的地址表示为2314H:4132H,则它的
偏移地址= 4132H ,物理地址= 27272H 。
20.当控制标志IF等于 1 时,CPU处于开中断状态,能够响应外设的中断请求。 21. 在8086/8088CPU专用寄存器中, IP 寄存器内容始终指向下一条指令的首地址,此时该指令物理地址计算式是 CS*16+IP 。
22.要清除AX中的D15--11位,需采用 AND AX,07FFH 指令来实现。 三、简答题(每小题5分,共20分) 23.D1 DB 20H DUP(?)
D2 DW D1
请写出用一条指令实现取D1的偏移地址至SI中的三种方法。
LEA SI,D1 (1分)
MOV SI,OFFSET D1 (2分)
MOV SI,D2 (2分)(不论顺序)
24.下列每组指令中的两条指令有否区别?若有,请说出它们的不同点。 (1) MOV AX,OFFSET TABLE和LEA AX,TABLE 答:没有区别 (2) JMP SHOPT L1 和JMP NEAR PTR L1
答:前者转移量在127至-128之间,后者在同一代码段内跳转。
(3) MOV AX,[BX] 和MOV AX,BX
答:前者寄存器间接寻址,把以BX内容为地址的字存储单元中的内容送AX; 后者寄存器寻址,把BX中的内容送AX
(4) SUB DX,CX 和CMP DX,CX
答:前者是减法指令,得到的差存入DX中;
后者为比较指令,得到的差不保存,DX内容保持原值不便变。
(5) MOV [BP][DI],AL 和MOV DS:[BP][DI],AL
答:前者目的操作数表示的内存单元位于堆栈段;
后者用段前缀,内存单元位于数据段
25.什么是中断向量?中断N的中断向量的地址是多少?编写用DOS中断调用为中断N(中断服务子程序为INTSON)设置中断向量的程序段。
答:中断服务子程序在存储器中存放的入口地址(首地址),包括段地址CS及偏移地址IP,称此中断服务子程序的中断向量。
中断N的中断向量的地址是 [N*4,N*4+2]。
MOV AX,SEG INTSON MOV DS,AX
MOV DX,OFFSET INTSON MOV AL,N MOV AH,25H
INT 21H
26.已知堆栈段寄存器SS的内容是3000H,堆栈指针寄存器SP的内容是0FFEEH,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。试画出堆栈区内容和SP指针的变化过程示意图(标出存储单元的物理地址)。 SP
四、程序分析题(每小题5分,共20分) 27.程序段如下:
MOV AX,2 MOV BX,3 MOV DX,3 MOV CX,4
L20: INC AX
ADD BX,AX SHR DX,1 ( ) RET
试说明在上面括号中分别添入下面三种指令,程序段执行完后,AX、BX、CX和DX四个寄存器的内容分别是什么?
(1)LOOP L20 答:AX=6, BX=21, CX=0, DX=0 (2)LOOPE L20 答:AX=3, BX=6, CX=3, DX=1 (3)LOOPNE L20 答:AX=4, BX=10, CX=2, DX=0
28.下面程序段的功能是: 在红色背景下显示16个黄色闪烁的星号 。
MOV AH,09H MOV AL,‘*’ MOV BH,0 MOV BL,0CEH MOV CX,10H INT 10H
29.执行下列指令后,(AX)= 0ABB0H ;(DX)= 000DH 。 MOV AX, 0ABCDH MOV CL, 4 ROR AX, CL DEC AX
MOV CX, 16 MUL CX
30. 下面指令序列执行后,AL= 0F1H ,BL= 0FEH 。
MOV AL,0FH MOV BL,0FEH XOR AL,BL
五、程序设计题(第1小题10分,第2小题15分)
31.编写一程序,把COM1口初始化为9600波特、字长8位、2位终止位,奇校验。然后从COM1口读入字符并把它们显示出来。
要求:若字符没有准备好则等待,如果传输有误,则显示出错信息“Transfers Error!”。
DATA SEGMENT
ERR_MESS DB ‘Transfers Error!’, ‘$’ DATA ENDS
CODE SEGMENT MAIN PROC FAR
ASSUME CS:CODE, DS:DATA START:
PUSH DS XOR AX, AX PUSH AX MOV AH, 0
MOV AL, 11101111B MOV DX,0 INT 14H CHECK:
MOV AH,3 MOV DX, 0 INT 14H
AND AH,01H JZ CHECK MOV AH,2 MOV DX,0
INT 14H
TEST AH,80H JNZ ERROR AND AL,7FH
MOV BL,0 ;或 MOV DL,AL MOV AH,0EH ; MOV AH,02H INT 10H ; INT 21H JMP SHORT CHECK ERROR:
MOV AX, SEG ERR_MESS MOV DS, AX
MOV DX, OFFSET ERR_MESS MOV AH, 09H INT 21H RET MAIN ENDP CODE ENDS END START
32.已知在以ARRAY为首地址的数据区中存放10个带符号字数据:
ARRAY DW 1,2,-1,3,4,-2,-3,4,5,-6
编程将ARRAY分成两个数组:正数数组P_ARY和负数数组N_ARY,并分别显示正数项个数和负数项个数。
要求:源程序格式完整。
DATA SEGMENT
ARRAY DW 1, 2, -1, 3, 4, -2, -3, 4, 5, -6 P_ARY DW 10DUP(?) N_ARY DW 10DUP(?) DATA ENDS
CODE SEGMENT MAIN PROC FAR
ASSUME CS:CODE, DS:DATA START:
PUSH DS XOR AX, AX PUSH AX
MOV CX,10
MOV BX,OFFSET ARRAY MOV SI,OFFSET P_ARY MOV DI,OFFSET N_ARY MOV DX,0 NEXT:
MOV AX,[BX] CMP AX,0 JL N_SAVE INC DL
MOV [SI],AX
JMP SHORT NEXT0 N_SAVE:
INC DH
MOV [DI],AX NEXT0:
LOOP NEXT MOV AH,02H INT 21H
MOV DL,0AH INT 21H
MOV DL,ODH INT 21H MOV DL,DH INT 21H RET MAIN ENDP CODE ENDS END START