王爽9.9 根据位移进行转移的意义
书上的意义我没有看懂,有人能解释下 根据位移转移到底有什么意义啊,标号换位置了 位移自然也换了,那地址肯定也换了啊 两个都能正常跳转啊?想不明白。。。。。。看圖說故事. 這個跟機械碼有關係
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跳轉的意思
我的理解是,编译器在编译时并不知道系统会把这段程序放在内存中哪一段,所以跳转指令无法知道准确的跳转地址,所以只好用偏移的方式给出跳转地址 本帖最后由 xie1234abc 于 2020-5-16 16:42 编辑
比如:
1000:0100 EB02 jmp 0104
1000:0102 40 inc ax
1000:0103 43 inc bx
1000:0104 89D8 movax,bx
请看上面4条指令,第一条指令 EB02,02就是“位移”值。
CPU执行了EB02 后,就向下跳“02”,去执行“89D8”,就是这个意思。
页:
[1]