编码
call qword ptr [rax]
call qword ptr [rcx]
是
FF 10
FF 11
我可以看到最后一个数字(0/1)的来源(寄存器号),但我想弄清楚第二个数字(1)的来源 . 根据AMD64架构程序员手册第3卷:通用和系统指令第56页,
“/ digit - 表示ModRM字节仅指定一个寄存器或存储器(r / m)操作数 . 该数字由ModRM寄存器字段指定,用作指令操作码扩展 . 有效数字值的范围为0到7 . “
等效的英特尔文档说的类似,并且通过寄存器指定的 call
被编码为
FF /2
并且...我不知道这意味着什么,或者规范中的2如何连接到最终结果中的高1位数 . 在任何地方都有不同措辞的解释吗?
2 回答
ModR / M字节有3个字段:
这在Vol.2的
Figure 2-1. Intel 64 and IA-32 Architectures Instruction Format
中有描述 .Intel® 64 and IA-32 Architectures Software Developer’s Manual
的2A .所以,那里:
0x10
=00.010.000
(mod = 0,reg/digit=2
,r/m=0
)和
0x11
=00.010.001
(mod = 0,reg/digit=2
,r/m=1
) .我想你想查看Intel® 64 and IA-32 Architectures Developer's Manual: Combined Volumes中的表2-2,第2卷:指令参考集,第2章:指令格式,2.1.5 ModR / M和SIB字节的寻址模式编码: