# REALIZA LA TABLA DE MULTIPLICAR DADO UN NUMERO # POR TECLADO DEL 1 (UNO) AL 9 (NUEVE) # EVITANDO EL RESULTADO DE TRES DIGITOS .data CADENA: .string "INTRODUCE N(1 a 9): " POR: .string " X " IGUAL: .string " = " NL: .byte 0x0A # cOdigo ascii del salto de lInea # Longitudes de las cadenas LCAD: .int 20 LPI: .int 7 LNL: .int 1 TABLA: .int 9 # valor de la tabla X: .int 1 # variable del ciclo Rdiv: .int 10 # divisor RESP: .int 5 # resultado NUM: .int 1 # auxiliar en la impresiOn de nUmeros COCIENTE: .int 1 RESIDUO: .int 1 # MUESTRA MENSAJE .macro print mess len movl $4, %eax movl $1, %ebx movl \mess, %ecx movl \len, %edx int $0x80 .endm .text .global main main: print $CADENA LCAD # PIDE LA TABLA movl $3, %eax movl $0, %ebx movl $TABLA, %ecx movl $1, %edx int $0x80 print $NL LNL subl $48, TABLA # ajusta el valor dado de teclado (ascii) # CICLO ASCENDENTE 1 A 10 ciclo: movl $11, %eax # limite de la tabla (10) movl X, %ebx cmpl %ebx, %eax # llegaste a once? je fin # MULTIPLICACION movl TABLA, %eax movl X, %ebx mul %ebx jmp VerFormato continUa: addl $1, X jmp ciclo # MUESTRA EL RESULTADO DE CADA MULTIPLICACION VerFormato: movl %eax, RESP addl $48, TABLA print $TABLA $1 subl $48, TABLA print $POR LPI movl X, %eax jmp VerFactor2 Factor2: print $IGUAL LPI movl RESP, %eax jmp VerResp Respuesta: print $NL LNL jmp continUa VerResp: movl %eax, NUM cmpl $10, NUM jae NDigitos # NUM, es mayor o igual a diez?? call UnDigito jmp Respuesta NDigitos: call DosDigitos jmp Respuesta VerFactor2: # el dato llega en %eax movl %eax, NUM cmpl $10, NUM jae Es_Diez # NUM, es mayor o igual a diez?? call UnDigito # si no, se trata de un sOlo dIgito jmp Factor2 Es_Diez: call DosDigitos jmp Factor2 # FIN DEL PROGRAMA fin: movl $1, %eax movl $0, %ebx int $0x80 #============================================================== # R U T I N A S #============================================================== DosDigitos: movl NUM, %eax movl $1, %ebx # truquito ;-) mul %ebx divl Rdiv # AX / 10 addl $48, %eax # cociente addl $48, %edx # residuo movl %eax, COCIENTE movl %edx, RESIDUO print $COCIENTE $1 print $RESIDUO $1 ret UnDigito: addl $48, NUM print $NUM $1 subl $48, NUM ret