MOV AH,SUM+1 MOV BL,07H DIV BL
MOV AVG, AL HLT CODE ENDS
END START
13. 设CS=1200H, IP=0100H, SS=5000H, SP=0400H, DS=2000H, SI=3000H, BX=0300H, (20300H)=4800H, (20302H)=00FFH, TABLE=0500H, PROG_N标号的地址为1200:0278 H,PROG_F标号的地址为3400:0ABCH。说明下列每条指令执行完后,程序分别转移到何处执行? JMP指令 (1)JMP PROG_N
段内直接近转移,目的地址为1200H:0278H(或12278H) (2)JMP BX
段内寄存器间接转移,目的地址为1200H:0300H(或12300H) (3)JMP [BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H (20300H)=4800H→IP
段内存储器间接转移,目的地址为1200H:4800H(或16800H) (4)JMP FAR PROG_F
段间直接转移,目的地址为3400H:0ABCH(或34ABCH) (5)JMP DWORD PTR[BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H (20300H)=4800H→IP, (20302H)=00FFH→CS
段间存储器间接转移,目的地址为00FFH:4800H(或057F0H) JMP改为CALL后,目的地址与JMP相同。 (1)CALL PROG_N
段内直接调用,3字节指令,目的地址为1200H:0278H(或12278H),0103H入栈,SP=03FEH (2)CALL BX
段内寄存器间接调用,2字节指令,目的地址为1200H:0300H(或12300H) ,0102H入栈,SP=03FEH (3)CALL [BX]
段内存储器间接调用,2字节指令,目的地址为1200H:4800H(或16800H),0102H入栈,SP=03FEH (4)CALL FAR PROG_F
段间直接调用,5字节指令,目的地址为3400H:0ABCH(或34ABCH),1200H和0105H分别入栈,SP=03FCH
(5)CALL DWORD PTR[BX]
段间间接调用,2字节指令,目的地址为00FFH:4800H(或057F0H),1200H和0102H分别入栈,SP=03FCH 部分调试程序:
STACK SEGMENT STACK
DB 100 DUP(?) STACK ENDS DATA SEGMENT BUF DW 12
BUF1 DW 100 DUP (?) ORG 300H
DB 00H,48H,0FFH,00H DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS
MOV AX,DATA
MOV DS,AX MOV BX,0300H CALL PROG_N CALL BX CALL [BX] ORG 0278 PROG_N:RET ORG 0300H RET ORG 4800H RET
HLT CODE ENDS
END START
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 ( ) 解:
LOOP过程: AX BX CX
初始值
01H
循环1次 02H 循环3次 04H 循环4次 05H 结果:
AX BX CX
DX
04H 0BH 10H
DX
03 H
02H 04H
03H 01H 01H 00H
00H 00H
循环2次 03H 07H 02H 00H
(1) (2) (3)
05H 02H 03H
10H 04H 07H
00H 03H 02H
00H 01H 00H
执行一次,ZF=0,退出循环。 执行两次,ZF=1,退出循环。
20. 设8086CPU的时钟频率为5MHz,请编写延时5ms的子程序。 解:微机的主频率为5MHz
则:时钟周期=主频率的倒数=1/(5×10-6)=0.2μs
延时5ms需要的时钟周期数= 5ms/ 0.2μs=25000 延时子程序如下:
DELAY5:MOV CX,N 4 DLY1:NOP 3 ×N LOOP DLY1 17 ×(N-1)+ 5 RET 16
应该有25000=4+ 3 ×N+ 17 ×(N-1)+ 5+16,才能实现要求的延时。则: N=1250=04E2H 延时子程为:
DELAY5:MOV CX,04E2H DLY1:NOP LOOP DLY1 RET
第4章作业
P153
5. 阅读下列程序,说明每条指令执行后的结果是什么?
X1 DB 65H, 78H X2 DW 06FFH, 5200H X3 DD ?
GO: MOV AL, TYPE X1 MOV BL, TYPE X2 MOV CL, TYPE X3
MOV AH, TYPE GO MOV BH, SIZE X2
MOV CH, LENGTH X3 解:
(1)前三条语句的功能是设置数据于数据段中,从数据段偏移地址0000H开始存放。 变量 X1 X2 X3
偏移地址 0000H 0001H 0002H 0003H 0004H 0005H 0006H
数据 65H 78H FFH 06H 78H 00H 随机数
0007H 0008H 0009H
随机数 随机数 随机数 程序汇编后结果如下:
六条程序执行结果如下:
(AL)=01H;设置变量类型属性,字节数 (BL)=02H;设置变量类型属性,字节数 (CL)=04H;设置变量类型属性,字节数
(AH)=0FFH;设置GO显示类型,近标号,为-1,补码表示 (BH)=02H;设置数据类型,无DUP时,返回数据类型的字节数 (CH)=01H;无DUP时,返回1。 程序执行后结果如下:
调试程序如下:
STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS DATA SEGMENT X1 DB 65H, 78H X2 DW 06FFH, 5200H X3 DD ? DATA ENDS