レジスタをx86アセンブリ言語のバイト配列に移動しようとしてbl
いますが、次のステートメントはmasmアセンブラからエラーメッセージを生成します。
mov arr[2], bl
出力を生成します1>p4.asm(48): error A2101: cannot add two relocatable labels
。
レジスタをx86アセンブリ言語の配列に移動することは可能ですか?
基本的に、ハードコードされたインデックス値に対して次のように機能する必要があります。
mov byte ptr [arr + 2], bl ;store bl
[]
オプションです:MASM32の紛らわしい角かっこ
より一般的な方法:
mov si, 2 ;your index
mov al, bl ;bl = byte value from your question
mov bx, offset arr
mov byte ptr [bx+si], al
即値オペランド付きの命令を使用する場合は、オペランドが取得するバイト数を指定する必要があります。したがって、byte、word、dwordなどのキーワードを使用して、アクセスするRAMの場所の後続のバイト数をアセンブラに通知する必要があります。
mov byte ptr[bx+si], 01h
mov word ptr[bx+si], 0001h
mov dword ptr[bx+si], 00000001h
ただし、レジスタをオペランドとして使用する場合(バイト間で既知)、指定する必要はありません(より簡単な概要でより小さなリストになるため)。
mov [bx+si], al
mov al, [bx+si]
mov [bx+si], ax
mov ax, [bx+si]
MASMおよびオペランドとしてのDWORD-Registerの例外。
mov dword ptr[bx+si], eax
mov eax, dword ptr[bx+si]
ダーク