如何解决了解指令编码?
我使用了一个网站来对此进行编码:
movw $8,4(%r8d,%esi,4)
并得到:
encoding (hex): 67 66 41 C7 44 B0 04 08 00
多亏了你,我几乎明白了除了 2 个小点之外的一切:
- 这里我们将 2 个字节的立即数移动到 4 个字节的地址。他们使用了 C7 操作码,根据我的表格,它意味着以下之一:
- 将 imm16 移动到 r/m16
- 将 imm32 移动到 r/m32
- mov imm32(符号扩展)到 r/m64
为什么没有匹配?
- 为什么立即数是 2 个字节?根据什么?
解决方法
有一场比赛。它是第一个“mov imm16 to r/m16”,因为 w
在助记符 movw
中。 r/m16
表示正在读取/写入 16 位(两个字节)的内存。碰巧您使用 32 位有效地址来标识要写入哪两个内存字节,但这不是 r/m16
表示法的一部分。
立即数是两个字节,因为要写入两个字节。拥有更多是没有意义的。虽然有一些例子,比如第三种情况,其中立即数比操作数的大小短,并且是零或符号扩展。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。