;PROGRAM-19) 16-bit’lik sayıların çıkarılmasına örnek program ;
;(büyük sayıdan küçük sayıyı çıkarma). h'0004' sayısından h'0001' 
;sayısını çıkaran program. Program çalıştığında çıkarma sonucunun 
;alt bayt'ı PortB'deki LED'lerde görülür. Üst bayt'ı görmek için RA0 butonuna basılır.

;===PROG19.ASM====17/05/2005================================
LIST	P=16F628A
INCLUDE	"P16F628A.INC"
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF
;-----------------------------------------------------------
CBLOCK	20h
AL,AH,BL,BH			;Değişken adreslerini atama bloğu
ENDC
ORG		h'00'	;Program kodlarının başlangıç adresi
CLRF		PORTB	;PortB'yi sıfırla
BANKSEL 	TRISB	;BANK1'e geç
CLRF		TRISB	;PortB'nin tüm uçları çıkış
MOVLW		H'FF'	;W ? h'FF'
MOVWF		TRISA	;PortA'nın tüm uçları giriş
BANKSEL 	PORTB	;BANK0'a geç
MOVLW		h'07'	;W saklayıcıya h’07’ yükle 
MOVWF		CMCON	;W-->CMCON PORTA girişleri dijital
BASLA
MOVLW		h'04'	;W ? h'04'
MOVWF		AL		;AL ? h'04'
MOVLW		h'00'	;W ? h'00'
MOVWF		AH		;AH ? h'00'	
MOVLW		h'01'	;W ? h'01'
MOVWF		BL		;BL ? h'01'
MOVLW		h'00'	;W ? h'00'
MOVWF		BH		;BH ? h'00'
CIKAR	
MOVF		BL, W	;W ? BL
SUBWF		AL, F	;AL=AL-W(BL), alt bayt sonucu
BTFSS		STATUS, 0	;CARRY BAYRAĞI=0 mı ?
DECF		AH, F	;Evet, AH=AH-1 	
MOVF		BH, W	;Hayır, W ? BH
SUBWF		AH, F	;AH=AH-W(BH), üst bayt sonucu
ALT_BAYT_GOSTER
MOVF		AL, W	;W ? AL
MOVWF		PORTB	;Alt bayt sonucunu göster
TEST_RA0
BTFSC		PORTA, 0	;RA0 butonuna basıldı mı?
GOTO		TEST_RA0	;Hayır, tekrar test et
MOVF		AH, W	;Evet, W ? AH
MOVWF		PORTB	;Üst bayt sonucunu göster.
DONGU
GOTO		DONGU
END
;-----------------------------------------------------------

