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


 
  




 Autor
 Autor
		


 En línea
									En línea
								



 
						
 
						