的编码为
call qword ptr [rax]
call qword ptr [rcx]
is
FF 10
FF 11
我可以看到最后一个数字 (0/1) 来自哪里(寄存器编号),但我试图找出倒数第二个数字 (1) 来自哪里。根据AMD64 架构程序员手册第 3 卷:通用指令和系统指令第 56 页,
“/digit - 表示 ModRM 字节仅指定一个寄存器或内存 (r/m) 操作数。该数字由 ModRM reg 字段指定,并用作指令操作码扩展。有效数字值范围为 0 到 7。 ”
等效的英特尔文件也说了类似的内容,并且call
通过寄存器被指定编码为
FF /2
而且...我不知道这意味着什么,也不知道规范中的 2 如何连接到最终结果中的高 1 位数字。是否有其他措辞不同的解释?
ModR/M 字节有 3 个字段:
bit 7 & bit 6 = mod
bit 5 through bit 3 = reg = /digit
bit 2 through bit 0 = r/m
这被描绘在Figure 2-1. Intel 64 and IA-32 Architectures Instruction Format
卷。 2A的Intel® 64 and IA-32 Architectures Software Developer’s Manual
.
所以,有:
0x10
= 00.010.000
(模=0,reg/digit=2
, r/m=0
)
and
0x11
= 00.010.001
(模=0,reg/digit=2
, r/m=1
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)