;
;					ESEMPIO 1.6
;
;				Autore: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Esempio per simulazione
;
;Il programma paragona due numeri A e B. Se A=B, il risultato è 0. Se A > B, il risultato
;è A-B. Se A < B il resultato è A+B
;
;Si noti che, non avendo istruzioni di paragone, questo è realizzato mediante
;sottrazioni.
		
		List	p=16F84		;Tipo di processore
		include	"P16F84.INC"	;Definizioni di registri interni

Dato_A		equ	0x10		;Variabile del dato A
Dato_B		equ	0x11		;Variabile del dato B
Risultato	equ	0x12		;Variabile per il risultato

		org	0x00		;Vettore di Reset
		goto	Inizio

		org	0x05		;Salva il vettore di interrupt

Inizio		movf	Dato_B,W	;Carica il dato B
		subwf	Dato_A,W	;Sottrai/paragona a dato A
		btfsc	STATUS,Z	;Sono uguali (Z=1)??
		goto	A_uguale_B	;Sì
		btfsc	STATUS,C	;No. A maggiore di B (C=0)??
		goto	A_mayor_B	;Sì

A_minor_B	movf	Dato_A,W	;No, A è minore di B
		addwf	Dato_B,W	;Somma A più B
		movwf	Risultato	;Conserva il risultato
		goto	Stop

A_mayor_B	movwf	Risultato	;
		goto	Stop
 
A_uguale_B	clrf	Risultato	;Azzera il risultato

Stop		nop			;Metti breakpoint d'arresto
		nop

		end			;Fine del programma principale