我正在开发Mac OS X(FreeBSD)
这是代码
section .data
v dd 72,54, 89, 21, 0, 12
n equ 6
section .bss
max resd 1
section .text
global _start
_start:
mov eax, 0
mov ebx, [v]
mov cx, n
dec cx
change_max:
mov ebx, [v+eax*4]
loop lp
lp:
inc eax
cmp ebx, [v+eax*4]
jl change_max
loop lp
return_max:
mov [max], ebx
exit:
push dword 0
mov eax, 0x1
sub esp, 4
int 0x80
我遇到了分段错误:11我无法理解为什么,任何线索?
答案 0 :(得分:2)
看起来你的程序无法终止,因为你没有减少cx
(最初保持数组大小)的值,并在它变为0
时停止比较。相反,你继续循环并继续:
inc eax
cmp ebx, [v+eax*4]
会导致分段错误,因为在某些时候您尝试访问数组末尾,这是一个属于您不拥有的段的内存。