1

我正在尝试将bl寄存器移动到 x86 汇编语言中的字节数组中,但是以下语句会从 masm 汇编器中生成错误消息。

mov arr[2], bl产生输出1>p4.asm(48): error A2101: cannot add two relocatable labels

是否可以将寄存器移动到 x86 汇编语言中的数组中?

4

2 回答 2

3

基本上,以下内容应该适用于硬编码的索引值:

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
于 2013-03-26T12:27:26.913 回答
0

如果我们使用带有立即操作数的指令,那么我们必须指定我们的操作数将获得多少字节。因此,我们必须使用byteworddword之类的关键字来通知汇编器我们想要访问 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 寄存器作为操作数的例外。

mov dword ptr[bx+si], eax
mov eax, dword ptr[bx+si]

短剑

于 2013-04-17T08:15:23.623 回答