Сборка: найти максимальное число в массиве, не работает - PullRequest
2 голосов
/ 29 ноября 2011

Я занимаюсь разработкой под 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 Ответ

2 голосов
/ 29 ноября 2011

Похоже, что ваша программа не может завершиться, поскольку вы не уменьшаете значение cx (которое изначально содержит размер массива) и прекращаете сравнения, когда оно становится 0.Вместо этого вы продолжаете цикл и продолжаете:

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

, что приводит к ошибке сегментации, потому что в какой-то момент вы пытаетесь получить доступ после конца массива, памяти, которая принадлежит сегменту, который вам не принадлежит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...