####################################
# se imprime N veces el caracter C #
# OJO: <<< N es de 2 digitos >>> #
####################################
.text # Inicio
# Debemos exportar el punto de inicio al ligador.
.global main # Por defecto main.
main:
#########################################
# Pide la cantidad de repeticion
# Manda mensaje de solicitud de N
movl $4, %eax # Funcion escritura
movl $1, %ebx # i/o
movl $PideN, %ecx # mensaje
movl $LonPN, %edx # longitud del mensaje
int $0x80 # llamada al sistema
#########################################
# Lee la cantidad de repeticion
movl $3, %eax # funcion lectura
movl $1, %ebx # i/o
movl $3, %edx # longitud de lo que se va a leer (2 y el enter 3)
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)
pushl %eax # Se respalda N en la pila
#########################################
# Pide el caracter a repetir
movl $4, %eax # funcion write
movl $1, %ebx # i/o
movl $PideC, %ecx # mensaje
movl $LonPC, %edx # longitud de mensaje
int $0x80 # llamada al sistema
#########################################
# Lee el caracter a repetir
movl $3, %eax # funcion lectura
movl $1, %ebx # i/o
movl $2, %edx # Longitud a leer (el caracter y el enter)
int $0x80 # llamada al sistema
movl %ecx, %eax # se guarda el caracter en eax dada la logica del programa (ciclo)
#########################################
popl %ecx # Se obtiene N en ecx por la logica del programa (ciclo)
pushl %eax # Se guarda el Caracter en la pila
ciclo:
pushl %ecx # Se guarda N
movl $4, %eax # funcion write
movl $1, %ebx # i/o
popl %edx # Se lee N. edx es un registro disponible
popl %ecx # Se fija el caracter en ecx
pushl %ecx # Se guarda el caracter
pushl %edx # Se guarda N
movl $1, %edx # 1 por ser un solo caracter
int $0x80
popl %ecx # Se pone N en %ecx
loop ciclo # si ecx no es cero, brinca a ciclo
jmp salir
#########################################
salir:
movl $1, %eax # funcion exit
movl $0, %ebx # i/o
int $0x80 # llamada al sistema
#########################################
.data # Seccion de datos
PideN: .ascii "Introduce la cantidad: "
LonPN = . - PideN
PideC:
.ascii "Introduce el caracter: "
LonPC = .-PideC