0% encontró este documento útil (0 votos)
11 vistas5 páginas

Código NASM para Ordenar Números

El documento presenta un programa en ensamblador NASM que permite al usuario ingresar 10 números del 0 al 9, los valida y los ordena en orden ascendente. Incluye secciones de datos y texto, donde se definen mensajes y se implementa la lógica para la lectura, validación y ordenamiento de los números. Finalmente, imprime los números ordenados en la consola.

Cargado por

camara.tecnm
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
11 vistas5 páginas

Código NASM para Ordenar Números

El documento presenta un programa en ensamblador NASM que permite al usuario ingresar 10 números del 0 al 9, los valida y los ordena en orden ascendente. Incluye secciones de datos y texto, donde se definen mensajes y se implementa la lógica para la lectura, validación y ordenamiento de los números. Finalmente, imprime los números ordenados en la consola.

Cargado por

camara.tecnm
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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

También podría gustarte