汇编——模拟试卷二
1. 指令MOV AX,COUNT[SI],它源操作数的寻址方式是(B)。
A. 直接寻址 B. 寄存器相对寻址 C. 寄存器间接寻址 D. 基址变址寻址
2. 下列4 条指令中,错误的指令是( )。
A. SHR AX,1 B. MOV AX,ES: [DX]
C. SUB CX,AX D. ADD BX,[SP+DI]
1 [DX]不能用来内存单元的寻址
3. 在IBM PC 微机中,如果某一内存单元的物理地址是7E7F6H,那么它的逻辑地址是(B):DDF6H。
A. 70B0H B. 70A0H C. 70C0H D. 7E76H
4.MOV AL,12H
ADD AL,OFFH
上述两条指令执行后,CF 和OF 的值是(A)。
A. CF=1 OF=0 B. CF=1 OF=1
C. CF=0 OF=1 D. CF=0 OF=0
1 12H+0FFH 2 产生进位 ==> CF=1 3 没有产生溢出 ==> OF=0
5. 使用LINK 连接命令,执行后可生成文件的扩展名为(B)。
A. COM B. EXE C. OBJ D. LST
6. 累加器AL 中的内容为81H,CMP AL,执行54H 指令后,累加器AL 中的内容为(C)。
A. 23H B. 00H C. 81H D. D5H
1 虽然我没看懂这道题要表达的意思,但CMP是判断指令,只会修改flag寄存器的内容,别的寄存器(AL...)不会修改的
7. 在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是(C)。
A. CX=0 且ZF=0 B. CX=0 且ZF=1 C. CX=0 或ZF=0 D. CX=0 或ZF=1
8. 执行下列指令后,正确的结果是(B)。
MOV AL,100
MOV BL,-1
A. AL=100H,BL=01H B. AL=64H,BL=0FFH C. AL=64H,BL=81H D. AL=100H,BL=0FFH
1 100 ==> 64H 2 3 -1 ==> FFH
9. 在循环程序中使用LOOP 指令作为循环结束的判断,其计数值一般应放的寄存器是(B)。
A. DX B. CX C. BP D. IP
10. 在汇编语言程序设计中,伪指令OFFSET 的含义是回送变量或标号的(B)。
A. 段地址值 B. 偏移地址值 C. 物理地址值 D. 操作数
11. 指令指针寄存器IP 用于存放代码段中的偏移地址,在程序执行过程中,它始终指向(B)。
A. 上一条指令的首地址 B. 下一条指令的首地址
C. 正在执行指令的首地址 D. 需计算有效地址后才能确定的地址
12. 下面的数据传送指令中,错误的操作是(D)。
A. MOV SS:[BX+DI],1000H
B. MOV DX,1000H
C. MOV WORD PTR[BX],1000H
D. MOV DS,2000H
1 无法直接给段寄存器赋值
13. 为了使执行串操作指令时地址按减量方式处理,应使用的指令是(A)。
A. STD B. STI C. CLD D. CLI
14. 执行下列指令序列后,正确的结果是(B)。
MOV AL,78H ; AL=78H
MOV BL,58H ; BL=58H
ADD AL,BL ; AL=AL+BL=D0H
DAA
A. AL=36H CF=1 AF=1 B. AL=36H CF=1 AF=0
C. AL=36 CF=1 AF=0 D. AL=C6H CF=1 AF=1
1 DAA指令: 2 if (al的低4位 > 9 || af=1){ 3 al += 6 4 af = 1 5 }if(al高4位 > 9 || cf=1){ 6 al += 60 7 cf = 1 8 }else{ 9 af = 0 10 cf = 0 11 } 12 13 14 AF为辅助进位标志,表示运算中第3位是否向第4位有进位或借位
15. 对寄存器AX 的内容乘以4 的正确指令序列是(B)。
A. SHR AX,1 B. SHL AX,1
SHR AX,1 SHL AX,1
C. ROL AX,1 D. RCR AX,1
ROL AX,1 RCR AX,1
16. 在下列指令的表示中,不正确的是(C)。
A. MOV AL, [BX+SI] B. JMP SHORT DON1
C. DEC [BX] D. MUL CL
17. 若AX=3500H,CX=56B8H,当执行AND AX,CX 指令后,AX 的值是(A)。
A. 1400H B. 77F8H C. 0000H D. 0FFFFH
1 AX = 0001 0100 0000 0000 2 CX = 0101 0110 1011 1000 3 4 AND AX,CX 5 6 AX = 0001 0100 0000 0000 ==> 1400H
18. 下面对伪指令语句的说明,正确的是(A)。
A. 由汇编程序在汇编过程中执行的指令是伪指令
B. 当汇编结束后,目标程序中仍保留有伪指令
C. 伪指令是程序运行阶段完成其功能
D. 汇编程序将伪指令翻译成机器码
1 伪指令在编译的时候并不生成代码
19. 用MOV 指令将十进制数64 以组合型BCD 码格式送入AX,正确使用的指令是( )。
A. MOV AX,0604 B. MOV AX,0064H C. MOV AL,0604H D. MOV AL,0064
1 64d的组合BCD码是 0110 0100b =64h 2 用指令 MOV AX, 64h
20. 执行XLAT 指令时,要将表的首地址和偏移地址分别存放的寄存器是( )。
A. BX、AL B. AL、BX C. AX、BL D. BL、AX
1 xlat指令:操作是以DS:[BX+AL]为地址,提取存储器中的一个字节再送入AL。
二、填空题(每空1 分,共5 分)
名词解释:请将1~3 小题的叙述与下面的词语联系起来,括号内填入对应的A,B,C。
1. 以后进先出方式工作的存储空间是(B)。
2. 告诉计算机要执行的操作(一般还要指出操作的地址),在程序运行时执行的是(C)。
3. 保存逻辑段起始地址的寄存器,IBM PC 机有四个:CS、DS、SS、ES 是(A)。
词语:A. 段寄存器 B. 堆栈 C. 指令
4. 假设(SS)=2250H,(SP)=0140H,如果在堆栈中存入5 个数据,则堆栈的物理地址为 22636H 。
1 往栈里添加数据,是先将sp=sp-2,然后在将数据送入栈中 2 3 22500+0140-A=22636H
5. 指令MOV AX,VAR[BX]属于 寄存器相对 寻址。
1 [BX,SI,DI,BP] 2 3 [BX+SI]... 4 5 idea[BX]... 6 7 [BX][BP].... 8 9 [BX].idea... 10 11 [BX].idea[SI]
三、简答题(每题2 分,共6 分)
1. 下列语句在存储器中分别为变量数据区分配多少个字节单元?
(1)VAR1 DD 10 ==> 双字 4bytes
(2)VAR2 DW 4 DUP(?),2 ==> 10bytes
2. 在指令系统中,段内、段间返回均为RET 指令。试回答:
(1)执行段内返回RET 指令时,执行的操作是 。 ==> 将ip从栈中pop出来,然后返回
(2)执行段间返回RET 指令时,执行的操作是 。 ==> 将ip,cs依次从栈顶取出
3. 已知指令ARRAY DB 2 DUP(1 DUP(3)),则:
指令 MOV AX,Length ARRAY,执行后,AX= 2 。
指令 MOV AX,SIZE ARRAY,执行后AX= 2 。
四、程序分析题(每小题5 分,共35 分)
1. MOV AX,00FFH ; ax=00ffh=0 0 1111 1111
AND AX,0FFFH ; 0 1111 1111 1111 ax=00ffh
OR AX,0F0FH ; ax=0fffh
XOR AX,00FFH ; 0f00h
问:上述程序段执行后,AL 的内容是什么? (AL)=00H
2. DATA1 DB 500 DUP(?) ; 0~499
DATA2 DB 100 DUP(?) ; 500~599
…
MOV CX,100 ; cx=100
MOV BX,400 ; bx=400
MOV SI,0 ; si=0
MOV DI,0 ; di=0
LOP: MOV AL,DATA1 [BX][SI] ; al=?
MOV DATA2 [DI],AL
INC SI
INC DI
LOOP LOP
问:上述程序段执行后完成的功能是什么? 将DATA1的后100个数据,复制到DATA2中
3. MOV AX,0012H
MOV BX,0034H
MOV CL,8
ROL AX,CL
OR AX,BX
问:上述程序段执行后,AX 寄存器的内容是什么? 1234H
4. 已知(AX)=0A5C6H,(CX)=0F03H,CF=1
RCL AX,CL
AND AH,CH
RCR AX,CL
问:上述三条指令执行完后,(AX)= A1C6H,CF=1 。
5. SUB AL,AH ***
DAS
若指令执行前,(AL)=86,(AH)=07;则指令执行后,(AL)=79H ,CF=0 ,AF= 1。
1 因为已经是十进制的格式了,所以不用执行DAS指令 2 3 79 ==> 0111 1001 ==>79H
6. ORG 0050H
DA1 DW 56H,78H ; 50~53
DA2 EQU $ -DA1 ; 常量,不占储存空间
DA3 DB? ; 54
…
LEA BX,DA3
MOV CX,DA2
MOV AX,DA2 SHR 1
问:(AX)= 0002h,(BX)=0054h ,(CX)= 0004h。
7. MOV AL,11H
XOR AL,3
问: (1)上述程序段执行后完成什么功能? 取反AL 寄存器的第0 位和第1 位。
(2)程序段执行后AL 寄存器的内容是什么? (AL)=12H
五、程序填空题(每小题6 分,共12 分)
1. 设已定义数据区如下:
DATA SEGMENT
DAX DB XXH
DAY DB?
DATA ENDS
下列程序段完成功能:判断变量DAX 的值是否大于等于0。若大于等于0,则将DAY 单元置为0FFH;否则,将DAY 单元的值置为00H。请在空白处填上适当的指令(每一空白处只填一条指令)。
1 MOV AL,DAX 2 3 CMP AL,0 4 5 __jnb GRE__ 6 7 MOV AL,0 8 9 __jmp LEE__ 10 11 GRE: MOV AL,OFFH 12 13 LEE: MOV DAY,AL
2. 为使DA2 子单元的值为50H,等号语句NUM 的空白处应填多少?
ORG 34H
NUM= 0Ch
DA1 DW 10H,$+20H,30H,$+40H ; 34~41
DA2 DW offset DA1+NUM+10H
六、编程题(共22 分)
1. 试编写程序段:要求键盘输入的小写字母用大写字母显示出来(5 分)。
1 START:MOV AH,01h 2 INT 21H ; 中断调用,接受键盘输入,存放到al中 3 4 CMP AL,'a' 5 JB STOP 6 CMP AL,'z' 7 JA STOP 8 9 SUB AL,20H ; -20 ==> 大写 10 MOV DL,AL ; 将结果放到dl寄存器中 11 12 MOV AH,02h ; 输出dl寄存器的内容 13 INT 21H 14 15 JMP START 16 17 STOP: RET
2. 假设数据区定义如下:
DATA SEGMENT
ARRAY DB ‘THIS IS MASM PROGRAM’,‘$’
DATA ENDS
编写程序段,将以ARRAY 为首地址的字符串显示输出(5 分)。
1 MOV AX,DATA 2 MOV DS,AX 3 … 4 MOV DX,OFFSET ARRAY(或LEA ARRAY) 5 MOV AH,09H ; DOS调用中的09号功能,就是在屏幕上显示字符串 6 INT 21H
3. 假设在以ARRAY 为首地址的存储区中存放10 个带符号的字节数。试编制程序,统计出其中不大于10 的元素的个数(12 分)。
1 ASSUME CS:CODE,DS:DATA 2 3 DATA SEGMENT 4 ARRAY DB XX,XX…XX ;存放10 个带符号的数。 5 NUM DB ? 6 DATA ENDS 7 8 CODE SEGMENT 9 10 START:MOV AX,DATA 11 MOV DS,AX 12 13 LEA SI,ARRAY ; mov si,offset array 14 XOR AL,AL ; mov al,0 15 MOV CX,10 16 LOP1: MOV AL,[SI] 17 CMP AL,10 18 JGE LOP2 ; jnb lop2 大于等于跳转到lop2 19 20 INC BL ; 否则将bl+1 21 22 LOP2: INC SI 23 LOOP LOP1 24 MOV NUM,BL 25 26 MOV AH,4CH 27 INT 21H 28 29 CODE ENDS 30 END START