在x86汇编语言中将寄存器移动到数组的索引中

在x86汇编语言中将寄存器移动到数组的索引中,x86,masm,X86,Masm,我试图在x86汇编语言中将bl寄存器移动到字节数组中,但是下面的语句从masm汇编程序生成一条错误消息 mov arr[2],bl生成输出1>p4.asm(48):错误A2101:无法添加两个可重新定位的标签 可以用x86汇编语言将寄存器移动到数组中吗?基本上,对于硬编码的索引值,以下内容应该适用: mov byte ptr [arr + 2], bl ;store bl []是可选的: 对于更通用的方式: mov si, 2 ;your index mov a

我试图在x86汇编语言中将
bl
寄存器移动到字节数组中,但是下面的语句从masm汇编程序生成一条错误消息

mov arr[2],bl
生成输出
1>p4.asm(48):错误A2101:无法添加两个可重新定位的标签


可以用x86汇编语言将寄存器移动到数组中吗?

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

mov byte ptr [arr + 2], bl  ;store bl
[]
是可选的:

对于更通用的方式:

mov si, 2                ;your index
mov al, bl               ;bl = byte value from your question
mov bx, offset arr
mov byte ptr [bx+si], al

如果我们使用具有立即数操作数的指令,那么我们必须指定操作数将获得多少字节。因此,我们必须使用诸如字节单词dword之类的关键字来通知汇编程序我们要访问ram位置的以下字节数

mov byte ptr[bx+si], 01h
mov word ptr[bx+si], 0001h
mov dword ptr[bx+si], 00000001h
但是,如果我们使用寄存器作为操作数(在字节中知道它),那么我们就不需要指定它(这样可以使清单变得更小,更易于概述)

使用MASM和DWORD寄存器作为操作数的异常

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

Dirk

我花了好几天的时间寻找这个问题的答案,但我还没有找到答案。
bx
是一个16位寄存器,大于一个字节,如果你只需要
bx
中包含的一个字节,你需要访问
bl
它的低8位part@Seki我现在已经把那部分修好了,但我仍在试图找出如何将寄存器移动到数组的特定索引中。
mov byte ptr[ax],bl
会产生以下错误:
1>p4.asm(54):错误A2031:必须是索引或基址寄存器
对不起,虽然我可以很容易地读取汇编,但我自己写一些汇编代码有点生疏。我忘记了
mov byte ptr
必须使用基址(bx/bp)或索引(si/di)寄存器。查看我的更新。
mov dword ptr[bx+si], eax
mov eax, dword ptr[bx+si]