;
;					EJEMPLO 1.6
;
;				Autor: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Ejemplo para simulación
;
;El programa compara dos números A y B. Si A=B, el resultado es 0. Si A > B, el resultado
;es A-B. Si A < B el resultado es A+B
;
;Hay que destacar que, al no haber instrucciones de comparación, esta se realiza mediante
;restas.
		
		List	p=16F84		;Tipo de procesador
		include	"P16F84.INC"	;Definiciones de registros internos

Dato_A		equ	0x10		;Variable del dato A
Dato_B		equ	0x11		;Variable del dato B
Resultado	equ	0x12		;Variable para el resultado

		org	0x00		;Vector de Reset
		goto	Inicio

		org	0x05		;Salva el vector de interrupción

Inicio		movf	Dato_B,W	;Carga el dato B
		subwf	Dato_A,W	;Resta/compara con dato A
		btfsc	STATUS,Z	;Son iguales (Z=1)??
		goto	A_igual_B	;Si
		btfsc	STATUS,C	;No. A mayor que B (C=0)??
		goto	A_mayor_B	;Si

A_menor_B	movf	Dato_A,W	;No, A es menor que B
		addwf	Dato_B,W	;Suma a más B
		movwf	Resultado	;Guarda el resultado
		goto	Stop

A_mayor_B	movwf	Resultado	;
		goto	Stop
 
A_igual_B	clrf	Resultado	;Pone a 0 el resultado

Stop		nop			;Poner breakpoint de parada
		nop

		end			;Fin del programa fuente
