HLT
问:该程序完成的功能是 。
19. 分析下面的程序,回答指定的问题。
DAT1 DB 0,1,2,3,4,5,6,7,8,9 DAT2 DB 5 DUP(?)
?
MOV CX,5 MOV BX,5 MOV SI,0 MOV DI,0
NEXT: MOV AL,DAT1[BX+SI]
MOV DAT2[DI],AL INC SI INC DI LOOP NEXT
问:(1)该程序完成的功能是什么?
(2)程序执行后写出DAT2数据区的内容是什么?
20. 指出下列程序段完成的操作。 MOV CL,4 MOV DL,AL AND DL,0FH SHR AL,CL AND AL,0FH MOV DH,DL MOV BL,AH AND BL,0FH SHR AH,CL AND AH,0FH MOV AL,AH MOV CL,DH
21. 如果把AX,BL和DH中的内容分别乘以8,使用下面指令序列能完成此工作吗?为什么?
MOV CL,3 SHL AX,CL SHL BL,CL SHL DH,CL
22. 什么是宏指令语句?为何要使用宏指令语句?如何使用?
23.下列语句中,哪些是无效的汇编语言指令?并指出无效指令中的错误。
(1)MOV SP,AL
(2) MOV WORD-OP[BX+4*3][SI],SP (3) MOV VAR1,VAR2 (4) MOV CS,AX (5) MOV DS,BP
(6) MOV SP,SS:DATA-WORD[SI][DI] (7) MOV AX,VAR1+VAR2
(8) MOV AX,[BX-SI] (9) INC [BX]
(10) MOV 25,[BX]
(11) MOV [8-BX],WORD PTR 25 (12) MOV AL,DATA2[SI] (13) MOV AX,OLA-DATA (14) MOV AX,[BX*7]
(15) MOV AL,BYTE PTR[SI-100H]
24.若数组ARRAY在数据段中已作以下定义 ARRAY DW 100 DUP(?)
试指出下列语句中操作数中的各操作符的作用,指令执行后各寄存器产生了什么变化? MOV BX,OFFSET ARRAY MOV CX,LENGTH ARRAY MOV SI,0
ADD SI,TYPE ARRAY
25. 试分析下列程序段,说明完成了什么操作?
SKEY DB 2
?
START: MOV AL,SKEY
LEA BX,BRATB SHL AL,1 XOR AH,AH ADD BX,AX JMP BX ?
BRATB: JMP SHORT ZERO
JMP SHORT ONE JMP SHORT TWO JMP SHORT THREE ?
26.执行下列程序段前,BUFFER存储区的数据为: DB 1,2,3,4,5,6
请给出执行下面程序段后BUFFER存储区中的数据。 MOV SI,OFFSET BUFFER MOV CX,5 XOR AL,AL AGAIN: SHL [SI],1
INC SYTE PTR[SI] ADD AL,[SI] INC SI LOOP AGAIN MOV [SI],AI HLT
27.判断下列指令或程序是否有错,若有错,请指出错在哪里? (1)K1 EQU 1024
?
MOV K1,AX
(2) MOV DS,100
MOV [1000],[2000]
(3) IMP DB ?
?
MOV IMP,AX
(4) A1 DB ?
A2 DB 10 ?
CMP A1,A2
(5)将1000送入X1单元,用如下程序:
X1 DB ? ?
MOV BX,X1
MOV [BX],1000
28.假设VAR1和VAR2为自变量,LAB为程序中的一个标号,试找出下列指令的错误之处。
(1)ADD VAR1,VAR2 (2)SUB AL,VAR1 (3)JNZ VAR1 (4)JMP LAB[SI] (5)JMP NEAR LAB 26.有符号定义语句如下:
BUFF DB 1,2,3,‘123’
EBUFF DB 0
L EQU EBUFF-BUFF 问L的值为多少?
29.假设程序中的数据定义如下:
LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE_LIST DB 1,7,8,3,2
(1)用一条MOV指令将LNAME的偏移地址放入BX。
(2)用一条指令将CODE_LIST的头两个字节内容放入SI。
(3)写一条伪指令使CODE_LENTH的值等于CODE_LIST域的实际长度。
30.指出下列伪指令表达方式的错误,并改正之。 (1)STACK_SEG SEGMENT‘STACK’ (2)DATA_SEG SEG
(3)SEGMENT ‘CODE’
(4)MYDATA SEGMENT‘DATA’
? ENDS
(5)MAIN_PROC PROC FAR
?
END MAIN_PROC MAIN_PROC ENDP
31. 指出下列每一对伪指令语句的区别。
(1) X1 DB 76
X2 EQU 76
(2) X1 DW 3548H
X2 EQU BYTE PTR X1
(3) X1 EQU 3
X2=3
(4) X1 DW 3678H
X2 DB 36H,78H
(5) X1 DW 6341H
X2 DW 6341
32. 假设程序中的数据定义如下:
PARTNO DW ?
PNAME DB 16 DUP(?) COUNT DD ?
PLENTH EQU $-PARTNO
问PLENTH的值为多少?它表示什么意义?
四、计算
1.已知x,机器字长为8位,试求 [x]原、[x]反、[x]补?
(1)x = +1001101B (2) x = +0001110B (3) x = -1011001B (4) x = -0100111B
2.已知x及y,试分别计算[x+y]补、[x-y]补,并指出是否产生溢出(设补码均用8位表示)。
(1)x = +1001110, y = +0010110 (2)x = +0101101,y = -1100100 (3)x = -0101110,y = +0111011 (4)x = -1000101,y = -0110011
3.完成下列各式补码数的运算,指出运算结果是否有效。
(1)00101101+10011100 (2)01011101-10111010 (3)70ADH-0B1CEH (4)0A2C0H+1234H
4. 一个16位二进制整数,若采用补码表示,由5个“1”和11个“0”组成,则最小值是多少?最大值是多少?(用十进制数表示)
5.已知(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?
(1) 立即寻址 (2) 直接寻址
(3) 使用BX的寄存器寻址
(4) 使用BX的寄存器间接寻址 (5) 使用BX的寄存器相对寻址
6.在0624H单元内有一条二字节指令:JMP SHORT OBJ,若其中位移量分别为(1) 27H,(2) 6BH,(3)0C6H,试问转向地址OBJ的值是多少?
7.求出以下各十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF,ZF,CF和OF的值。
(1)1234H (2) 4321H (3) 0CFA0H (4) 9D60H
8.设(DS)=2000H,(BX)=1256H,(SI)=528FH,TABLE=20A1H,(232F7H)=3280H,
(264E5H)=2450H,执行下述指令
(1)JMP BX ;(IP)=? (2) JMP TABLE[BX] ;(IP)=? (3) JMP [BX][SI] ;(IP)=?
9.给定(IP)=2BC0H,(CS)=0200H,位移量D=5119H,(BX)=1200H,(DS)=212AH, (224A0)=0600H,(275B9)=098AH,试为以下的转移指令找出转移的偏移地址。
(1)段内直接寻址。
(2)使用BX及寄存器间接寻址方式的段内间接寻址。 (3)使用BX及寄存器相对寻址方式的段内间接寻址。
10.求出以下各十六进制数与十六进制数4AE0H之差,并根据结果设置标志位SF,ZF,CF和OF的值。
(1)1234H (2) 5D90H (3) 9090H (4) 0EA04H
11. 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,20100H=12H,(20101)=34H,(20102)=56H, (20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=0B7H,(21203)=65H,试说明下列各条指令执行完后AX寄存器的内容。
(1) MOV AX,1200H (2) MOV AX,BX
(3) MOV AX,[1200H] (4) MOV AX,[BX]
(5) MOV AX,1100[BX] (6) MOV AX,[BX][SI]
(7) MOV AX,1100[BX][SI]
12. 已知(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H, (SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228)=1E40H,(1EAF6H)=091DH,试求单独执行下列指令后的结果。
(1) MOV CL,20H[BX][SI] ;(CL)=? (2) MOV [BP][DI],CX ;(1E4F6H)=? (3) LEA BX,20H[BX][SI] ;(BX)=?
MOV AX,2[BX] ;(AX)=?
(4) LDS SI,[BX][DI] ;(SI)=?
MOV [SI],BX ;((SI))=?
(5) XCHG CX,32H[BX] ;(CX)=?
XCHG 20[BX][SI],AX ;(AX)=? (09226H)=?
五、应用
1.试根据以下要求写出相应的汇编语言指令。
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。 (2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3)用BX寄存器和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4)用位移量0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。
(5)把数0B5H的与(AL)相加,并把结果送回AL中。
2. 不用乘法指令实现(AX)与10的乘法运算。