Título: calculadora en lenguaje ensamblador ¨violacion de segmento¨ Publicado por: larapam 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 Título: Re: calculadora en lenguaje ensamblador ¨violacion de segmento¨ Publicado por: Eternal Idol 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..
Título: Re: calculadora en lenguaje ensamblador ¨violacion de segmento¨ Publicado por: CasiqueCasimiro 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 |