鱼C论坛

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

IP是如何知道要偏移多少位的呢?

[复制链接]
发表于 2011-5-31 23:30:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jslose 于 2011-6-1 00:47 编辑


                               
登录/注册后可看大图


比如这个图中的MOV指令,可以是2个字节,也可以是3个字节。


也就是说是如何知道哪几个字节是一条指令。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-1 01:19:49 | 显示全部楼层
呃,这个问题还真不好说,修修改改好几回
简单说,助记符是规定好的,哪种情况下用什么助记符都是规定好的
比如mov ax,0123h 16位的立即数传给16位ax寄存器,助记符就是B8,助记符后面还有2个字节的立即数,所以IP偏移3
    mov ax,bx 16位的寄存器传给16位ax寄存器,助记符就是89,助记符后面还有一个16位寄存器的助记符,所以IP偏移2
你可能也注意到了,同样时mov ax,但它们的助记符却不相同,原因是它们的第二个操作数一个是立即数,一个是寄存器
mov指令在不同情况下的助记符就有几十种,什么情况下用什么助记符都是规定的,所以它绝不可能搞错的

这个不是我们关注的重点,我们只要知道它在编译时会自动无误的生成就可以了,指令占用2字节还是3字节,对我们学习汇编是没有影响的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-1 09:01:02 | 显示全部楼层
你要知道汇编语言是计算机机器码的助记符,每一个汇编指令都有一个固定的机器码和它一一对应来保证硬件可以实现它的功能,所以是2字节还是3字节是在CPU内部事先规定好的,因为在你看起来MOV ax,0123H
和MOV ax,bx好像都是MOV指令,但其实不是的,CPU会把这2条指令当作完全不同的指令来处理,所以你不必担心CPU会分不清楚2字节或者3字节的问题,因为第一个字节中的代码里已经隐式规定了这个事情
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-1 10:07:48 | 显示全部楼层
winddyj 发表于 2011-6-1 01:19
呃,这个问题还真不好说,修修改改好几回
简单说,助记符是规定好的,哪种情况下用什么助记符都是规定好的
比 ...

比如mov ax,0123h 16位的立即数传给16位ax寄存器,助记符就是B8,助记符后面还有2个字节的立即数,所以IP偏移3
    mov ax,bx 16位的寄存器传给16位ax寄存器,助记符就是89,助记符后面还有一个16位寄存器的助记符,所以IP偏移2


这里的IP偏移3  助记符是1 助记符后面的2个字节是指01 23这2个吗
ax助记符1 bx助记符1 这样IP就偏移2   
是这样的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-1 11:27:26 | 显示全部楼层
再生缘 发表于 2011-6-1 10:07
比如mov ax,0123h 16位的立即数传给16位ax寄存器,助记符就是B8,助记符后面还有2个字节的立即数,所以IP偏移 ...

没有错,看样子你已经明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-18 23:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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