反汇编命令8E C0

时间:2011-06-06 05:57:39

标签: assembly x86 tasm mov

我需要反汇编命令8E C0,你能帮帮我吗?

我已经做到了:

第一个字节8E = 10001110b它是mov sr,reg / mem

但我不知道如何处理第二个字节11000000

1 个答案:

答案 0 :(得分:9)

您可以通过英特尔文档自行解决,或者您可以使用更容易的反汇编程序。答案是:

mov ES, EAX

我使用yasm,并执行以下操作:

# assemble the two bytes:
echo 'lbl: db 0x8e, 0xc0' | yasm -f elf - -o tmp.o

# disassemble the output:
objdump -d -M intel tmp.o

如果您想手动执行此操作,则字节可以解释如下。

8E对应于Intel指令集参考中的此指令:

  

8E / r ... MOV Sreg,r / m16 ...将 r / m16 移至段寄存器

/r表示后面的字节是“Mod R / M”字节。指令的描述表明我们应该将 Reg / Opcode 部分解释为将成为目标的段寄存器以及 Mod R / M < / em>部分将指明来源。分开这些位, Mod 是前两位(11b), Reg 是接下来的三位(000b)和 R / M 最后三位(000b)。

在适当的表格中查找11 Mod 表示注册操作数, R / M 表示EAX(或{{ 1}}在16位模式下)和AX用于 Reg 在引用段寄存器时为000