鱼C论坛

 找回密码
 立即注册
查看: 1973|回复: 0

[汇编作业] 深入理解jmp的 相对位移

[复制链接]
发表于 2017-6-22 22:25:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 erh 于 2017-6-22 22:31 编辑
  1. ;----深入理解跳转指令jmp的相对位移---
  2. assume cs:code

  3. code segment

  4.                 mov ax,4c00h  ;这是代码段0的位置,这条语句占3字节
  5.                 int 21h                  ;占2字节
  6.         start:
  7.                 mov ax,0      ;占3字节
  8.           s:nop                          ;标号值为8. 占1字节
  9.                 nop           ;占1字节。9
  10.                
  11.                 mov di,offset s   ;占3字节。A. 执行后di值为8
  12.                 mov si,offset s2  ;占3字节。D. 执行后di值为20
  13.                 mov ax,cs:[si]    ;占3字节。10H 。执行完此语句ax存的是jmp short s1的机器码EBF6,
  14.                                           ;即向前跳10个字节
  15.                 mov cs:[di],ax    ;占3字节。13H   执行完此语句第一个s位置存的是的机器码EBF6,
  16.                                            ;即nop被替换成jmp short s1
  17.                
  18.          s0:jmp short s       ;占2字节。16H  标号值为16H。此时跳到s处,语句已经变为jmp short s1,
  19.                                        ;即向前跳10个字节,恰好跳到cs:0处,接着执行mov ax,4c00h和int 21h.       
  20.          s1:mov ax,0          ;占3字节。18H
  21.                 int 21h           ;占2字节。1BH
  22.                 mov ax,0          ;占3字节。1DH
  23.         ;s2执行完后 到 s1         距离是 -10
  24.          s2:jmp short s1      ;占2字节。20H 标号值为20H,执行完此语句ip指向22H
  25.                 nop
  26.          
  27. code ends
  28. end start
复制代码


一点点的扣,终于完全弄明白了!注意F6是-10的补码形式。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 20:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表