鱼C论坛

 找回密码
 立即注册
查看: 3085|回复: 4

关于jmp一个小问题,求助

[复制链接]
发表于 2012-3-4 11:11:08 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 Sing 于 2012-3-4 12:03 编辑

学到jmp时,遇到了一些不懂的地方,还请各位指教指教。

有一个程序如下:

assume cs:code
code segment
    start:  jmp short s
              db 128 dup (0)
          s:  mov ax, 0fffh
code ends
end start

说明:这是一个转移位移出现了越界的程序。

问题一,如何判断jmp指令往上跳还是往下跳呢?是不是看标号处在jmp指令的上面还是下面?是否如果标号在jmp上面,则往上跳,在jmp下面则往下跳。往上跳时是否jmp short s最多不能超过128,往下跳时是否最多不能超过127?
问题二,上面的程序中,jmp往下跳时,为什么没有跳过db 128 dup (0)这个操作符,反而程序还判断出了出现超界,这是不是说明jmp指令只跳过指令,比如只跳过mov ax, 0 之类的,对操作符不起作用。如果jmp指令真的只跳过指令,那上面程序操作符db 128 dup (0)能不能写在jmp short s 上面,写法如下:

         db 128 dup (0)
start: jmp short s

不知道上面这样写行不行呢?

看完上面问题的鱼友们一定是很在耐心的,谢谢你帮我解答哦。

最佳答案

查看完整内容

问题一: jmp跳转有很多格式,就题目中的这种跳转而言,它是段内近转移,它计算出跳转的位移在转移,所以楼主说的是对的。 问题二:jmp不是只跳过指令,而是题目中的这种jmp short 标号 是段内近转移,只修改ip的值,而修改的范围是-128~127, 而题目中要求向下跳128b 所以超出范围而越界,写在上面是可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-4 11:11:09 | 显示全部楼层
问题一: jmp跳转有很多格式,就题目中的这种跳转而言,它是段内近转移,它计算出跳转的位移在转移,所以楼主说的是对的。
问题二:jmp不是只跳过指令,而是题目中的这种jmp short 标号 是段内近转移,只修改ip的值,而修改的范围是-128~127, 而题目中要求向下跳128b  所以超出范围而越界,写在上面是可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-4 12:01:51 | 显示全部楼层

好的。谢了哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-4 12:37:38 | 显示全部楼层
xcxxcxcxcxc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-11 16:25:17 | 显示全部楼层
问题一: jmp跳转有很多格式,就题目中的这种跳转而言,它是段内近转移,它计算出跳转的位移在转移,所以楼主说的是对的。
问题二:jmp不是只跳过指令,而是题目中的这种jmp short 标号 是段内近转移,只修改ip的值,而修改的范围是-128~127, 而题目中要求向下跳128b  所以超出范围而越界,写在上面是可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 14:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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