马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 erh 于 2017-6-22 22:31 编辑 ;----深入理解跳转指令jmp的相对位移---
assume cs:code
code segment
mov ax,4c00h ;这是代码段0的位置,这条语句占3字节
int 21h ;占2字节
start:
mov ax,0 ;占3字节
s:nop ;标号值为8. 占1字节
nop ;占1字节。9
mov di,offset s ;占3字节。A. 执行后di值为8
mov si,offset s2 ;占3字节。D. 执行后di值为20
mov ax,cs:[si] ;占3字节。10H 。执行完此语句ax存的是jmp short s1的机器码EBF6,
;即向前跳10个字节
mov cs:[di],ax ;占3字节。13H 执行完此语句第一个s位置存的是的机器码EBF6,
;即nop被替换成jmp short s1
s0:jmp short s ;占2字节。16H 标号值为16H。此时跳到s处,语句已经变为jmp short s1,
;即向前跳10个字节,恰好跳到cs:0处,接着执行mov ax,4c00h和int 21h.
s1:mov ax,0 ;占3字节。18H
int 21h ;占2字节。1BH
mov ax,0 ;占3字节。1DH
;s2执行完后 到 s1 距离是 -10
s2:jmp short s1 ;占2字节。20H 标号值为20H,执行完此语句ip指向22H
nop
code ends
end start
一点点的扣,终于完全弄明白了!注意F6是-10的补码形式。 |