Esto debe hacerse en ensamblaje puro (es decir, sin bibliotecas ni llamadas a C).Salida de enteros en ensamblado en Linux
Entiendo la esencia del problema: se necesita dividir el número entero por 10, convertir el resto de un dígito en ASCII, generarlo y luego repetir el proceso con el cociente.
Pero por alguna razón, simplemente no funciona. Estoy usando NASM en x86.
Aquí es lo que tengo hasta ahora (no hace nada de salida, pero no lanza ningún error de ensamblador tampoco):
; integer to output is stored in eax
mov ecx, 10 ; for base 10
loop:
div ecx ;EAX contains the quotient, EDX the remainder
; Do something to EDX to convert it to ASCII, not sure if this is correct
add edx, '0'
push eax ;We'll be playing with EAX to output EDX, save EAX to the stack
mov eax, 4 ; sys_write
mov ebx, 1 ; to STDOUT
mov ecx, edx
mov edx, 1
int 0x80
pop eax ;restore EAX
cmp eax, 0 ;If EAX is 0, our job is done
jnz loop
Hay una serie de preguntas similares a ésta (es decir, this y this), pero estoy perdido en la implementación. This question (para DOS) también fue útil, pero todavía estoy confundido.
Me falta algo aquí. ¿Pensamientos?
No veo el '10' constante en ninguna parte de este código, que sería necesario para imprimir los dígitos decimales. (Necesitará repetidamente 'div' y' mod' con '10', almacenará los dígitos, los invertirá y los generará. O bien irá desde el 'gran extremo' primero, y lo dividirá entre' 100,000,000', luego con '10,000,000' , etc., pero eso podría no ser menos complicado que el método de almacenar y revertir). – sarnold
@sarnold Se olvidó de incluir una línea en la parte superior. Editado mi pregunta para agregarlo. –
¡Excelente! Gracias por la actualización. – sarnold