Я пытаюсь написать эту функцию под названием максимум, которая будет возвращать максимальное значение из списка чисел, я хочу использовать метки, которые могут указывать, с чего начать. Когда адрес (который я использую для вычисления, где находится следующее значение) превысит список, функция перейдет к концу l oop.
К сожалению, после сборки программы и ее запуска я получаю ошибку сегментации.
Я прошу найти ошибку в моем коде. Я пытался использовать отладчик GDB, но все равно не смог.
.section .data
list_1:
.long 5,3,6,2,7,78
list_2:
.long 33,23,52,6,7,89,22,33,6
list_3:
.long 22,33,10,45,6,34
end_list_3:
.section .text
.globl _start
.globl maximum
_start:
pushl list_2
pushl list_1
call maximum
addl $8, %esp
movl %eax, %ebx
mov $1, %eax
int $0x80
#maximum function: 1 param - location of first value
# 2 param - location of last value+4
.type maximum STT_FUNC
maximum:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp),%ebx # %ebx = location of first value
movl 12(%ebp), %ecx # %ecx location of last value + 4
movl (%ebx), %eax # %eax will store current highest value
movl $0, %esi # %esi will be our index
start_loop:
incl %esi
lea (%ebx,%esi,4), %edx
cmpl %edx, %ecx
je exit_loop
movl (%ebx,%esi,4), %edi #%edi is a current examined value
cmpl %eax, %edi
cmovg %edi, %eax
jmp start_loop
exit_loop:
movl %ebp, %esp
popl %ebp
ret