汇编:找到数组中的最大数字,不起作用

时间:2011-11-29 11:01:37

标签: assembly

我正在开发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我无法理解为什么,任何线索?

1 个答案:

答案 0 :(得分:2)

看起来你的程序无法终止,因为你没有减少cx(最初保持数组大小)的值,并在它变为0时停止比较。相反,你继续循环并继续:

inc eax
cmp ebx, [v+eax*4]

会导致分段错误,因为在某些时候您尝试访问数组末尾,这是一个属于您不拥有的段的内存。