#################################### # 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