|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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的补码形式。 |
|