;
;					ESEMPIO 1.4
;
;				Autore: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Esempio per simulazione
;
;Sottrarre due numeri, A - B, di 16 bits ciascuno.
;
;Anche se questo esercizio è simile al precedente, è da notare che, il contenuto dell'
;accumulatore agisce come sottraendo e, l'operando, come minuendo.
;
;Ugualmente è da notare che il flag CARRY va interpretato 
;in modo opposto a come va fatto con la somma (a "0" c'è trasporto).
		
		List	p=16F84		;Tipo di processore
		include	"P16F84.INC"	;Definizioni di registri interni

Dato_A_L	equ	0x10		;Determina la posizione del dato A (basso)
Dato_A_H	equ 	0x11		;Determina la posizione del dato A (alto)
Dato_B_L	equ	0x12		;Determina la posizione del dato B (basso)
Dato_B_H	equ	0x13		;Determina la posizione del dato B (alto)
Risultato_L	equ	0x14		;Determina la posizione del risultato (basso)
Risultato_H	equ	0x15		;Determina la posizione del risultato (alto)

		org	0x00		;Vettore di Reset
		goto	Inizio

		org	0x05		;Salva il vettore di interrupt

Inizio		movf	Dato_B_L,W	;Carica meno peso del dato B (sottraendo)
		subwf	Dato_A_L,W	;Sottrai meno peso del dato A (minuendo)
		movwf	Risultato_L	;Memorizza il risultato
		movf	Dato_B_H,W	;Carica più peso del dato B (sottraendo)
		btfss	STATUS,C	;C'è stato trasporto(CARRY = 0) anteriore ??
		addlw	1		;Sì, aggiungi 1 all'accumulatore (sottraendo)
		subwf	Dato_A_H,W	;Sottrai più peso del dato A (minuendo)
		movwf	Risultato_H	;Conserva il risultato

Stop		nop			;Metti breakpoint d'arresto
		nop

		end			;Fine del programma principale
