Проблемы с ассемблером, носм "Ошибка сегментации (ядро сброшено)" - PullRequest
0 голосов
/ 19 октября 2018

У меня возникают некоторые проблемы, когда я занимаюсь спортом.У меня есть сообщение «Ошибка сегментации (ядро сброшено)». Я хотел бы знать, поможет ли кто-нибудь мне, я пробую много вещей, но до сих пор не могу решить проблему.Надеюсь, что кто-то может помочь мне по-настоящему, ха-ха

Вот код, который у меня есть на данный момент:

section .data
a1: dd 83
resultado: dw 0
section .text
global _start

start:
mov    ebx,a1
mov    ax,[ebx]
xor    dx,dx
push   dx
push   ax
push   dx
push   dx
push   dx
call   redon5
pop    dx
pop    dx
pop    dx
pop    dx
pop    dx
mov    ebx,resultado
mov    [ebx],dx

mov    ebx,0        ; exit code, 0=normal
mov    eax,1        ; exit command to kernel
int    0x80         ; interrupt 80 hex, call kernel

redon5:
mov    ebp,esp      ; "sincroniza" el base pointer
mov    ax,[ebp + 10] ; pone en ax el argumento "p"
mov    dx,10
div    dx           ; separa unidades de decenas (q y r)
cmp    ax,3
jge    intervalo_2
mov    word [ebp + 4],0  ; k1 = 0
mov    word [ebp + 2],0  ; k2 = 0
jmp    fin_de_if

intervalo_2:
cmp   ax,8
jge   intervalo_3
mov    word [ebp + 4],5  ; k1 = 5
mov    word [ebp + 2],0  ; k2 = 0
jmp    fin_de_if

intervalo_3:
mov    word [ebp + 4],0  ; k1 = 0
mov    word [ebp + 2],10 ; k2 = 10

fin_de_if:
mov    dx,[ebp + 10] ; vuelve a recuperar p
sub    dx,ax         ;dx <-- p - r
add    dx,[ebp + 4]  ;dx <-- (p-r) + k1
add    dx,[ebp + 2]  ;dx <-- (p-r) + k1 + k2
mov    [ebp + 8],dx  ; valor de retorno de la función
ret

1 Ответ

0 голосов
/ 21 октября 2018

У меня недостаточно высокой репутации, чтобы добавить комментарий, но (при условии, что вы используете elf64 потому, что вы пытаетесь запустить 32-битный код в 64-битной системе), попробуйте использовать:

nasm -f elf64 -g -F stabs test.asm ld -o test test.o

или

nasm -f elf -g -F stabs test.asm ld -o test test.o -melf_i386

см. На полпути вниз страницы: http://duntemann.com/assembly.html для некоторых объяснений.

«-g», сопровождаемый «-F stabs», выдаст вывод, который вы можете использовать в отладчике gdb, и действительно выяснит, где в вашей программе произошла ошибка seg ^ _ ^ (как также указал Сами).Установите некоторые точки останова и используйте «stepi» в gdb, чтобы найти проблему.

...