x86_64 - 操作码映射。可能的错误?
x86_64 - opcode map. Possible mistake?
我正在为 x86_64、vol2,B.2.1
部分处理英特尔操作码图
我对 pop
指令有疑问。
POP – Pop a Value from the Stack
wordregister
0101 0101 : 0100 000B : 1000 1111 : 11 000 reg16
qwordregister
0100 W00BS : 1000 1111 : 11 000 reg64
wordregister (alternate encoding)
0101 0101 : 0100 000B : 0101 1 reg16
qwordregister (alternate encoding)
0100 W00B : 0101 1 reg64
memory64
0100 W0XBS : 1000 1111 : mod 000 r/m
memory16
0101 0101 : 0100 00XB 1000 1111 : mod 000 r/m
显然与 wordregisters 一起使用的前缀 0101 0101
在这里真的很烦我,因为我找不到它的任何用处。
即使将命令提交给 objcopy
或其他反汇编程序,我也从未看到它出现。
0: 66 59 pop cx
2: 59 pop rcx
不过 1000 1111 : 11 000 reg16
和 0100 000B : 0101 1 reg16
部分我能理解。
那么,那 0x55
呢?
如果您将 CPU 设置为 x86_64,则 disassembler 会为您提供
55 push rbp
在这个 reference 中点击 55
也指向 push
。
pop
指令的第 3 位(第 4)到 1
,push
在 0
, 比如 0x55.
文档中肯定有错误,因为 CPU 指令编码逻辑和网络上可用的其他元素清楚地表明 0x55 是推送操作。
我正在为 x86_64、vol2,B.2.1
部分处理英特尔操作码图我对 pop
指令有疑问。
POP – Pop a Value from the Stack
wordregister
0101 0101 : 0100 000B : 1000 1111 : 11 000 reg16
qwordregister
0100 W00BS : 1000 1111 : 11 000 reg64
wordregister (alternate encoding)
0101 0101 : 0100 000B : 0101 1 reg16
qwordregister (alternate encoding)
0100 W00B : 0101 1 reg64
memory64
0100 W0XBS : 1000 1111 : mod 000 r/m
memory16
0101 0101 : 0100 00XB 1000 1111 : mod 000 r/m
显然与 wordregisters 一起使用的前缀 0101 0101
在这里真的很烦我,因为我找不到它的任何用处。
即使将命令提交给 objcopy
或其他反汇编程序,我也从未看到它出现。
0: 66 59 pop cx
2: 59 pop rcx
不过 1000 1111 : 11 000 reg16
和 0100 000B : 0101 1 reg16
部分我能理解。
那么,那 0x55
呢?
如果您将 CPU 设置为 x86_64,则 disassembler 会为您提供
55 push rbp
在这个 reference 中点击 55
也指向 push
。
pop
指令的第 3 位(第 4)到 1
,push
在 0
, 比如 0x55.
文档中肯定有错误,因为 CPU 指令编码逻辑和网络上可用的其他元素清楚地表明 0x55 是推送操作。