assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,offset sqr;设置ds:si
mov ax,0
mov es,ax
mov di,200h;设置es:di
mov cx,offset sqrend-offset sqr
cld
rep movsb;(安装中断例程:字符串传送)
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0;设置中断向量表
s: mov ax,3456
int 7ch
add ax,ax
adc dx,dx
mov ax,4c00h
int 21h
sqr: mul ax
iret
sqrend: nop;中断例程
code ends
end start
==================================
DEBUG上跟踪执行:
0000:0219 0000 ADD [BX+SI],AL
0000:021B 0000 ADD [BX+SI],AL
0000:021D 0000 ADD [BX+SI],AL
0000:021F 0000 ADD [BX+SI],AL
-t
AX=4000 BX=0000 CX=0000 DX=00B6 SP=FFFA BP=0000 SI=0039 DI=0203
DS=0B68 ES=0000 SS=0B68 CS=0000 IP=0202 OV UP DI PL NZ NA PO CY
0000:0202 CF IRET;碰到IRET和INT指令(相对于转移指令),需T(单步)执行,否则则出现以下两种问题!
-t
AX=4000 BX=0000 CX=0000 DX=00B6 SP=0000 BP=0000 SI=0039 DI=0203
DS=0B68 ES=0000 SS=0B68 CS=0B68 IP=002D NV UP EI PL NZ NA PO NC
0B68:002D 03C0 ADD AX,AX
-t
AX=8000 BX=0000 CX=0000 DX=00B6 SP=0000 BP=0000 SI=0039 DI=0203
DS=0B68 ES=0000 SS=0B68 CS=0B68 IP=002F OV UP EI NG NZ NA PE NC
0B68:002F 13D2 ADC DX,DX
-t
AX=8000 BX=0000 CX=0000 DX=016C SP=0000 BP=0000 SI=0039 DI=0203
DS=0B68 ES=0000 SS=0B68 CS=0B68 IP=0031 NV UP EI PL NZ NA PE NC
0B68:0031 B8004C MOV AX,4C00
-
++++
++++
问题1:
0B68:0034 CD21 INT 21
0B68:0036 F7E0 MUL AX
0B68:0038 CF IRET
0B68:0039 90 NOP
0B68:003A 36 SS:
0B68:003B 96 XCHG SI,AX
0B68:003C 16 PUSH SS
0B68:003D 8B00 MOV AX,[BX+SI]
0B68:003F 898672FF MOV [BP+FF72],AX
0B68:0043 8BD8 MOV BX,AX
0B68:0045 D1E3 SHL BX,1
0B68:0047 8B369A16 MOV SI,[169A]
-t
AX=0D80 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0039 DI=0203
DS=0B68 ES=0000 SS=0B68 CS=0B68 IP=002B NV UP EI PL NZ NA PO NC
0B68:002B CD7C INT 7C
-g 3a;g命令执行但看不到正确结果??
Program terminated normally
-r
AX=0D80 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0039 DI=0203
DS=0B68 ES=0000 SS=0B68 CS=0B68 IP=002B NV UP EI PL NZ NA PO NC
0B68:002B CD7C INT 7C
-
++++
问题2:
Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
Object Modules [.OBJ]: p1
Run File [P1.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment
C:\DOCUME~1\ADMINI~1>p1.exe;直接加载执行DEBUG上依然看不到结果??
C:\DOCUME~1\ADMINI~1>debug
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B04 ES=0B04 SS=0B04 CS=0B04 IP=0100 NV UP EI PL NZ NA PO NC
0B04:0100 7403 JZ 0105
-q
C:\DOCUME~1\ADMINI~1>debug p1.exe
-r
AX=0000 BX=0000 CX=003A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B58 ES=0B58 SS=0B68 CS=0B68 IP=0000 NV UP EI PL NZ NA PO NC
0B68:0000 8CC8 MOV AX,CS
-