汇编——模拟试卷一
一、选择题
1. 指令指针寄存器是(C)。
A. BP B. SP C. IP D. PSW
1 BP寄存器是用来直接对栈进行寻址的,一般配合SS(栈段寄存器)一起用 2 SP寄存器是栈指针,SP始终指向栈顶(push操作时先将sp+2然后在放入数据,push操作时先将数据取出然后将sp-2) 3 IP寄存器是指针寄存器,一般配合CS一起用,共同指向代码段。 4 PSW没听说过 5 6 指令指针当然是操作代码的呀
2. DA1 DB 67H
NUM EQU 80H
则执行AND DA1,NUM 语句后DA1 中的内容是(D)。
A. E7H B. 80H C. 67H D. 0
1 我一开始看成add了 2 3 AND DA1,NUM 4 5 DA1 = 67H ==> 0110 0111 6 7 NUM = 80H ==> 1000 0000
3. 与指令MOV AX,NOT 0F0H 等效的汇编语言指令是(B)。
A. MOV AX,0FH B. MOV AX,0FF0FH
C. MOV AX,000FH D. MOV AX,0F0H
1 MOV AX,NOT 0F0H ; 将0F0H取反,赋值给AX 2 ; 00F0H取反 ==> FF0FH
4. 一个有16 个字的数据区,它的起始地址是70A0H: DDF6,则这个数据区最末一个字单元的物理地址是(C)。
A. 7E806H B. 7E814H
C. 7E815H D. 7E80BH
1 最末一个字单元的物理地址 = 起始地址 + 数据区大小 - 1字大小(1字=2B) 2 = 70A00+DDF6 + 30 3 = 7E7F6
5. 可用作基址变址寻址或寄存器间接寻址的寄存器是(D)。
A. AX,BX,CX,DX B. DS,ES, CS,SS
C. SP,BP,IP,BX D. SI,DI,BP,BX
6. 在串操作指令中,下列描述中不正确的是(C)。
A. REP MOVSB B. REP STOSB C. REPE CMPSB D. REP LODSB
1 A. REP MOVSB ; 字符串传送指令,这条指令按字节传送数据。 2 3 B. REP STOSB ; 从EDI所指的内存开始,将连续的ECX个字节写成AL的内容,多用于清零 4 5 C. REPE CMPSB ; repe是一个串操作前缀,它重复串操作指令,每重复一次ECX的值就减1,一直到CX为0或ZF为0时停止。 cmpsb是字符串比较指令,把ESI指向的数据与EDI指向的数一个一个的进行比较。 6 7 ; 当repe cmpsb配合使用时就是字符串比较啦,当相同时继续比较,不同时不比较 8 9 D. REP LODSB
7. ORG 0030H
DA1 DB 0,‘0’,30H
偏移地址为0030H 字存储单元的内容是(A)。
A. 3000H B. 00H C. 0030H D. 3030H
1 '0'的ascii码是30 2 3 高位字节 --> 低位字节 3000H
8. 编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令是(D)。
A. CMP B. SUB C. AND D. MOV
1 CPU的条件(if)判断是通过标志寄存器(flag寄存器)来实现的 2 只有add、sub、mul、div、inc、or、and这些操作会影响flag寄存器的值 3 mov、push、pop等传送指令不修改标志寄存器的信息。
9. 将高级语言的程序翻译成机器码程序的实用程序是(A)。
A. 编译程序 B. 汇编程序 C. 解释程序 D. 目标程序
1 编译器生成的文件为目标文件
10. 设DS=lE4AH,偏移地址为0056H,该字节的物理地址为(D)。
A. 1E4A6H B. 1E456H C. 1E556H D. 1E4F6H
1 物理地址 = 1E4A0H + 0056H = 1E4F6
11. 假设下列指令中所用的标识符类型均为字类型属性的变量,下述指令中正确的指令是(B)。
A. MOV WORD_DA1,WORD_DA2
B. MOV WORD_DA [BX+4*4] [DI],SP
C. MOV AX,WORD_DA [DX]
D. MOV [BX] [SI],3
1 寻址方式的几种不同写法: 2 [bx+si] 3 [bx][si] 4 [bx].idata 5 [bx].idata[si]
12. 当程序顺序执行时,每取一条指令语句,IP 指针增加的值是(D)。
A. 1 B. 2 C. 3 D. 由指令长度决定的
13. 若AX=349DH,CX=0FH。则执行指令AND AX,CX 后,AX 的值是(B)。
A. 349DCH B. 000DH C. 049DH D. 0240H
1 AX = XXXX XXXX XXXX 1101 2 BX = 0000 0000 0000 1111 3 4 AND AX,BX 5 6 AX = 0 0 0 1101 ==> 000D
14. 在下列四种描述中,不重复执行循环的是(D)。
A. MOV CX,0
LOP: LOOP LOP
B. MOV CX,-1
LOP: LOOP LOP
C. MOV CX,1
LOP: LOOP LOP
D. MOV CX,2
LOP: LOOP LOP
1 A、B是死循环,C只循环一次,D循环两次
15. 若(DS)=2000H,(BX)=0050H,(20050H)=12H,(20051H)=34H,执行MOV AX,[BX]指令后,AX 寄存器中的内容是( )。
A. (AX)=0050H B. (AX)=0012H C. (AX)=1234H D. (AX)=3412H
1 MOV AX,[BX] ; 将20050处的字型数据赋值给AX寄存器。 2 3 ; 字型单元==>高位+低位=3412H
16. 设(AX)=0FC77H,(CX)=504H,CF=1,执行SAR AX,CL 指令后,AX 的值是(C)。
A. FFC8H B. FFC9H C. FFC7H D. FCC8H
17. 假设字节单元(02398H)=12H,(02399H)=34H,(0239AH)=56H,则(02399H)字单
元的内容是(C)。
A. 3412H B. 3456H C. 5634H D. 1234H
1 高位单元(0239A) + 低位单元(02399H)
18. INC WORD PTR [BX]指令中的操作数的数据类型是(C)。
A. 字 B. 双字 C. 字节 D. 四字
1 WORD PTR ; 声明是字类型 2 3 BYTE PTR ; 声明是字节类型
19. 下列4 条指令中,错误的指令是( )。
A. SUB CX, DX B. MOV AX, SS:[DX]
C. SHL AX, 1 D. ADD AX,[BP+SI]
1 A. SUB CX, DX ; 指令含义:CX = CX - DX 2 B. MOV AX, SS:[DX] ; []中不能加DX,[SI,DI,BP,BX],所以B是错的 3 C. SHL AX, 1 ; 逻辑左移 4 D. ADD AX, [BP+SI] ; (AX) = (AX) + ((DS)*16 + (BP+SI))
20. 若AX=912DH,CX=0FH,执行指令OR AX,CX 后,AX 的值是(B)。
A. 000DH B. 912FH C. 912AH D. 002FH
1 AX = 1001 0001 0010 1101 2 BX = 0000 0000 0000 1111 3 与操作 ==> CX = 1001 0001 0010 1111 ==> 912F
二、填空题
1. 在8086/8088 汇编语言中,串操作指令中搜索字符串指令的助记符是 SCAC 。
2. 当发生除法溢出时,OF= 1 。
1 发生溢出,OF=1
3. 指令JMP WORD PTR [BX]属于 段内间接 寻址。
5. DD 伪指令中定义的每个操作数占有 8 个字节。
1 DD ==> 伪指令,双字 2 3 DW ==> 伪指令,字 4 5 DB ==> 伪指令,字节
1. ARRAY2 DB 10H,20H,30,40H
ARRAY3 DW 20DUP(0,1,2,DUP(2))
…
MOV BL,SIZE ARRAY2
MOV CL,SIZE ARRAY3
上述两条指令的等效指令是什么?
1 LENGTH 是汇编语言里的一个运算符,如果一个变量已用重复操作符DUP说明其元素个数,则利用LENGTH运算符可以得到这个变量中元素的个数,如果未用DUP说明,则LENGTH得到的结果总是1 2 3 TYPE 是指这个东西的类型占多少个字节 4 5 SIZE = LENGTH * TYPE
2. 请指出下述两条伪指令语句的区别。
COUNT1 DB 48H
COUNT2 EQU 48H
1 COUNT1 作为地址,在该字节的存储单元中存放数据48H; 2 COUNT2 作为符号名,数据48H直接赋给COUNT2。
3. 请写出完成下列操作所选用的指令。
(1)将AX 的内容减去7A30H 和上次运算的借位。
(2)将变量名TABL 的段地址送AX。
1 (1)SBB AX,7A30H 2 3 (2)MOV AX,SEG TABL
四、程序分析题(每小题5 分,共35 分)
1.
1 MOV AH, 1 2 3 INT 21H 4 5 MOV BL, AL 6 7 MOV AH,1 8 9 INT 21H 10 11 ADD AL,BL 12 13 AAA
上述程序完成的功能是什么? 从键盘上输入两个一位数,然后相加,并把结果放在AH 和AL 中
1 AAA码(非压缩BCD码调整): 2 if(al的低4位 > 9 || af=1){ 3 al += 6 4 ah +=1 5 al的高4位清零 6 cf = 1 7 af = 1 8 }
2. 现有下列程序段:
1 MOV AX,1234H ; AX=1234H 2 3 MOV DX,4578H ; DX=4578H 4 5 MOV CL, 04 ; CL = 04H 6 7 SHL DX,CL ; 逻辑左移4位 DX=0101 0111 1000 0000B = 5780H 8 9 MOV BL,AH ; BL=12H 10 11 SHL AX,CL ; AX=2340H 12 13 SHR AX,CL ; AX=0234H 14 15 OR DL,BL ; DL=1000 0000 BL=0001 0010 or操作 ==> DL=1001 0010
试问上述程序段运行后,(AX)= 0234H ,(BL)= 12H ,(DX)= 5792H 。
3. 假设数据区有:???
DA1 DB 56H
DA2 DB 34H
DA3 DB ?
DA4 DB ?
(1)下列程序段完成的功能是什么?
(2)程序段执行后DA3、DA4 字节单元的内容是什么?
1 MOV AL,DA1 ; (AL)=56H '+' 2 3 ADD AL,DA2 ; (AL)=(AL)+34H=8AH DA1 '+' 结果='-' 溢出 4 5 JO NEXT ; JO==>溢出则跳转 6 7 MOV DA3,AL 8 9 MOV DA4,0 10 11 JMP EXIT 12 13 NEXT: MOV DA4,1 ; DA4==>1 14 15 EXIT: HLT ; HLT==>处理器“暂停”指令
4. 已知(AX)=4321H
1 INC AX ; 4322H 2 3 NEG AX ; BCDEH 4 5 DEC AX ; BCDDH 6 7 NEG AX ; 4323H
上述几条指令执行后,(AX)= 4323H
5. 震惊:算数左移和逻辑左移竟然一样
1 MOV AX,2 ; AX=2 2 3 MOV DX,AX ; DX=2 4 5 SAL AX,1 6 7 SAL AX,1 ; 算数左移2位,相当于原数*4 AX=0008H 8 9 ADD AX,DX ; AX=AX+DX=000AH 10 11 SAR AX,1 ; AX=X X X 0101B=0005H
问:(1)上述程序段执行后完成什么功能? 原数*5/2
(2)程序段执行后AX 寄存器的内容是多少? AX=0005H
6. 设(BX)=76D1H,指令:
MOV CL, 7
SHR BX, CL ; 右移7位
执行后,(BX)= 00edh 。
7. SUB AL,AH
DAS
若指令执行前,(AL)=86H,(AH)=07H;
问:上述指令执行后,(AL)= 79,(CF)=1 ,(AF)= 1。
1 DAS指令(校正2个组合bcd码直接相见的结果): 2 if(al&0fH > 9 || af=1){ 3 al -= 6 4 af = 1 5 cf = 0 6 }if(al > 9fH || cf=1){ 7 al -= 60 8 cf = 1 9 }
五、程序填空题(每小题6 分,共12 分)
1. 以DA 为起始地址的数组中存放的N 个有符号数据,下面程序完成了找出N 个数中的最大和最小值分别送入AH 和AL 中。请将程序段补充完整(每一空白处只填一条指令)。
1 DA DB 12,34,-24,6A,…,98 ;N 个有符号数据 2 3 CUNT EQU $ -DA 4 5 … 6 7 MOV SI,ADR 8 9 MOV CX,CUNT 10 11 MOV BH,[SI] 12 13 MOV BL,BH 14 15 LOP1: __LODSB__ ; INC SI , MOV AL 16 17 CMP AL,BH 18 19 __JLE LOP2__ 20 21 MOV BH,AL 22 23 __JMP LOP3__ 24 25 LOP2: CMP AL,BL 26 27 jGE LOP3 28 29 MOV BL,AL 30 31 LOP3: DEC CX 32 33 __JNZ LOP1__ 34 35 MOV AX,BX
2. 下列程序段完成:2+4+…+20 共10 个偶数的累加和。请将程序段补充完整(每一空白处只填一条指令)。
1 DATA SEGMENT 2 3 SUM DW? 4 5 … 6 7 XOR AX,AX ; ax=0 8 9 __mov cx,10__ 10 11 MOV BX,2 12 13 LOP1: ADD AX,BX 14 15 INC BX 16 17 INC BX 18 19 __dec cx__ 20 21 JNZ LOP1 22 23 MOV SUM,AX
六、编程题(本大题共3 小题,共22 分)
1. 试编写一程序段,将标志寄存器中的符号位SF 置‘1’(5 分)。
1 pushf 2 3 pop ax 4 5 or ax,0000 0000 1000 0000 6 7 push ax 8 9 popf
2. 假设:
DATA SEGMENT
ARRAY DB ‘XXXX…XX’
CUNT EQU $ - ARRAY
…
DATA ENDS
试编写一个程序段,完成用空格将以ARRAY 为起点字符区中的字符清除(5 分)。
1 mov cx,cunt 2 3 s: mov ax,data 4 mov ds,ax 5 6 mov si,offset array 7 mov byte ptr [si],' ' 8 9 inc si 10 11 loop s
3. 定义一个数据区,它包含有23H,24H,25H 和26H 四个字符数据,把这个数据区复制20次,并显示出复制结果(12 分)。
1 ASSUME CS:CODE, DS:DATA, ES:DATA 2 3 DATA SEGMENT 4 ARRAY DB 23H,24H,25H,26H 5 DISP DB 30 DUP(' '),'$' 6 DATA ENDS 7 8 CODE SEGMENT 9 10 START: MOV AX,DATA 11 MOV DS,AX 12 13 ... 14 MOV DX,OFFSET ARRAY(或LEA ARRAY) 15 16 MOV AH,09H 17 INT 21H 18 CODE ENDS 19 END START