コマンド 8E C0 を逆アセンブルする必要があります。
私はすでにこれを作った:
最初のバイト 8E = 10001110b mov sr,reg/mem
しかし、2番目のバイト11000000をどうするかわかりません
インテルのドキュメントを調べて自分で解決するか、はるかに簡単な逆アセンブラーを使用できます。答えは次のとおりです。
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部分がソースを示すことを示しています。ビットを分けると、Modは上位 2 ビット ( 11b
)、Regは次の 3ビット ( ) 000b
、R/Mは下位 3 ビット ( 000b
) です。
該当する表を調べると、Mod of11
はレジスタ オペランドを示し、R /MEAX
は(またはAX
16 ビット モードで)を示し、セグメント レジスタを参照する場合000
のRegES
はです。