erh 发表于 2017-6-22 22:25:22

深入理解jmp的 相对位移

本帖最后由 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:    ;占3字节。10H 。执行完此语句ax存的是jmp short s1的机器码EBF6,
                                          ;即向前跳10个字节
                mov cs:,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的补码形式。{:10_245:}
页: [1]
查看完整版本: 深入理解jmp的 相对位移