我有一個數組名爲a
和恆定的命名,我試圖解決與以下行二維數組n:mov al, [a+ebx*n+esi]
的問題是,如果n
爲偶數(n equ 4
),它完美,而是如果n
是奇數(n equ 3
),編譯器會給出「錯誤:無效的有效地址」。我可以理解,如果它在兩個情況下工作或失敗,但我不明白他們爲什麼工作不同。NASM無效地址行爲?
編譯器:NASM
接頭:GCC(MinGW的用於Windows)
IDE:SASM
程序:
%include "io.inc"
section .data
a db 1, 2, 3, 4
db 5, 6, 7, 9
db 9, 10, 11, 12
db 13, 14, 15, 16
n equ 4
section .text
global CMAIN
CMAIN:
mov ebp, esp; for correct debugging
; write your code here
;
; get upper limit
xor eax, eax
mov edi, n
;
; get last column
mov esi, n-1
xor ebx, ebx
xor edx, edx ; count in DL
xor ecx, ecx ; sum in CX
mov dh, 3
cycle:
xor ah, ah
mov al, [a+ebx*n+esi]
div dh
cmp ah, 0
jne afteradd
add cl, [a+ebx*n+esi]
add dl, 1
afteradd:
add ebx, 1
cmp ebx, edi
jl cycle
solve:
mov ax, cx
div dl ; среднее арифметическое будет в AL
aftercycle:
xor eax, eax
ret
使用3 * ebx =「push ebx」,「lea ebx,[ebx + ebx * 2]」,「mov al,[ebx + esi + a]」,.....「添加cl,[ebx + esi + a]「,.....,afteradd:」pop ebx「,」add ebx,1「... –