3. x87 指令解析
fadd qword ptr gs:[rax + r10 * 8 + 0x11223344] |
这条指令的 operand 寻址是 memory
下面看看它的分解组成部分
65 |
0100 |
1 |
0 |
1 |
0 |
DC |
10 |
000 |
100 |
11 |
010 |
000 |
44 33 22 11 |
legacy prefix |
4 |
W |
R |
X |
B |
opcode |
mod |
reg |
r/m |
scale |
index |
base |
disp32 = 0x11223344 |
REX = 4a |
ModRM = 84 |
SIB = d0 |
这条指令最终的编码是: 65 4a dc 84 d0 44 33 22 11
这条指令是具有代表性的 x87 指令。
实际上对于 x87 指令来说:REX.W 会被忽略,无论 REX.W 是 1 还是 0 这条指令的 operand size 都是 quadword
对于 x87 指令的 operands size 来说,都是固定的。也就是说:不能进行 operands size override 操作,包括 REX.W 的 operand size override 功能。
所以: 65 42 dc 84 d0 44 33 22 11 也是正确的。
fadd st(3), st(0) |
这条指令的 operand 寻址是 registers
frist operand(destination)是 st(3) 寄存器,它由 ModRM.r/m 寻址,而 second operand(source)是 st(0) 寄存器,它由指令的 opcode 内嵌。
它的分解部分是:
dc |
11 |
000 |
011 |
opcode |
mod |
reg |
r/m |
ModRM = c3 |
这条指令最终的编码是:dc c3
mik 写于 2009-05-17 00:38