【发布时间】:2018-06-11 20:34:14
【问题描述】:
我正在玩一点 xed 并考虑编写一个英特尔 8086 的小模拟器的目的,我想使用 xed 作为解码器。但是当我在 asm 中写一点代码(用 nasm 编译)时:
[CPU 8086]
mov al, 0x7F
xor bx, bx
xchg bx, bx
cli
hlt
并尝试显示一些内容以查看是否了解 xed 的工作原理,我有这种行为:
0x0:0x0 (0x0)
MOV : length = 2
operand0: AL (REG0)
operand1: 7f (IMM0)
0x0:0x2 (0x2)
XOR : length = 3
operand0: BX (REG0)
operand1: BX (REG1)
operand2: (REG2)
0x0:0x5 (0x5)
XCHG : length = 3
operand0: BX (REG0)
operand1: BX (REG1)
0x0:0x8 (0x8)
CLI : length = 1
operand0: EFLAGS (REG0)
0x0:0x9 (0x9)
HLT : length = 1
我不明白为什么我有 3 个用于 xor 的操作数和 1 个用于 cli 的操作数,而且通常情况下,显示的操作数与 intel 指定的操作数数量不匹配。我做错了什么?
这是我在gist 中使用的代码(我已尽力使其尽可能少)
[编辑]
现在事情有点清楚了:我用nasm -f bin test.s 编译了xor bx, bx,我的程序给了我:
0x0:0x0 (0x0)
XOR : length = 2
operand0: BX (REG0)
operand1: BX (REG1)
operand2: FLAGS (REG2)
xor 的长度是 2 :没错,我们处于 16 位模式。 有 2 个显式操作数:bx 和 bx 没错 有一个隐式抑制操作数:标志(如@Peter Corde 所说)
现在一切都很好
【问题讨论】:
标签: x86 intel disassembly machine-code xed