Unas dudas con Ensamblador

Hola eolianos, os tengo que pedir ayuda con un codigo en Ensamblador.

Tengo que hacer un programa que me pase una cadena de texto a Mayusculas, (si esta en mayus se deja como esta y sino las pasa a mayusculas)

El problema es el de siempre, "Segmentation Fault" y llevo un raaato mirandolo y no veo el error, sera una gilipollez pero llevo todo el dia delante del PC y no me rinden las neuronas xDD

Aqui os dejo el codigo

        .data
texto:   
   .asciz "Texto eN Mayusculas"
       
        .text
        .global main
main:
   mov 0, %edx
   mov $texto, %eax
       
bucle:   
   cmpb $0, (%eax, %edx,1)
   je  finstring
   jmp compara
      
compara:
        cmpb $'Z', %al
        jge comparam

comparam:
   cmpb $'a', %al
   jl bucle2
   cmpb $'z', %al
   jg bucle2
   sub $32, (%eax, %edx,1)
      
bucle2:
   inc %edx      
      
finstring:
        push %eax
        call printf
   add $4, %esp
       
final
        ret
       
   


PD: Sé que las instrucciones, variables etc estan mas que desfasadas pero usamos esas en clase, que se le va a hacer.

Por cierto, compilo con el gcc por si teneis algun problema. Un saludo y muchas gracias
¿Quién te hace programar en ensamblador? XD

¿Por qué no lo haces en C y miras el código que genera en ensamblador?
Se supone que printf toca los registros "ACiD" = eax, ecx y edx. Prueba a guardarlos. Hace mucho que di ensamblador y apenas me acuerdo pero tiene pinta de que falla por el registro %al. No metes nada ahí o al menos yo no lo veo y estás comparando con él.
No te vendría mal usar el gdb para depurar tu programa y ver dónde falla.
dano88 escribió:¿Quién te hace programar en ensamblador? XD


ya te digo... hay algún motivo para usar hoy en día ensamblador?
Si no estoy equivocado %al es la "parte baja" de la porcion de 8 bits del registro %eax. Aun asi no estoy seguro.. xDD

En fin, vaya lio y vaya follon con esto del ensamblador. Por cierto, lo estudio porque me "obligan" en la universidad, que mas quisiera programar en C y no ensamblador.

Un saludo y gracias, a ver si alguien me echa un cable.
Dasten escribió:Si no estoy equivocado %al es la "parte baja" de la porcion de 8 bits del registro %eax. Aun asi no estoy seguro.. xDD

En fin, vaya lio y vaya follon con esto del ensamblador. Por cierto, lo estudio porque me "obligan" en la universidad, que mas quisiera programar en C y no ensamblador.

Un saludo y gracias, a ver si alguien me echa un cable.


justo a eso me refería, no sé a que viene hoy en día enseñar ensamblador. ya puestos que enseñen basic también...
mendorro escribió:
dano88 escribió:¿Quién te hace programar en ensamblador? XD


ya te digo... hay algún motivo para usar hoy en día ensamblador?

Si, en los microcontroladores, cuando no te fías de compilador de c, no existe compilador de c, te da la gana hacerlo en ASM, fines didacticos, programación a prueba de fallos etc...
mendorro escribió:
dano88 escribió:¿Quién te hace programar en ensamblador? XD


ya te digo... hay algún motivo para usar hoy en día ensamblador?

Entender como funciona todo realmente, por ejemplo.

Lo que ha puesto k0br4, vaya.
bueno vale, pues nada.
no sé quien programa algo medianamente complejo en ensamblador, pero bueno, merece la pena perder cuatrimestres con eso que total para que se van a aprender cosas útiles.
8 respuestas