2

コマンド 8E C0 を逆アセンブルする必要があります。

私はすでにこれを作った:

最初のバイト 8E = 10001110b mov sr,reg/mem

しかし、2番目のバイト11000000をどうするかわかりません

4

1 に答える 1

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

これを手動で行う場合、バイトは次のように解釈できます。

8EIntel 命令セット リファレンスの次の命令に対応します。

8E /r ... MOV Sreg,r/m16 ... r/m16をセグメントレジスタに移動

/r、次のバイトが「Mod R/M」バイトであることを示します。命令の説明は、Reg/Opcode部分を宛先となるセグメント レジスタとして解釈し、ModおよびR/M部分がソースを示すことを示しています。ビットを分けると、Modは上位 2 ビット ( 11b)、Regは次の 3ビット ( ) 000bR/Mは下位 3 ビット ( 000b) です。

該当する表を調べると、Mod of11はレジスタ オペランドを示し、R /MEAXは(またはAX16 ビット モードで)を示し、セグメント レジスタを参照する場合000RegESはです。

于 2011-06-06T06:09:08.743 に答える