Duda tonta en lenguaje ensamblador en linux

Buenas, estoy intentando hacer un menú para un programa pero no hay manera....El problema lo tengo, cuando quiero comparar la tecla que pulsa el usuario con una de las 3 opciones. Es decir quiero, que el usuario pulse (1, 2 ó 3) lo compare el programa y elija la opcion correspondiente.... Mirad el codigo: (esta recortado del programa)

.data # directiva que indica que comienzan los datos

buffer: .ascii "7"

.text # directiva que indica que comienza el codigo
.globl _start # definición del punto de comienzo del programa

_start:

(#Aqui mostraria el menu con las distintas opciones)

#Aqui esta puesto para que el usuario introduzca un numero.
movl $3, %eax
movl $0, %ebx
movl $buffer, %ecx
movl $5, %edx
int $0x80

movl $4, %eax #Saco el numero por pantalla para comprobar k lo ha leido bien
movl $1, %ebx
movl $buffer, %ecx
movl $5, %edx
int $0x80

movl (buffer), %eax
movl $49, %ebx # ascii del numero 1.
cmpl %eax, %ebx #He aqui mi problema, por mucho que meta el numero 1, por teclado, no me lo compara bien..
je salir #Deberia saltar a salir, en este ejemplo, pero no lo compara bien, supongo, k xk el buffer, no valdra "1" solo...

movl $3, %eax
movl $0, %ebx
movl $buffer, %ecx
movl $5, %edx
int $0x80

salir:
movl $1, %eax #EAX=función sys_exit() del kernel para terminar el programa
movl $0, %ebx #EBX=código de retorno al SO
int $0x80 #llamar al kernel para que ejecute la función indicada en EAX

Agradeceria que alguien me pudiera ayudar, es una gran tonteria, pero que hace que mi programa no rule....

Un saludo.
tengo bastante oxidado el ensamblador, pero así a ojo, estas usando el set de instrucciones de 64b? No estarás comparando 32bits con 64?

De todas formas, usa un debugger y ejecútalo paso a paso y verás cual es el fallo.
no, estoy usando de 32 bits...
jota-ele256 escribió:
   movl (buffer), %eax


Estás poniendo los 4 bytes que tenga tu buffer en eax, incluyendo el fin de línea al presionar el enter. Mejor lo restringes a que solo te copie un byte y te evitas ese problema:

   movb (buffer), %al
codestation escribió:
jota-ele256 escribió:
   movl (buffer), %eax


Estás poniendo los 4 bytes que tenga tu buffer en eax, incluyendo el fin de línea al presionar el enter. Mejor lo restringes a que solo te copie un byte y te evitas ese problema:

   movb (buffer), %al

Gracias!
4 respuestas