Выход кода с ошибкой сегментации после реализации преобразования строки в целое число в ASMLinux

Ответить
Anonymous
 Выход кода с ошибкой сегментации после реализации преобразования строки в целое число в ASM

Сообщение Anonymous »

Как указано в заголовке, я использую следующий код, чтобы принять входные данные и преобразовать их в целое число, заканчивающееся нечисловым символом. Компилируется нормально, но запускаться не хочет. Вместо этого он возвращает «ошибку сегментации (дамп ядра)».
Где моя ошибка и как ее исправить?
В настоящее время я компиляция в формат ELF с использованием NASM для моего компьютера с Linux, если это вообще поможет. Заранее спасибо (извините за отсутствие комментариев).

Код: Выделить всё

section .text

global _start
_start:

mov eax, 4
mov ebx, 1
mov edx, lenUsrMsg
mov ecx, usrMsg
int 0x80

mov eax, 3
mov ebx, 2
mov ecx, num
mov edx, 8
int 80h

mov ecx, num
mov edi, ecx
xor eax, eax

atoi:
xor eax,eax
.next:
movzx ecx, byte [edi]
sub ecx, '0'
jb .done
cmp ecx, 9
ja .done

imul eaX, 10
ADD EAX, ecx
inc edi
jmp .next

.done:
ret

mov si, 10

print_loop:
mov eax, 4
mov ebx, 1
mov ecx, star
mov edx, 1
int 0x80

dec si
jnz print_loop

mov al, 4
mov bl, 1
mov ecx, endl
mov edx, 1
int 80h

end:
mov eax, 1
xor ebx,ebx
int 0x80

section .data
usrMsg db 'Please specify amount of stars 1-9:'
lenUsrMsg equ $-usrMsg
star db '*'
num db 5
endl db 0xa
программа работала в предыдущей версии, где были разрешены только однозначные числа, но она ломалась, когда я пытался реализовать функцию AtoI для преобразования строки в целое число. mov si, 10 — это дублер, который я использовал, чтобы диагностировать проблему.

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-implemen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»