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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  calculadora en lenguaje ensamblador ¨violacion de segmento¨
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: calculadora en lenguaje ensamblador ¨violacion de segmento¨  (Leído 6,450 veces)
larapam

Desconectado Desconectado

Mensajes: 1


Ver Perfil
calculadora en lenguaje ensamblador ¨violacion de segmento¨
« en: 6 Mayo 2012, 09:50 am »

intento hacer una calculadora en lenguaje ensamblador pero al compilar me aparece violacion de segmento lo q revisado y no encuentro el error espero me puedan ayudar


.section .data

mensaje: .asciz "calculadora\n"
menu: .asciz "suma[1]\n"
menu2: .asciz "resta[2]\n"
menu3: .asciz "multiplicacion[3]\n"
menu4: .asciz "division[4]\n"
escoge: .asciz "Escoja una operacion, introduzca el numero:\t"
error: .asciz "la opcion no existe\n"
valores: .asciz "introduzca los valores:\n"
cad1: .asciz "valor de A:\t"
cad2: .asciz "valor de B:\t"
cad3: .asciz "el resultado es:%d\n"
formato: .asciz "%d"
result: .int 0


.section .bss

opc:    .space 4
valA:    .space 4
valB:    .space 4
 


.section .text
.globl main
funcion_suma:   addl %eax, %ebx
                ret

funcion_resta:   subl %eax, %ebx
                ret

funcion_multi: imull  %ebx
      ret
   
funcion_division: idivl  %ebx
         ret

main:    

mensaje1:   pushl $mensaje    
      call printf
menu_1:      pushl $menu    
      call printf    
menu_2:      pushl $menu2    
      call printf    
menu_3:      pushl $menu3   
      call printf    
menu_4:      pushl $menu4   
      call printf
      pushl $escoge
      call printf       
      addl $24, %esp    
      
        pushl opc      
      call scanf    
      addl $4, %esp
      movl opc,%eax
       movl (opc),%ebx
         subl %ebx, '0'     
         

elige:      cmpl $1,%ebx
        je suma
        cmpl $2,%ebx
         je resta
         cmpl $3,%ebx
         je multiplicacion
         cmpl $4,%ebx
         je divi

   
   
cad_1:      pushl $cad1    # lee valor 1
      call printf    
      pushl valA       
      call scanf    
      addl $8, %esp    
   
cad_2:      pushl $cad2    # lee valor 2
      call printf    
      pushl valB       
      call scanf    
      addl $8, %esp
      

suma:       movl valA,%eax
           movl valB,%ebx
           call funcion_suma
           movl %ebx,result

resta:      movl valA,%eax
           movl valB,%ebx
           call funcion_resta
           movl %ebx,result

multiplicacion: movl valA,%eax
           movl valB,%ebx
           call funcion_multi
           movl %ebx,result


divi:   
       movl valA,%eax
           cdq
           movl valB,%ebx
           call funcion_division
           movl %ebx,result

      
          
resultado:   pushl $cad3
      call printf
      pushl result    
      call printf    
      addl $8, %esp
      call exit


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: calculadora en lenguaje ensamblador ¨violacion de segmento¨
« Respuesta #1 en: 6 Mayo 2012, 19:32 pm »

El error se produce al ejecutar el codigo que ensamblaste. ¿No? Ensamblalo con informacion de depuracion y depuralo con gdb asi vas a ver donde falla, la pila, variables locales, etc..


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
CasiqueCasimiro

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: calculadora en lenguaje ensamblador ¨violacion de segmento¨
« Respuesta #2 en: 12 Mayo 2012, 18:58 pm »

bueno, recién empiezo en asm, pero hasta donde me dan mis conocimientos sobre registros, es que los segmentos las instrucciones las lee de izq a derecha, y la pila de derecha a izq a derecha, y en el medio los datos, cuando los valores de la pila se sobre pasan y empiezan a ocupar lugar de los datos en la memoria, te da el error de violación de segmento.

si me equivoco corrijan me 
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con violación de segmento « 1 2 »
Programación C/C++
Triper0 17 17,214 Último mensaje 8 Noviembre 2015, 21:34 pm
por alesurf1989
Calculadora en Lenguaje Ensamblador - Linux x86 & NASM
ASM
nicoobe 5 23,565 Último mensaje 27 Febrero 2012, 02:33 am
por nicoobe
Obtener segmento de datos como parametro para ensamblador
Programación C/C++
nikitaKurev 2 2,751 Último mensaje 1 Diciembre 2012, 08:34 am
por nikitaKurev
Violacion de segmento en producto de matrices
Programación C/C++
forakas 2 3,392 Último mensaje 28 Diciembre 2012, 04:53 am
por durasno
problema con una violacion de segmento usando opcodes « 1 2 »
Programación C/C++
Belial & Grimoire 10 7,517 Último mensaje 2 Septiembre 2013, 11:02 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines