;
;					EJEMPLO 1.4
;
;				Autor: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Ejemplo para simulación
;
;Restar dos números, A - B, de 16 bits cada uno.
;
;Aunque este ejercicio es similar al anterior, se debe apreciar que, el contenido del
;acumulador actúa como sustraendo y, el operando, como minuendo.
;
;Igualmente hay que apreciar que el flag CARRY se debe interpretar de forma inversa a
;como se hace con la suma (a "0" hay llevada).
		
		List	p=16F84		;Tipo de procesador
		include	"P16F84.INC"	;Definiciones de registros internos

Dato_A_L	equ	0x10		;Define la posición del dato A (bajo)
Dato_A_H	equ 	0x11		;Define la posición del dato A (alto)
Dato_B_L	equ	0x12		;Define la posición del dato B (bajo)
Dato_B_H	equ	0x13		;Define la posición del dato B (alto)
Resultado_L	equ	0x14		;Define la posición del resultado (bajo)
Resultado_H	equ	0x15		;Define la posición del resultado (alto)

		org	0x00		;Vector de Reset
		goto	Inicio

		org	0x05		;Salva el vector de interrupción

Inicio		movf	Dato_B_L,W	;Carga menos peso del dato B (sustraendo)
		subwf	Dato_A_L,W	;Resta menos peso del dato A (minuendo)
		movwf	Resultado_L	;Almacena el resultado
		movf	Dato_B_H,W	;Carga más peso del dato B (sustraendo)
		btfss	STATUS,C	;Hubo acarreo (CARRY = 0) anterior ??
		addlw	1		;Si, añade 1 al acumulador (sustraendo)
		subwf	Dato_A_H,W	;Resta más peso del dato A (minuendo)
		movwf	Resultado_H	;Guarda el resultado

Stop		nop			;Poner breakpoint de parada
		nop

		end			;Fin del programa fuente
