Está en la página 1de 5

.

define
Inicio 0000h
Int_RST75 003Ch
init 00FFh
KeyEvent 0010h
Menor_a_Mayor 0210h
Mayor_a_Menor 0260h
Impar_a_Par 0278h
Par_a_Impar 02B3h
Menor_a_Centro 0700h
Mayor_a_Centro 0800h
Rom_data 4100h

.data Rom_data
V_0: dB 40h ; @ ascii
V_1: dB 21h ; ! ascii
V_2: dB 4Fh ; O ascii
V_3: dB 61h ; a ascii
V_4: dB 2Ah ; * ascii
V_5: dB 24h ; $ ascii
V_6: dB 3Ch ; < ascii
V_7: dB 5Ah ; Z ascii
V_8: dB 35h ; 5 ascii
V_9: dB 4Dh ; M ascii

;-------------------Interrupciones --------------------------
;Instruccion de ordenamiento de menor a mayor

.org Int_RST75

IN KeyEvent
CPI '1'
CZ Mayor_a_Menor
CPI '2'
CZ Menor_a_Mayor
CPI '3'
CZ Par_a_Impar
CPI '4'
CZ Impar_a_Par
CPI '5'
CZ Menor_a_Centro
CPI '6'
CZ Mayor_a_Centro
RET

.org Inicio
MVI A,00h
LXI B,V_0
LXI H,4101h
Main:
EI
JMP Main
HLT

.org Menor_a_Mayor

Ordena_Menor:
LDAX B
MOV E,A
MOV A,M
SUB E
JP Es_Positivo
MOV A,M
STAX B
MOV M,E
JMP Ordena_Menor

Es_Positivo:
INX H
MOV A,L
CPI 0Ah
JZ Rst_Par
JMP Ordena_Menor

Rst_Par:
INX B
MOV A,C
CPI 09h
JZ Regresa
MOV L,A
INX H
IN 10h
CPI '1'
JZ Ordena_Mayor
CPI '2'
JZ Ordena_Menor
CPI '3'
JZ Ordena_Par_Impar
CPI '4'
JZ Ordena_Impar_Par
CPI '5'
JZ Ordena_por_D
CPI '6'
JZ Ordena_por_D2

Regresa:
LXI B,V_0
LXI H,4101h
RET

.org Mayor_a_Menor

Ordena_Mayor:
LDAX B
MOV E,A
MOV A,M
SUB E
JM Es_Negativo
MOV A,M
STAX B
MOV M,E
JMP Ordena_Mayor

Es_Negativo:
INX H
MOV A,L
CPI 0Ah
JZ Rst_Par
JMP Ordena_Mayor

.org Impar_a_Par

Ordena_Impar_Par:
LDAX B
ANI 01h
JZ Numero_es_Par
MOV A,C
CPI 09h
JZ Reset_B
INX H
INX B
JMP Ordena_Impar_Par

Numero_es_Par:
MOV A,L
CPI 0Ah
JZ Reset_HL
MOV A,M
ANI 01h
JNZ Intercambia
INX H
JMP Numero_es_Par

Reset_HL:
MOV A,C
MOV L,A
INX B
MOV A,C
CPI 09h
JZ Reset_B
JMP Ordena_Impar_Par

Reset_B:
LXI B,V_0
RET

Intercambia:
LDAX B
MOV E,A
MOV A,M
STAX B
MOV M,E
INX B
JMP Ordena_Impar_Par

.org Par_a_Impar

Ordena_Par_Impar:
LDAX B
ANI 01h
JNZ Numero_es_Impar
MOV A,C
CPI 09h
JZ Reset_B
INX H
INX B
JMP Ordena_Par_Impar
Numero_es_Impar:
MOV A,L
CPI 0Ah
JZ Reset_HL2
MOV A,M
ANI 01h
JZ Intercambia2
INX H
JMP Ordena_Par_Impar

Reset_HL2:
MOV A,C
MOV L,A
INX B
MOV A,C
CPI 09h
JZ Reset_B
JMP Ordena_Par_Impar

Intercambia2:
LDAX B
MOV E,A
MOV A,M
STAX B
MOV M,E
INX B
JMP Ordena_Par_Impar

.org Menor_a_Centro

Ordena_Menor_a_Centro:
MOV A,C
CPI 09h
JZ M_a_C
JNZ Ordena_Mayor
Ordena_por_D:
MOV A,C
CPI 05h
JZ Ordena_Menor
JNC Ordena_Menor
JNZ Ordena_Mayor
JC Ordena_Mayor
M_a_C:

JMP Regresa

.org Mayor_a_Centro

Ordena_Mayor_a_Centro:
MOV A,C
CPI 09h
JZ M_a_C
JNZ Ordena_Menor

Ordena_por_D2:
MOV A,C
CPI 04h
JZ Ordena_Mayor
JNC Ordena_Mayor
JNZ Ordena_Menor
JC Ordena_Menor

También podría gustarte