|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 yearn2005 于 2013-6-6 00:57 编辑
做到实验8 ,整个程序流程是理清了 但不明白 执行了INT21后 为什么IP=0000 有大虾来科普下吗 assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start: mov ax,0 ;该处偏移地址为0005 执行到15行时候被改写为标号S2出的内容【jmp short s1】
s: nop ;该处偏移地址为0008
nop
mov di,offset s ;取得标号S处的偏移地址0008装如DI寄存器中
mov si,offset s2 ;取得标号S2处的偏移地址0020装入SI寄存器
mov ax,cs:[si] ;cs:[0020]的内容装入AX
mov cs:[di],ax ;通过以上步骤 标号S处【偏移地址0008】被改写为标号S2出的内容【jmp short s1】
s0: jmp short s ;跳转到【0005处】执行了 【jmp short s1】
s1: mov ax,0
int 21h ;执行到这IP被改为0000 于是程序执行CS:0000 {
mov ax,0
s2: jmp short s1
nop
codesg ends
end start
F:\a>debug s8.exe
-r
AX=0000 BX=0000 CX=0023 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=13D9 ES=13D9 SS=13E9 CS=13E9 IP=0005 NV UP EI PL NZ NA PO NC
13E9:0005 B80000 MOV AX,0000
-u
13E9:0005 B80000 MOV AX,0000
13E9:0008 90 NOP
13E9:0009 90 NOP
13E9:000A BF0800 MOV DI,0008
13E9:000D BE2000 MOV SI,0020
13E9:0010 2E CS:
13E9:0011 8B04 MOV AX,[SI]
13E9:0013 2E CS:
13E9:0014 8905 MOV [DI],AX
13E9:0016 EBF0 JMP 0008
13E9:0018 B80000 MOV AX,0000
13E9:001B CD21 INT 21
13E9:001D B80000 MOV AX,0000
13E9:0020 EBF6 JMP 0018
13E9:0022 90 NOP
13E9:0023 CD21 INT 21
|
|