您可以通过英特尔文档来自行解决,或者您可以使用更容易的反汇编程序.答案是:
mov ES, EAX
Run Code Online (Sandbox Code Playgroud)
我使用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
Run Code Online (Sandbox Code Playgroud)
如果您想手动执行此操作,则字节可以解释如下.
8E 对应于Intel指令集参考中的此指令:
8E / r ... MOV Sreg,r/m16 ...将r/m16移动到段寄存器
该/r指示随后的字节是一个"MOD R/M"字节.指令的描述表明我们应该将Reg/Opcode部分解释为将作为目的地的段寄存器,并且Mod和R/M部分将指示源.分开位,Mod是前两位(11b),Reg是下三位(000b)和R/M是最后三位(000b).
在相应的表中查找,Mod of 11表示寄存器操作数,R/M表示EAX(或AX在16位模式下),并且当引用段寄存器时000为RegES.