判断题
1.寄存器DX可以分成两个8位寄存器。
2.一条PUSH指令的操作会使栈顶指针加2。
3.MOV AX,BL
4.Debug中D命令显示指定范围存储单元内容。
5.RCR DX,4
6.INC指令会影响CF标志位。
7.IN AL,200H
8.ADC指令主要用于与ADD指令相结合实现多精度数相加。
9.MUL 2
10.SBB指令会把源操作数和CF从目的操作数一起减去。
二.单项选择题
1.8086段内存储单元的偏移地址是( )位。
A. 20 B. 16 C. 8 D. 12
2.指令MUL BL执行前,被乘数应该放在寄存器( )中。
A. AL B. AX C. DL D. DX
3.指令MOV AX, [1000H]中,源操作数的寻址方式为( )。
A. 立即寻址 B. 直接寻址 C. 段内间接寻址 D. 寄存器寻址
4.下列( )是溢出标志位。
A.CF B.AF C.SF D.OF
5.标志位SF=1时,表示运算结果( )。
A.< 0 B.= 0 C.> 0 D.≠1
6.将CX寄存器低4位清零的正确指令是( )。
A.AND CX,0F0H B.AND CX,0FFF0H
C.AND CX,1110H D.MOV CX,0
7.下列指令( )是中断返回指令。
A. IRET B. RET C. END D. RETURN
8.下列选项( )可用作基址寄存器。
A.AX B.BX C.CX D.DX
9.比较指令CMP ( )。
A.专用于有符号数比较 B.专用于无符号数比较
C.专用于串比较 D. 用于有有符号数和无符号数
10.指令JCXZ NEXT,在( )时转移到NEXT。
A. CX ≠ 0 B.CX = 0 C.CX < 0 D.CX > 0
三、填空题
1. MOV BX, 90H
SUB BX, 11H ; (BX) = .
2. MOV SP,123FH
POP AX ; (SP) = .
3. MOV CL, 98H
SUB CL, 99H
SBB CL, 10H ; (CL) = .
4. MOV BX, 1101H
MOV CX, 4
ROR BX , CL ; (BX) = .
5. 设字节变量TABLE的有效地址为1210H。
MOV SI, 180H
MOV BX, 080H
LEA AX , TABLE[SI][BX+100H] ; (AX) = .
6. MOV AX, 1234H
CMP AX, 0ABCDH; (AX) = .
7. MOV AL, 10010011B
OR AL, FFH ; (AL) = .
8. ARRY DB 6,7, 8,9,10H,11H,12H
MOV CL, ‘B’
ADD CL,ARRY+3 ; (CL) = .
9. ORG 10
ABC DW 12H, 34H, 56H
MOV AX, OFFSET ABC ; (AX) = .
四、简答题
1. 什么独立编址和统一编址,各自有什么特点?
2. 如果让你来编制一个中断服务子程序,请问要注意什么?
3. 如果需要自定义一个中断服务子程序,你有那些方法来做到放在系统中?
五、分析设计题
1、试分析下面的程序段完成的功能,并回答问题。
MOV BL, AH
MOV CL, 2
SHL DX, CL
SHL AX, CL
MOV CL, 6
SHR BL, CL
OR DL, BL
(1)程序段执行完后 CL = ;
(2)程序功能是 。
2、有如下数据定义和若干指令:
num DB ‘543210$’
buf DB 5 DUP(0)
……
MOV SI, 0
MOV CX, buf-num
SUB CX, 2
Next:MOV AL, num[SI]
ADD AL, 11H
OR AL, 01H
MOV buf[SI],AL
INC SI
LOOP Next
1) 程序执行完后,写出buf各字节的数据: ;
2) 程序段中指令MOV CX, buf-num执行后, CX= 。
3、阅读如下程序段,并回答问题
MOV CX, 0 ;
MOV BX, 4567H
repeat:
TEST BX, 0ffffh
JZ exit
JNS Shift
INC CX
Shift:
SHL BX,1
JMP repeat
exit:
1)程序的功能为 ;
2)程序执行后 CX的值为 。
4、在段地址和偏移地址分别为2000H和028H的存储位置定义了一个属性为far的子过程proadd。在主程序中有proadd的远调用,其所在位置和其后的一条指令的段地址和偏移地址如下:
3000: 000E CALL far ptr proadd
3000: 0013 MOV AX, BX
设上述2条指令执行前,(SP)=100H。回答所提出的问题:
1)程序在执行指令CALL far ptr proadd时,(IP)= ,(CS)= 。
2)画出栈的内容和指针SP变化。
偏移地址
栈内容
5、阅读如下程序段,回答所提出的问题。
num DW 123, 9876H, 0ABCDH, -56,890,-12,1, 45, 54,32,10,789H
buf DW 15 DUP(0)
cnt DB 0
……
MOV CX, buf-num
SHR CX, 1
MOV BX, 0
Again:
MOV AX, num[BX];
CMP AX,0
JL NEXT
INC cnt
MOV buf[BX], AX
NEXT:ADD BX, 2
LOOP again
1)程序段完成的功能为 ;
2)程序段执行后,CNT的数值为 。
六、综合设计编程题
编写一个完整的汇编语言程序,实现从键盘输入长度不超过80的字符串,并判断字符串中是否存在连续的2位十进制数字。具体要求如下,其中2、3、4、5要求各采用一个子程序实现。
1.编写数据段DATASEG,定义80个字节的输入缓冲区,并定义其它输入输出需要的变量或字符串。
2.编写输入子程序INPUT,从键盘输入长度不超过80的字符串。
3.编写子程序CHECK1NUN,判断寄存器AL中的一个ASCII字符是否是十进制数字0-9,如果是则返回1,否则返回0,返回结果存放在寄存器DL中。
4.编写子程序CHECK2NSTR,并调用CHECK1NUM,判断输入的字符串中,是否存在两个连续的十进制数字,如果是则返回1,否则返回0。其中,字符串的首地址存放在SI寄存器中,返回结果存放在寄存器DH中。
5.编写输出子程序OUTPUT,根据CHECK2NSTR的判断结果,若存在连续的2位十进制数字,则输出 “YES 2DECNUM”,否则输出“NO MATCH”。
6.编写完整的代码段CODE和主程序MAIN,调用上述子程序,完整实现程序功能。