STRING1 DB ?The computer? MOV AL,1 CLD
LEA SI,STRING LEA DI,STRING1 MOV CX,12 REPZ CMPSB JZ SKIP MOV AL,0
SKIP: MOV BX,12 SUB BX,CX
(3) MOV AX, DATA MOV ES, AX CLD
MOV AL,'&' LEA DI,STRING MOV CX,26
NEXT: REPNE SCASB JZ FIND JMP EXIT
FIND: MOV BYTE PTR [DI-1], ' ' JCXZ EXIT JMP NEXT EXIT:
(4) LEA SI,STRING LEA DI,CAPS LEA BX,CHART MOV CX,26
NEXT: MOV AL, [SI] CMP AL,?A? JB OTHER CMP AL,?Z? JA OTHER
MOV ES:[DI],AL INC DI JMP SKIP
OTHER: MOV ES:[BX],AL INC BX
SKIP: MOV BYTE PTR[SI],0 INC SI
LOOP NEXT
12. 编程将AX 寄存器中的内容以相反的顺序传送到DX 寄存器中,并要求AX 中的内容不
被破坏,然后统计DX 寄存器中?1?的个数是多少。
答:: MOV BL,0 PUSH AX MOV DX,0 MOV CX,16
NEXT: SHL AX,1 JNC SKIP INC BL
SKIP: RCR DX,1 LOOP NEXT STOP: POP AX
13. 设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H, (20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N 标号的地址为1200:
0278H,PROG_F 标号的地址为3400H:0ABCH。说明下列每条指令执行完后,程序将分别 转移到何处执行? (1)JMP PROG_N (2)JMP BX (3)JMP [BX]
(4)JMP FAR PROG_F
(5)JMP DWORD PTR [BX]
如将上述指令中的操作码JMP 改成CALL,则每条指令执行完后,程序转向何处执行?并
请画图说明堆栈中的内容和堆栈指针如何变化。 答:(1)1200H:0278H (2)1200H:0300H (3)1200H:4800H (4)3400H:0ABCH (5)00FFH:4800H
将操作码JMP 改成CALL 后: (1)1200H:0278H
指令长度为3,则IP=0100H+3=0103H,入栈 …… 03H 01H
5000H:0000H 5000H:03FEH 5000H:0400H SP
(2)1200H:0300H
指令长度为2,则IP=0100H+2=0102H,入栈 …… 02H
01H
(3)1200H:4800H
指令长度为2,则IP=0100H+2=0102H,入栈 …… 02H 01H
(4)3400H:0ABCH
指令长度为5,则IP=0100H+5=0105H,入栈 …… 05H 01H 00H 12H
(5)00FFH:4800H
指令长度为2,则IP=0100H+2=0102H,入栈 5000H:0000H 5000H:03FEH 5000H:0400H SP 5000H:0000H 5000H:03FEH 5000H:0400H SP 5000H:0000H
5000H:03FCH SP 5000H:03FEH 5000H:0400H …… 02H 01H 00H 12H
14. 在下列程序段括号中分别填入以下指令 (1)LOOP NEXT (2) LOOPE NEXT (3) LOOPNE NEXT 试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX 的内容分别是什么。 START: MOV AX,01H MOV BX,02H MOV DX,03H MOV CX,04H NEXT: INC AX ADD BX,AX SHR DX,1 ( )
答:(1) AX=05H BX=10H CX=0 DX=0 (2) AX=02H BX=04H CX=03H DX=01H (3) AX=03H BX=07H CX=02H DX=0
15. 某班有7 个同学英语成绩低于80 分,分数存在ARRAY 数组中,试编程完成以下工作:
(1)给每人加 5 分,结果存到 NEW 数组中 (2)把总分存到SUM 单元中 答: DATA SEGMENT
ARRAY DB ?,?,?,?,?,?,? NEW DB 7 DUP(?) SUM DW 0 DATA ENDS
MOV AX,DATA MOV DS, AX
(1) LEA SI,ARRAY LEA DI,NEW MOV CX,7
NEXT: MOV AL,[SI] ADD AL, 5 MOV [DI], AL INC SI INC DI
LOOP NEXT
(2) LEA SI,ARRAY CLC
SP 5000H:0000H 5000H:03FCH 5000H:03FEH 5000H:0400H MOV CX, 7
NEXT1:MOV AL,[SI] MOV AH, 0 ADC SUM, AX INC SI
LOOP NEXT1
16. 中断向量表的作用是什么?它放在内存的什么区域内?中断向量表中的什么地址用于 类型3 的中断?
答:中断向量表用来存放中断服务程序的入口地址。8086 的256 类中断的入口地址要占用
1K 字节,位于内存00000H~003FFH 的区域内。中断向量表中0000CH~0000FH 用于类型 3 的中断。
17. 设类型2 的中断服务程序的起始地址为0485:0016H,它在中断向量表中如何存放? 答:物理地址 内容 00008H 16H 00009H 00H 0000AH 85H 0000BH 04H
18. 若中断向量表中地址为0040H 中存放240BH,0042H 单元里存放的是D169H,试问:
(1)这些单元对应的中断类型是什么? (2)该中断服务程序的起始地址是什么? 答:(1)10H
(2)D169H:240BH
19. 简要说明8086 响应类型0~4 中断的条件是什么? 答:类型0:除法错中断
执行除法指令时,若除数为0 或所得商超过寄存器能容纳的范围,则自动产生类型0 中断。
类型1:单步中断
若CPU 的单步标志TF=1,则每执行完一条指令后,自动产生类型1 中断。
类型2:不可屏蔽中断NMI
当8086 的NMI 引脚上接收到由低变高的电平变化时,将自动产生类型2 中断。 类型3:断点中断
若在程序中某位置设置断点,当程序执行到该断点时,则产生类型3 中断。 类型4:溢出中断 若溢出标志OF=1,则可由溢出中断指令INTO 产生类型4 中断。 第四章
1. 下列变量各占多少字节? A1 DW 23H,5876H A2 DB 3 DUP(?),0AH,0DH, ?$? A3 DD 5 DUP(1234H, 567890H) A4 DB 4 DUP(3 DUP(1, 2,?ABC?)) 答:A1 占4 个字节 A2 占6 个字节 A3 占40 个字节 A4 占60 个字节
2. 下列指令完成什么功能?
MOV AX,00FFH AND 1122H+3344H MOV AL,15 GE 1111B
MOV AX,00FFH LE 255+6/5