鱼C论坛

 找回密码
 立即注册
查看: 2649|回复: 3

[已解决]王爽9.9 根据位移进行转移的意义

[复制链接]
发表于 2019-11-4 15:51:00 | 显示全部楼层 |阅读模式

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

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

x
书上的意义我没有看懂,有人能解释下 根据位移转移到底有什么意义啊,标号换位置了 位移自然也换了,那地址肯定也换了啊 两个都能正常跳转啊?想不明白。。。。。。
最佳答案
2019-11-4 17:44:54
JMP+ (2).jpg

看圖說故事. 這個跟機械碼有關係
JCXZ的機械碼是E3
第一行的機械碼E334, JCXZ 0058 是跳到58, 但是他的機械碼34並不是58,
這是因為它使用了根據位移進行轉移,
你會說這不是廢話嗎, 我就是不懂"根據位移進行轉移"
且聽我細細道來, 你看綠色的下標,
JCXZ的下一行位址是24
24 位移(OFFSET) 34 就是58
所以 E334這個機械碼翻譯成 JCXZ 0058

那麼我們在看下面紅色的地方,
JCXZ 0054 的機械碼是 E329
那就是說下一行指令 002B位移了29 就是這個JCXZ要跳轉的地方, 29+2B = 0054

其實呢, 機械碼會把直接數字直接顯示在機械碼中, 但是JMP/JCXZ....等等的跳轉指令, 它顯示在機械碼上的值, 就是位移值, 而不是直接跳轉的值
所以才說這是根據位移進行轉移, 後面的轉移就是JMP跳轉的意思



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

使用道具 举报

发表于 2019-11-4 17:44:54 | 显示全部楼层    本楼为最佳答案   
JMP+ (2).jpg

看圖說故事. 這個跟機械碼有關係
JCXZ的機械碼是E3
第一行的機械碼E334, JCXZ 0058 是跳到58, 但是他的機械碼34並不是58,
這是因為它使用了根據位移進行轉移,
你會說這不是廢話嗎, 我就是不懂"根據位移進行轉移"
且聽我細細道來, 你看綠色的下標,
JCXZ的下一行位址是24
24 位移(OFFSET) 34 就是58
所以 E334這個機械碼翻譯成 JCXZ 0058

那麼我們在看下面紅色的地方,
JCXZ 0054 的機械碼是 E329
那就是說下一行指令 002B位移了29 就是這個JCXZ要跳轉的地方, 29+2B = 0054

其實呢, 機械碼會把直接數字直接顯示在機械碼中, 但是JMP/JCXZ....等等的跳轉指令, 它顯示在機械碼上的值, 就是位移值, 而不是直接跳轉的值
所以才說這是根據位移進行轉移, 後面的轉移就是JMP跳轉的意思



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

使用道具 举报

发表于 2020-5-16 14:46:34 | 显示全部楼层
我的理解是,编译器在编译时并不知道系统会把这段程序放在内存中哪一段,所以跳转指令无法知道准确的跳转地址,所以只好用偏移的方式给出跳转地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-16 16:33:09 | 显示全部楼层
本帖最后由 xie1234abc 于 2020-5-16 16:42 编辑

比如:
1000:0100                EB02            jmp        0104
1000:0102                40                inc        ax
1000:0103                43                inc        bx
1000:0104                89D8           mov  ax,bx

请看上面4条指令,第一条指令 EB02,02就是“位移”值。
CPU执行了EB02 后,就向下跳“02”,去执行“89D8”,就是这个意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 00:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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