2

X86アセンブラでメモリから値をフェッチする最短の方法は何ですか?

4

3 に答える 3

4

movレジスタ以外の[アドレス]ってことですか?

于 2010-03-30T22:10:48.060 に答える
4

これを行うための回避策はアセンブラ haw にはありません。すべてのアセンブラ命令は厳密に専用です。

mov AL, 0x12

すぐに値 0x12 をレジスタ AL にロードします。

xor  AL,AL

ALレジスタの演算結果が0

lodsb

DS:[ESI] (または 16 ビット CPU では DS:[SI]) メモリ アドレスからバイトを AL にロードします。

mov AL,[ESI]

DS:[ESI] (または 16 ビット CPU では DS:[SI]) メモリ アドレスからバイトを AL にロードします。

mov AL,[0xFFFF]

DS:[0xFFFF] メモリアドレスから AL にバイトをロードします

pop AX

SS:[ESP] (または 16 ビット CPU では SS:[SP]) メモリ アドレスからバイトを AL にロードします。

in AL, 0x123

ポートアドレス0x123からバイトをロードします

xlatb [EBX + AL]

DS:[EBX + AL] メモリアドレスからバイトをロードします

...

于 2010-03-31T06:20:39.980 に答える
2

OK、最短の方法は、レジスタをポップするpop eaxことです.1バイトの命令です。
ただし、スタック ポインター ESP がバッファーを指す特別な場合にのみ使用できます。
おそらく、それを使用するコードが完了するまで、他の目的でスタックを使用することはありません。

標準的な方法は、mov命令を使用することです。

于 2010-03-30T22:35:40.147 に答える