SEP TecNM
INSTITUTO TECNOLÓGICO DE TIJUANA
DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN
Ingeniería en Sistemas Computacionales
Programa NASM
ARQUITECTURA DE COMPUTADORAS SCD-1003
UNIDAD A EVALUAR: 1
Presenta:
LOPEZ PRUDENCIO JAVIER N. 23210612
Docente:
MIGUEL ANGEL LOPEZ RAMIREZ
TIJUANA, B.C. 6 DE OCTUBRE 2024
section .data
num_array times 10 db 0 ; Arreglo para almacenar los números
msg_entrada db 'Ingrese un número (0-9): ', 0
msg_ordenado_asc db 'Números ordenados en orden ascendente: ', 0
msg_ordenado_desc db 'Números ordenados en orden descendente: ', 0
newline db 0x0A, 0x0D ; Nueva línea
section .text
global _start
_start:
; Leer 10 números del teclado
mov ecx, 10 ; Número de elementos a leer
lea edi, [num_array] ; Apuntamos al inicio del arreglo
loop_read:
; Imprimir mensaje de entrada
mov eax, 4 ; sys_write
mov ebx, 1 ; salida estándar
mov ecx, msg_entrada ; apuntar al mensaje
mov edx, 27 ; longitud del mensaje
int 0x80
; Leer un número del teclado
mov eax, 3 ; sys_read
mov ebx, 0 ; entrada estándar
mov ecx, edi ; apunta a la posición en el arreglo
mov edx, 2 ; leer 1 byte + salto de línea
int 0x80
; Verificar si el carácter es un dígito (0 -9)
cmp byte [edi], '0'
jl not_a_digit
cmp byte [edi], '9'
jg not_a_digit
; Convertir valor ASCII a valor numérico
sub byte [edi], '0'
jmp continue_loop
not_a_digit:
; Si no es un dígito, ignorarlo y continuar
mov byte [edi], 0 ; Ignorar el valor
jmp continue_loop
continue_loop:
add edi, 1 ; Avanzar al siguiente elemento
loop loop_read ; Decrementar ecx automáticamente
; Ordenar el arreglo en orden ascendente
mov ecx, 10 ; Número de elementos
outer_sort_asc:
mov edx, ecx ; Copia el número de elementos en edx
dec edx ; Reduce para evitar el último elemento
cmp edx, 0 ; Si no hay más elementos, salir
jz print_asc
lea esi, [num_array] ; Apuntamos al inicio del array
inner_sort_asc:
mov al, [esi] ; Cargar el número actual
mov bl, [esi + 1] ; Cargar el siguiente número
cmp al, bl ; Comparar los dos números
jbe skip_swap_asc ; Si el actual es menor o igual, no hacer nada
; Intercambiar
xchg al, [esi + 1] ; Intercambiar
mov [esi], al ; Guardar el número actual
skip_swap_asc:
add esi, 1 ; Avanzar al siguiente índice
dec edx ; Decrementar el contador
jnz inner_sort_asc ; Si hay más comparaciones, continuar
dec ecx ; Decrementar el número de elementos
jmp outer_sort_asc ; Repetir el proceso
print_asc:
; Imprimir mensaje de ordenado en orden ascendente
mov eax, 4 ; sys_write
mov ebx, 1 ; salida estándar
mov ecx, msg_ordenado_asc ; apuntar al mensaje
mov edx, 31 ; longitud del mensaje
int 0x80
; Imprimir el arreglo ordenado en orden ascendente
mov ecx, 10 ; Mostrar 10 números
lea esi, [num_array] ; Apuntamos al inicio del array
print_numbers_asc:
; Convertir cada número de valor a ASCII
mov al, [esi] ; Cargar el número
add al, '0' ; Convertir a ASCII
; Mostrar el número
mov eax, 4 ; sys_write
mov ebx, 1 ; salida estándar
mov [num_array], al ; Guardar en num_array para imprimir
mov ecx, num_array ; Apuntamos a num_array
mov edx, 1 ; longitud de 1 byte
int 0x80
; Nueva línea después de cada número
mov eax, 4 ; sys_write
mov ebx, 1