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

时间:2013-03-26 10:52:57

标签: x86 masm

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

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

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

2 个答案:

答案 0 :(得分:1)

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

mov ax, offset arr       ;ax = offset 
mov byte ptr [ax+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

答案 1 :(得分:0)

如果我们使用带有立即数操作数的指令,那么我们必须指定我们的操作数将获得多少字节。因此,我们必须使用 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]

德克