X86アセンブラでメモリから値をフェッチする最短の方法は何ですか?
3 に答える
movレジスタ以外の[アドレス]ってことですか?
これを行うための回避策はアセンブラ 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] メモリアドレスからバイトをロードします
...
OK、最短の方法は、レジスタをポップするpop eax
ことです.1バイトの命令です。
ただし、スタック ポインター ESP がバッファーを指す特別な場合にのみ使用できます。
おそらく、それを使用するコードが完了するまで、他の目的でスタックを使用することはありません。
標準的な方法は、mov
命令を使用することです。