; 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

    Source: geocities.com/v.iniestra/apuntes/arq_proc

               ( geocities.com/v.iniestra/apuntes)                   ( geocities.com/v.iniestra)