// ****************************************************************************
// * Nombre del archivo: practica.s
// * Descripción: Imprimir la tabla de multiplicar hasta 12 x 12
// * Autor: Roldan Castro Luis Alberto
// * Fecha: 07-04-2025
// * Plataforma: Raspberry Pi OS (64 bits)
// * Asciinema: https://asciinema.org/a/l4jNvyhGHcKYWCitUj8dvx0Iz
// ****************************************************************************
// ****************************************************************************
// Version de JavaScript
//
// Función para imprimir la tabla de multiplicar hasta 12x12
//function imprimirTablaMultiplicar() {
// // Crear una tabla HTML
// let tabla = '<table border="1" cellpadding="5" cellspacing="0">';
//
// Encabezado de la tabla
// tabla += '<tr><th>×</th>';
// for (let i = 1; i <= 12; i++) {
// tabla += `<th>${i}</th>`;
// }
// tabla += '</tr>';
//
// // Filas de la tabla
// for (let i = 1; i <= 12; i++) {
// tabla += `<tr><th>${i}</th>`;
// for (let j = 1; j <= 12; j++) {
// tabla += `<td>${i * j}</td>`;
// }
// tabla += '</tr>';
// }
//
// tabla += '</table>';
//
// Mostrar la tabla en el documento
// document.body.innerHTML = tabla;
//
// También imprimir en consola
// console.log("Tabla de multiplicar hasta 12x12:");
// for (let i = 1; i <= 12; i++) {
// let fila = "";
// for (let j = 1; j <= 12; j++) {
// fila += (i * j).toString().padStart(4, ' ');
// }
// console.log(fila);
// }
//}
// Llamar a la función
//imprimirTablaMultiplicar();
// ****************************************************************************
.section .data
espacio: .asciz " "
newline: .asciz "\n"
.section .bss
buffer: .skip 20 // Para convertir número a cadena
.section .text
.global _start
_start:
mov x20, #1 // i = 1 (multiplicando externo)
fila_loop:
cmp x20, #13
b.eq fin
mov x21, #1 // j = 1 (multiplicando interno)
columna_loop:
cmp x21, #13
b.eq salto_linea
mul x22, x20, x21 // resultado = i * j
// convertir número (x22) a cadena ASCII
mov x0, x22
bl print_num
// imprimir espacio
ldr x0, =espacio
mov x1, #1
bl print
add x21, x21, #1
b columna_loop
salto_linea:
ldr x0, =newline
mov x1, #1
bl print
add x20, x20, #1
b fila_loop
fin:
mov x8, #93
mov x0, #0
svc #0
// -------------------------------
// print_num:
// Convierte el número en x0 a cadena y lo imprime
// -------------------------------
print_num:
ldr x1, =buffer
add x1, x1, #19 // apuntar al final del buffer
mov x2, #0 // contador de dígitos
.num_loop:
mov x3, #10
udiv x4, x0, x3
msub x5, x4, x3, x0 // x5 = x0 - x4*10 = resto
add x5, x5, #'0'
sub x1, x1, #1
strb w5, [x1]
mov x0, x4
add x2, x2, #1
cmp x0, #0
b.ne .num_loop
// imprimir resultado
mov x0, #1 // stdout
mov x8, #64 // syscall write
mov x2, x2 // longitud
mov x1, x1 // puntero al número
svc #0
ret
// Función print: x0 = puntero, x1 = longitud
print:
mov x2, x1
mov x1, x0
mov x0, #1
mov x8, #64
svc #0
ret