Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - larapam

#1
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