汇编常考试题(含有详解) 下载本文

4、请指出下列指令错误原因:

A. OR AX,[CX] CX不能做间址寄存器

B. ADD [SI],[BX][DI]源操作数和目的操作数不能同时为存储器操作数 C. JMP BYTE PTR LOOPS 标号没有BYTE 属性 D. SAR AX,4 循环次数大于1时应先至于CL中 E. RCL DX 没有指定移位次数

5、DS=2000H, AX=2000H, BX=5030H, (25030H)=03H,(25031H)=05H, 那么执行下列语句,A.MOV AX,BX AX= 5030H ;B.MOV AX,[BX] AX= 0503H 6、数据定义如下

X1 DB 10H,100,-1 X2 DW 10H,100,-1 X3 DD ?

COUNT EQU X3-X1

变量COUNT的值是 9 , 其表示的意义是 计算分配给以上变量的存储单元的个数

7、A DW 1234H B DW 5678H ┇ PUSH A PUSH B POP A

POP B

试回答:上述程序段执行后(A)= 5678H ;(B)= 1234H 。 8、设某数据段: DATA SEGMENT

ORG 20H NUM1=8

NUM2=NUM1+10H DA1 DB 'COMPUTER'

DB 0AH,0DH COUNT EQU $-DA1

DA2 DW 'CO','MP','UT','ER' DATA ENDS 试回答:

(1)DA1的偏移地址是:( 20H ) (2)COUNT的值是:(0AH ) (3)DA2+5字节单元的内容是 :( ‘U’ ) 9、下列程序段完成什么工作? DAT1 DB 30 DUP(?) DAT2 DB 10 DUP(?) ┇

MOV CX,10 MOV BX,20 MOV SI,0

17

MOV DI,0

NEXT:MOV AL,DAT1[BX][SI] MOV DAT2[DI],AL INC SI INC DI

LOOP NEXT

把DAT1中的后十个元素放到DAT2中

10、下列语句在存储器中分别为变量数据区分配多少个字节单元? (1)VAR3 DD 10 为VAR3分配4个字节单元; (2)VAR4 DW 4 DUP(?),2 为VAR4 分配10个字节单元。 11、设DS=2000H,BX=1256H,变量TABLE的偏移地址为20A1H,(232F7H)=3280H.下列指令分别执行后,IP的值各是多少?

(1)JMP BX IP=____1256H________________ (2)JMP TABLE[BX] IP=______3280H _____________

12、选用NOT,AND,OR XOR逻辑指令编写一指令序列,实现将AL第0位,第2位同时置1,其他位变反。

AND AL,0FEH;OR AL,4H;XOR AL,0FAH

13、在某子程序的开始处要保护AX,BX,CX,DX四个寄存器信息,在子程序结束时要恢复这四个寄存器信息。例如: PUSH AX PUSH BX PUSH CX PUSH DX

: 恢复现场

试写出恢复现场时的指令序列。

POP DX POP CX POP BX POP AX

14、完成下列操作,选用什么指令:

(1)将AX的内容,减去0520H,和上次运算的借位;

SBB AX,0520H

(2)将变量名TABL的段地址送AX; MOV AX,SEG TABL 15、 D1 DB 20H DUP(?)

D2 DW D1

请写出用一条指令实现取D1的偏移地址送给SI中的三种方法。

① LEA SI,D1

② MOV SI,OFFSET D1 ③ MOV SI,D2

18

16、在8086/8088系统中,存储器是分段组织的,按各段实际长度定位。已知(DS)=2150H,(CS)=2640H,(SS)=2250H,SP=100H,问题:

(1)数据段起始地址是多少? 21500H

(2)计算数据段中最多可以存放多少个字节数据?(要有具体计算式)

22500H-21500H=1000H

(3)代码段最多可以存放多少个字节程序代码?说明理由。

64K 因为分段要求最大为64K

17、已知数据段定义如下: DATA SEGMENT

ORG 100H

BUF DW 'CD',1,3 DUP(4,2 DUP(8,6)) VRA DB 4AH DATA ENDS

单独执行下列语句

LEA BX,BUF BX=__100H _____

MOV CX,VRA-BUF CX=__22H _____(用十六进制数表示)。 18、分别说明下列两组指令中两条指令操作的相同点和不同点 (1)SUB AX,BX CMP AX,BX 相同点:都是做减法

不同点:SUB指令将结果回送给目的操作数,CMP指令不回送给目的操作数

(2)AND CX,DX TEST CX,DX 相同点:都是做与操作

不同点:AND 指令将结果回送给目的操作数,TEST指令不将结果回送给目的操作数

19、下列每组指令中的两条指令有否区别?若有,请说出它们的不同点。 A. MOV AX,OFFSET TABLE LEA AX,TABLE

没有区别

B. JMP SHORT L1 JMP NEAR PTR L1

第一条指令是短跳转,第二条指令是近跳转;

C. MOV AX,[BX] MOV AX,BX

第一条指令BX的内容作为偏移地址,而第二条指令是把BX的内容送给AX; D. SUB DX,CX CMP DX,CX

第一条指令是DX和CX相减结果送给DX,第二条指令也是把DX和CX相减,但不影响每个寄存器的内容,只影响标志位;

E.MOV [BP][DI],AL MOV DS:[BP][DI],AL

第一条指令目的操作数在堆栈段,第二条指令目的操作数在数据段。

20、系统功能调用的方法如何?举例说明。 (1)将调用参数装入指定的寄存器。 (2)如需功能调用号,把它装入AH。 (3)如需子功能调用号,把它装入AL。 (4)按中断号调用DOS或BIOS。 (5)检查返回参数是否正确。

19

例如:MOV AH,2

INT 21H

21、编程序,使:

A.CL寄存器内容取反 NOT CL

B.BX寄存器的低四位置1 OR BX,0FH C.AX寄存器的低四位清0 AND AX,0FFF0H D.CX寄存器的低四位变反 XOR CX,0FFF0H

E.用TEST指令测试DL寄存器的第3位和第6位是否为零。 TEST DL,01001000B 22、指令AND AX,OPR1 AND OPR2中,OPR1和OPR2是两个已赋值的变量,问两个AND操作有什么区别?

第一个AND是与指令,而第二个AND是逻辑与运算。

23、假定(DX)=10111001B,(CL)=0.3,(CF)=1,试确定下列各条指令单独执行后,DX中的值。

(1)SHR DX,1 005CH (2)RCR DL,1 00DCH (3)RCL DX,CL 05CCH 24、写出完成下述功能的程序段:

(1)传送25H到AL寄存器 MOV AL, 25H (2)将AL的内容乘以2 SHL AL, 1 (3)传送15H到BL寄存器 MOV BL, 15H (4)AL的内容乘以BL的内容 MUL BL

并请写出最后(AX)=? (AX)=612H =1554 25、写一程序段,求双字长数DX∶BX的相反数。 NEG DX NEG AX

SBB DX,0

26、在指令系统中,段内、段间返回均为RET指令。试回答: (1)执行段内返回RET指令时,执行的操作是: (IP)←((SP),(SP)+1)

(2)执行段间返回RET指令时,执行的操作是: (IP)←((SP),(SP)+1) (CS) ←((SP)+2,(SP)+3) 27、ARY DW 10 DUP(?) ┇

MOV AL,TYPE ARY MOV BL,LENGTH ARY MOV CL,SIZE ARY

上述MOV指令序列执行后的结果是什么? (AL)=2,(BL)=10,(CL)=20 28、设某数据段: DATA SEGMENT ORG 20H NUM1=8

20