我正在尝试将bl
寄存器移动到x86汇编语言中的字节数组中,但以下语句会从masm汇编器生成错误消息。
mov arr[2], bl
生成输出1>p4.asm(48): error A2101: cannot add two relocatable labels
。
是否可以使用x86汇编语言将寄存器移动到数组中?
答案 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]
德克