elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Error en programa en Ensamblador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en programa en Ensamblador  (Leído 2,390 veces)
michellcrh

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Error en programa en Ensamblador
« en: 28 Mayo 2022, 21:35 pm »

Hola, estoy haciendo este programa en ensamblador para métodos de ordenamiento. Pero después de mostrar el menú me muestra el error de Violaciòn de segmento ('core' generado)
Me podrìan ayudar a saber en dónde está el error por favor?

Código
  1. section .data
  2.  msg1 db "Ingrese 5 números presionando [Enter] entre cada uno de ellos" , 10
  3.  len1 equ $-msg1
  4.  
  5.  msg2 db "***MÉTODOS DE ORDENAMIENTO DISPONIBLES***", 10
  6.  len2 equ $-msg2
  7.  
  8.  msg3 db "1. INSERTION SORT", 10
  9.  len3 equ $-msg3
  10.  
  11.  msg4 db "2. SELECTION SORT", 10
  12.  len4 equ $-msg4
  13.  
  14.  msg5 db "3. BUBBLE SORT", 10
  15.  len5 equ $-msg5
  16.  
  17.  msg6 db "Ingrese el número correspondiente al método de ordenamiento deseado:", 10
  18.  len6 equ $-msg6
  19.  
  20.  msg7 db 0xA
  21.  len7 equ $-msg7
  22.  
  23.  array db 0,0,0,0,0
  24.  la equ $-array
  25.  
  26. section .bss
  27.  res resb 10
  28.  
  29.  
  30. section .text
  31.  global _start
  32.  
  33.    _start:
  34.  
  35.       ;Mostrar mensaje 1
  36.       mov eax,4
  37.       mov ebx,1
  38.       mov ecx, msg1
  39.       mov edx, len1
  40.       int 0x80
  41.  
  42.       mov esi, array
  43.       mov edi, 0
  44.  
  45.       call lee
  46.  
  47.  
  48.       ;SALTO DE LÍNEA
  49.       mov eax, 4
  50.       mov ebx, 1
  51.       mov ecx, msg7
  52.       mov edx, len7
  53.       int 0x80
  54.  
  55.       jmp menu
  56.  
  57.       jmp end
  58.  
  59.  
  60.  
  61.  
  62.    ;--------------------------------------------------------------
  63.    lee:
  64. push ebp
  65. mov ebp, esp
  66.  
  67. ;Almacenamos los 5 números
  68.     num:
  69. mov eax, 3
  70. mov ebx, 0
  71. mov ecx, res
  72. mov edx, 10
  73. int 0x80
  74.  
  75. mov esi, res
  76. call atoi
  77. mov [res], eax
  78.  
  79. mov al, [res]
  80.  
  81. mov [esi], al
  82. inc edi
  83. inc esi
  84. cmp edi, la
  85. jb num
  86.  
  87. pop ebp
  88. ret
  89.  
  90.    ;----------------------------------------------------------------
  91.    menu:
  92.       ;MOSTRANDO MENÚ
  93.       ;Mostrar mensaje 2
  94.       mov eax,4
  95.       mov ebx,1
  96.       mov ecx, msg2
  97.       mov edx, len2
  98.       int 0x80
  99.  
  100.       ;SALTO DE LÍNEA
  101.       mov eax, 4
  102.       mov ebx, 1
  103.       mov ecx, msg7
  104.       mov edx, len7
  105.       int 0x80
  106.  
  107.       ;Mostrar mensaje 3
  108.       mov eax,4
  109.       mov ebx,1
  110.       mov ecx, msg3
  111.       mov edx, len3
  112.       int 0x80
  113.  
  114.       ;Mostrar mensaje 4
  115.       mov eax,4
  116.       mov ebx,1
  117.       mov ecx, msg4
  118.       mov edx, len4
  119.       int 0x80
  120.  
  121.       ;Mostrar mensaje 5
  122.       mov eax,4
  123.       mov ebx,1
  124.       mov ecx, msg5
  125.       mov edx, len5
  126.       int 0x80
  127.  
  128.       ;SALTO DE LÍNEA
  129.       mov eax, 4
  130.       mov ebx, 1
  131.       mov ecx, msg7
  132.       mov edx, len7
  133.       int 0x80
  134.  
  135.       ;Mostrar mensaje 6
  136.       mov eax,4
  137.       mov ebx,1
  138.       mov ecx, msg6
  139.       mov edx, len6
  140.       int 0x80
  141.  
  142.       ;SALTO DE LÍNEA
  143.       mov eax, 4
  144.       mov ebx, 1
  145.       mov ecx, msg7
  146.       mov edx, len7
  147.       int 0x80
  148.    ;--------------------------------------------------------------------------------------  
  149.    atoi:
  150.        push ebp
  151.        mov ebp, esp
  152.        xor eax, eax
  153.    .top:
  154.        movzx ecx, byte [esi] ; obtener un caracter
  155.        inc esi ; leer la siguiente dirección
  156.        cmp ecx, '0' ; digito valido?
  157.        jb .done
  158.        cmp ecx, '9'
  159.        ja .done
  160.        sub ecx, '0' ; "convertir" caracter a numero
  161.        imul eax, eax, 10 ; multiplicar el resultado obtenido por 10
  162.        add eax, ecx ; sumatoria
  163.        jmp .top ; until done
  164.        .done:
  165.        pop ebp
  166.        ret
  167.  
  168.    ;------------------------------------------------------------------
  169.  
  170.    end:
  171.       ;FINAL DEL PROGRAMA
  172.       mov eax, 1
  173.       xor ebx, ebx
  174.       int 0x80


En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Error en programa en Ensamblador
« Respuesta #1 en: 10 Junio 2022, 01:51 am »

Hola

Depura el programa con gdb o cualquier otra herramienta, para saber donde esta la violacion de segmento. Aunque diria que en la linea 154-155.

Tendrias que hacer la comparacion antes de incrementar el puntero de %esi. Ya que me has dado a entender de que puedes ingresar los numeros no?

Por otra parte, por que no haces una funcion imprimir mensaje? y no tener tanto codigo?

Por que no tomas los numeros por argv?

Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pasar programa C a ensamblador « 1 2 3 »
Programación General
dreams88 21 35,154 Último mensaje 14 Septiembre 2016, 15:00 pm
por elig
flujo programa ensamblador
Ingeniería Inversa
fumioli 4 3,249 Último mensaje 7 Abril 2013, 19:21 pm
por fumioli
Programa de leds en ensamblador (MPLAB) con PIC16F84A
Ejercicios
Magiiq 2 16,734 Último mensaje 21 Mayo 2013, 19:15 pm
por Magiiq
Programa en ensamblador:
Ejercicios
Smiley2036 2 2,890 Último mensaje 14 Abril 2015, 21:23 pm
por Smiley2036
Programa en lenguaje ensamblador
ASM
EmmanuelCalAgui 1 3,420 Último mensaje 5 Julio 2021, 22:44 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines