; VICTOR MANUEL INIESTRA ALVAREZ
TITLE PARSER ; VALIDA EL VERBO DE UNA FRASE, RECONOCE NUMEROS
ORG 1000
OPCION DEFB 1 ; PALABRA DE LA FRASE A VALIDAR (1,2)
VALIDA DEFB 0 ; RESULTADO DE LA VALIDACION (0:NO,1:VERBO 1,2:VERBO 2,...)
ORACIO DEFM "IGUALA MUY MAL ESTO"
DEFM " "
; FRASE A ANALIZAR SEGUIDA POR EL SEPARADOR
PALA1 DEFM " " ; PALABRA 1
ASCI1 DEFS 2 ; ASCII(PALABRA 1)
PALA2 DEFM " " ; PALABRA 2
ASCI2 DEFS 2 ; ASCII(PALABRA 2)
PALA3 DEFM " " ; PALABRA 3
ASCI3 DEFS 2 ; ASCII(PALABRA 3)
PALA4 DEFM " " ; PALABRA 4
ASCI4 DEFS 2 ; ASCII(PALABRA 4)
VERB1 DEFM "SUMA " ; VERBO 1
VERB2 DEFM "RESTA " ; VERBO 2
VERB3 DEFM "IGUALA" ; VERBO 3
VERB4 DEFM "MULTIP" ; VERBO 4
CUENTA DEFB 0 ; CONTADOR MILUSOS
NUMVER DEFB 0 ; CONTADOR DEL VERBO
ORG 0
LDSP #0FFFF
JZ BEGIN ;VE AL PROGRAMA PRINCIPAL
JNZ BEGIN
REGRE: RET ; SUBRUTINA QUE REGRESA EL CONTROL DESPUES DE UN CALL
LEE: LD X ; A=LETRA(FRASE)
SUB #20 ; A=LETRA(FRASE)-" "
JZ REGRE ; LETRA(FRASE)=" "? SI: YA ACABE.
ADD #20 ; VUELVE A AGREGAR LO QUE LE QUITE ANTES
STO Y ; ALMACENA ESTA LETRA EN LA LOCALIDAD CORRESPONDIENTE
INY ; AVANZA UNA LETRA EN LA FRASE
INX ; AVANZA UNA LETRA EN LA PALABRA
JZ LEE ; CONTINUALE HASTA QUE ACABES CON ESTA
JNZ LEE ; PALABRA DE LA FRASE
VALID:
LD #1 ; CHECA SI LA PALABRA QUE QUIERO VALIDAR
STO NUMVER ; ES IGUAL AL PRIMER VERBO
LDY VERB1
CALL VAL
LD #2 ; ES EL SEGUNDO VERBO?
STO NUMVER
LDY VERB2
CALL VAL
LD #3 ; EL TERCERO?
STO NUMVER
LDY VERB3
CALL VAL
LD #4 ; EL CUARTO?
STO NUMVER
LDY VERB4
CALL VAL
RET ; YA ACABE DE VALIDAR, REGRESA A VALIDA1 O VALIDA2
VAL: PUSH X ; SALVAGUARDA LA DIRECCION DE LA PALABRA QUE
LD #1 ; ESTOY VALIDANDO
STO CUENTA ; ASEGURATE DE COMPARAR SOLO 6 LETRAS
VALI: LD #1
ADD #0FF ; ACARREO=1 (PARA LA RESTA)
LD X
SBC Y
JNZ RETOR ; @X=@Y? SI NO ES ASI, NO ES EL MISMO VERBO
LD CUENTA
SUB #6 ; YA COMPARE SEIS LETRAS?
JZ SI_ES ; SI YA LO HICE, SI ES EL VERBO
INX
INY ; MUEVETE A LA SIGUIENTE LETRA
LD CUENTA
ADD #1 ; YA LLEVO OTRA
STO CUENTA
JZ VALI ; COMPARA OTRA VEZ
JNZ VALI
SI_ES: LD NUMVER ; CARGA EL NUMERO DE VERBO QUE ESTOY COMPARANDO
STO VALIDA ; ALMACENALO EN VALIDA
RETOR: POP X ; RECUPERA LA DIRECCION DE LA PALABRA VALIDABLE
RET ; REGRESA A VALID
VALIDA1:
LDX PALA1 ; X=LA PALABRA QUE QUIERO VALIDAR
CALL VALID ; VE A VALIDAR
JZ ACABA
JNZ ACABA ; YA ACABE
VALIDA2:
LDX PALA2
CALL VALID
JZ ACABA
JNZ ACABA
BEGIN: LDX ORACIO ; X=ORACIO
LDY PALA1 ; Y=PALA1
CALL LEE ; @Y=PRIMERA PALABRA(X)
INX ; SALTATE EL ESPACIO
LDY PALA2 ; Y=PALA2
CALL LEE ; @Y=SEGUNDA PALABRA(X)
INX ; SALTATE EL ESPACIO
LDY PALA3 ; Y=PALA3
CALL LEE ; @Y=TERCERA PALABRA(X)
INX ; SALTATE EL ESPACIO
LDY PALA4 ; Y=PALA4
CALL LEE ; @Y=CUARTA PALABRA(X)
LD OPCION ; CHECA QUE PALABRA SERA VALIDADA
SUB #1
JZ VALIDA1 ; QUIERO VALIDAR LA PRIMERA PALABRA
SUB #1
JZ VALIDA2 ; QUIERO VALIDAR LA SEGUNDA PALABRA
ACABA: HALT
END
               (
geocities.com/v.iniestra/apuntes)                   (
geocities.com/v.iniestra)