Assembly 使用数组项作为索引访问另一个数组

Assembly 使用数组项作为索引访问另一个数组,assembly,masm,Assembly,Masm,我希望能够将数组项用作访问第二个数组的索引 ; array declarations: f_index BYTE SIZEOF array1 DUP(?) ; has 10 entries 0,3,5,... array2 BYTE 31,45,65,71,43,44,67,50,32,52,20,29,30,40,45,50,56,60,75,25 mov edx,OFFSET f_index ; pointer to f_index array mov ebx,[edx]

我希望能够将数组项用作访问第二个数组的索引

; array declarations:

f_index BYTE SIZEOF array1 DUP(?) ; has 10 entries 0,3,5,...
array2 BYTE 31,45,65,71,43,44,67,50,32,52,20,29,30,40,45,50,56,60,75,25

mov edx,OFFSET f_index   ; pointer to f_index array

mov ebx,[edx]            ; ebx = 0

mov esi,array2[ebx]      ; esi = 31

cmp esi,55               ; compare 31 and 55
但是,我的错误是在mov esi,array2[ebx]上,我正在使用用于x86 Intel处理器的MASM汇编。
错误表示指令操作数无效

嗯,你用错了说明。要将字节从内存加载到32位寄存器中,应使用
movzx
movsx
(例如
movzx-ebx,字节ptr[edx]
)。但是
mov ebx,[edx]
仍然应该是一个法律指令,所以我很惊讶你在那一行上出现了一个错误。对不起,错了!错误发生在访问索引为0的array2并将其移动到esi寄存器时。根据你的建议,我确实修复了另一个。我也没有发现这行有任何错误(除了它也应该是
movzx
/
movsx
)。我会将地址写为
[array2+ebx]
,但我认为MASM接受两种写入方式。列出偏移量值的
f_索引
数组是错误的。字节是2位,所以它应该是0,2,4,。。。但它不应该导致迁移到esi的问题。这只会显示错误的信息。