.text # Inicio
# Debemos exportar el punto de inicio al ligador.
.global main # Por defecto main.
main:
# Lectura del teclado.
# Manda mensaje de solicitud de N
movl $4, %eax # funcion write
movl $1, %ebx # io
movl $Sol, %ecx # cadena a mostrar
movl $SSize, %edx # Longitud de lo que se lee
int $0x80 # llamada al sistema
#########################################
movl $3, %eax # funcion read
movl $1, %ebx # io
movl $3, %edx # Longitud de lo que se lee
int $0x80 # llamada al sistema
#########################################
movb (%ecx), %al # se lee el primer byte. (si es 23 entonces es el 2)
subl $48, %eax # Como se lee un ascii, hay que restarle 48 (1 = 49 entonces 49 - 48 = 1)
movl $10, %ebx # se almacena un 10 para el producto
mul %ebx # se multiplica por 10 y se guarda en eax
movb 1(%ecx), %bl # se lee el segundo byte. (si es 23 entonces es el 3)
subl $48, %ebx # Como se lee un ascii, hay que restarle 48 (1 = 49 entonces 49 - 48 = 1)
addl %ebx, %eax # se le suman las unidades a eax. (20 + 3 = 23)
movl %eax, %ecx # se transfiere eax a ecx dada la logica del programa (ciclo)
#########################################
ciclo:
pushl %ecx
movl $4, %eax
movl $1, %ebx
movl $Cad, %ecx
movl $CSize, %edx
int $0x80
popl %ecx
loop ciclo
jmp salir
salir:
movl $0,%ebx
movl $1,%eax
int $0x80
.data # Seccion de datos
Sol: .ascii "Introduce la cantidad: "
SSize = . - Sol
Cad: .ascii "R"
CSize = . - Cad
DIF: .ascii "00"