0% encontró este documento útil (0 votos)
22 vistas4 páginas

Ordenar 10 Números en ASM

Este documento describe un programa para ordenar 10 números de dos dígitos de forma ascendente o descendente. El programa solicita los números, permite seleccionar el orden y luego imprime los números ordenados.

Cargado por

liliancano222
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 TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas4 páginas

Ordenar 10 Números en ASM

Este documento describe un programa para ordenar 10 números de dos dígitos de forma ascendente o descendente. El programa solicita los números, permite seleccionar el orden y luego imprime los números ordenados.

Cargado por

liliancano222
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 TXT, PDF, TXT o lee en línea desde Scribd

TITLE ORDENAMIENTO_10_NUMEROS

COMMENT *TAREA6 PRACTICA5*

; Se inicializar� el stack a continuaci�n

stack segment para stack 'STACK'


db 128 dup ("PILA ")
stack ends

stack segment para stack 'STACK'


db 128 dup ("PILA ")
stack ends

data segment para PUBLIC 'data'


MEN1 DB 0AH, 0DH, "Ingresa un numero del 00 al 99 (Numeros de 2 digitos, 78,
87, 09): ", "$"
MEN2 DB 0AH, 0DH, "Ingresa 0 para ordenar ascendentemente o ingrese 1 para
ordenar descendemente:", "$", 0AH, 0DH
MEN3 DB 0AH, 0DH, "Ingresa 1 si desea hacer otro ordenamiento, Ingresa otra
tecla si desea salir", 0AH, 0DH
ALMVALORES DB " ", 0AH, 0DH, "$"
NUMEROS DW 0AH, 0DH, 0H, 0H, 0H, 0H, 0H, 0H, 0H, 0H, 0H, 0H, 0AH, 0DH,
"$" ;array de los valores

data ends

codigo segment para public 'code'


assume cs:codigo,ss:stack,ds:data

KEYS proc FAR

PUSH DS
SUB AX, AX
PUSH AX
MOV AX, SEG DATA
MOV DS, AX

INICIO_CONTEO:
MOV DI, 0

SOLICITAR_NUMEROS:
MOV AH, 09H
MOV DX, OFFSET MEN1
INT 21H

MOV AH, 01H


INT 21H
MOV NUMEROS[DI], AX
SUB AL, 30H ; Convertir de ASCII a valor num�rico
MOV BH, AL

MOV AH, 01H


INT 21H
MOV NUMEROS[DI + 1], AX
SUB AL, 30H ; Convertir de ASCII a valor num�rico
MOV BL, AL

INC DI
INC DI; Avanzar al siguiente n�mero
CMP DI, 20
JL SOLICITAR_NUMEROS

MOV DI, 0
MOV SI, 0

SENTIDO:
MOV AH, 09H
MOV DX, OFFSET MEN2
INT 21H

MOV AH, 01H


INT 21H
CMP AL, '0'
JE ASCENDENTE
CMP AL, '1'
JE DESCENDENTE

JMP SENTIDO ; Si la entrada no es v�lida, volver a preguntar

DESCENDENTE:
MOV DI, 0

DESCENDENTE_LOOP:
MOV SI, 0

DESC_LOOP:
MOV AX, NUMEROS[SI]
MOV BX, NUMEROS[SI + 2]

MOV DL, AH
MOV DH, AL

MOV CL, BH
MOV CH, BL

CMP DX, CX
JGE NO_SWAP

XCHG AX, BX
MOV NUMEROS[SI], AX
MOV NUMEROS[SI + 2], BX

NO_SWAP:
ADD SI, 2
CMP SI, 20
JL DESC_LOOP

INC DI
CMP DI, 20
JL DESCENDENTE_LOOP

JMP IMP_NUMEROS

ASCENDENTE:
MOV DI, 0

ASCENDENTE_LOOP:
MOV SI, 0

ASC_LOOP:
MOV AX, NUMEROS[SI]
MOV BX, NUMEROS[SI + 2]

MOV DL, AH
MOV DH, AL

MOV CL, BH
MOV CH, BL

CMP DX, CX
JLE SWAP

XCHG AX, BX
MOV NUMEROS[SI], AX
MOV NUMEROS[SI + 2], BX

SWAP:
ADD SI, 2
CMP SI, 18
JL ASC_LOOP

INC DI
CMP DI, 18
JL ASCENDENTE_LOOP

JMP IMP_NUMEROS

IMP_NUMEROS:
MOV AH, 09H
MOV DX, OFFSET ALMVALORES
INT 21H
MOV DI, 0

IMP_NUMEROS_LOOP:
MOV AX, NUMEROS[DI]
MOV DL, AL
MOV AH, 02H ; Funci�n de DOS para imprimir car�cter
INT 21H

MOV AX, NUMEROS[DI + 1]


;ADD AL, 30H ; Convertir de valor num�rico a ASCII
MOV DL, AL
MOV AH, 02H ; Funci�n de DOS para imprimir car�cter
INT 21H

MOV AH, 09H


MOV DX, OFFSET ALMVALORES

INC DI
INC DI; Avanzar al siguiente n�mero
CMP DI, 20
JL IMP_NUMEROS_LOOP

; Repetir operaciones
MOV AH, 09H
MOV DX, OFFSET MEN3
INT 21H

MOV AH,01H
INT 21H
CMP AL, '1' ; Verificar si se desea repetir la operaci�n
JNE SALIR

JMP INICIO_CONTEO

SALIR:
RET

KEYS endp

CODIGO ends

end

También podría gustarte