7

asmエミュレーターの場合、ASMコードを同等の動作コードに変換するために記述しようとしています..最高のコードは、1行または2〜3行で実行できるコードであり、速度は気にしません。

私の理解から。C++ で実行した場合、MOVZX は MOV.. と同じになります。

MOV変換。

MOV ESI,DWORD PTR [ESP+8]

のようになります

regs.d.esi = *(unsigned int *)(regs.d.esp+0x00000008);

MOVZX変換。

MOVZX EAX,BYTE PTR DS:[EDI]

のようになります

regs.d.eax = *(unsigned char *)(regs.d.edi);

ほとんど同じことは今までと何の変化もありません。

MOVSX、私は単純なCコードへの変換に問題があります..上記の2つと同じようです..可能な限り移動された値の前に完全に設定されたビットを追加しようとします..のように

000000C7になるFFFFFFC7

4

2 に答える 2

5

movsx符号拡張で移動します。これらの設定されたビットは、元の値からの符号ビットのコピーであり、元の値が負でない場合はクリアされます。署名されていない型の代わりに署名された型を使用する必要があることを除いて、他の変換と同じように機能します。

regs.d.eax = *(signed char *)(regs.d.edi); // movsx eax, byte ptr ds:[edi]
于 2011-10-14T01:32:36.590 に答える