【发布时间】:2012-11-27 10:09:53
【问题描述】:
这是代码:
section .data
v dw 4, 6, 8, 12
len equ 4
section .text
global main
main:
mov eax, 0 ;this is i
mov ebx, 0 ;this is j
cycle:
cmp eax, 2 ;i < len/2
jge exit
mov ebx, 0
jmp inner_cycle
continue:
inc eax
jmp cycle
inner_cycle:
cmp ebx, 2
jge continue
mov di, [v + eax * 2 * 2 + ebx * 2]
inc ebx
jmp inner_cycle
exit:
push dword 0
mov eax, 0
sub esp, 4
int 0x80
我正在使用数组并将其扫描为矩阵,这是上面代码的C翻译
int m[4] = {1,2,3,4};
for(i = 0; i < 2; i++){
for(j = 0; j < 2; j++){
printf("%d\n", m[i*2 + j]);
}
}
当我尝试编译汇编代码时,我得到了这个错误:
DoubleForMatrix.asm:20: error: beroset-p-592-invalid effective address
指这一行
mov di, [v + eax * 2 * 2 + ebx * 2]
谁能解释一下这条线有什么问题?我认为这是因为寄存器尺寸,我尝试过
mov edi, [v + eax * 2 * 2 + ebx * 2]
但我遇到了同样的错误。
这是 Mac OS X 的程序集,要使其在另一个 SO 上工作,您必须更改退出系统调用。
【问题讨论】:
标签: arrays assembly matrix memory-address addressing-mode