第九章 实验8 pdf194页面
assume cs:codesg
codesg segment
mov ax,4c00h
int 21h
start: mov ax,0
s: nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
codesg ends
end start
###研究了会基本上大悟了,nop的作用是 一个字节大小的空代码.这个
实验的关键是 搞明白 短转移操作的本质,即短转移转换为机器码不直接
指示转换的地址而是给出目标地址和原ip地址的位差。
di= s
si= s2
cs[di]=cs[s]=ax=cs[si]=cs[s2]=jmp short s1
本质上 s:处的2个nop ==jmp short s1
##注意 jmp short s1处的代码-机器码 实际上 保存的是s2和s1之间
代码位数差 而不是纯粹的转移到s1
(上段)
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
上面这段地址中 s2~s1的位差和下面的一段中s:~ mov ax,4c00h的位
差是相等的!所以当s0:jmp short s被执行后(代码从s:处开始而s处
代码保留的是s2~s1的位差)因此 ip跳转到了 mov ax,4c00h所在的代
码,至此研究结束这个谜也被本人破解大爽!
(下段)
mov ax,4c00h
int 21h
start: mov ax,0
s: nop |