質問

X86レジスタは、MOVSB命令のソースの場所を示しますか?

役に立ちましたか?

解決

32ビットモードで、 esi.

具体的には、 movsb 1バイトからコピーします ds:esies:edi, 、両方を調整します esiedi 方向フラグに応じて、上または下のいずれかで1までに。

他のヒント

マニュアルからその情報を抽出する方法

osdev.orgにログインしたので、実際にそれを学んで道徳的な負債を支払う時が来ました。 :-)

Intelマニュアルボリューム2命令セットリファレンス-325383-056US 2015年9月 セクション「MOVS/MOVSB/MOVSW/MOVSD/MOVSQ - 文字列から文字列へのデータを削除」と述べています。

2番目のオペランド(ソースオペランド)で指定されたバイト、ワード、またはダブルワードを、最初のオペランド(宛先オペランド)で指定された場所に移動します。ソースオペランドと宛先オペランドの両方がメモリにあります。ソースオペランドのアドレスは、DS:ESIまたはDS:SIレジスタから読み取られます

最小限のテストプログラム

最後に、指示を使用して正しく理解したかどうかを確認する最小限のプログラムを作成する必要があります。

section .data
    src db 0
    dest db 1
section .text
global _start
_start:
    mov esi, src
    mov edi, dest
    cld
    movsb
    /* dest == 0*/

これの実行可能なバージョンは、アサーションを使用しています githubで.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top