RShow_NCs3.s



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