.MODEL SMALL
.STACK 100h
.DATA
UZUNLUK EQU 100 ; en fazla 100 karakter
CUMLE DB UZUNLUK DUP(?)
YEDEK DW ?
YAZI DB 'BIR CUMLE GIRIN:','$'
SONUC DB 'KELIME SAYISI:','$'

.CODE
BASLA:	MOV AX,@DATA
	MOV DS,AX

	MOV DX,OFFSET YAZI

	MOV AH,09H
	INT 21H		;EKRANA YAZDIRMA İŞLEMİ(DX'İN İÇERİĞİ)

	MOV AH,3FH	;READ/GET ENTRY
	MOV CX,UZUNLUK	;CX 100 OLDU
	MOV DX,OFFSET CUMLE ; OKUMA İŞLEMİ BİTTİ

	INT 21H
	AND AX,AX	;AX'DE KAC KARAKTER GİRİLDİĞİ SAKLANACAK
	JZ SON		;
	MOV CX,AX	;SAYAÇ DEĞİŞTİRİLDİ
	MOV BX,0
	ADD BX,1	;İLK KELİME DAHİL
	
	MOV SI,OFFSET CUMLE;POINTER CUMLE'DEKİ İLK KARAKTERİ GÖSTERİYOR

SAYAC:	MOV AL,[SI]	;CUMLE'NİN İLK KARAKTERİ AL'YE ATILDI
	CMP AL,20H	;AL'DEKİ KARAKTER BOŞLUK MU?
	JE BOSLUK	;BOŞLUK İSE BOSLUK DÖNGÜSÜNE GİDİLİR
	INC SI		;BOŞLUK DEĞİLSE DEVAM
	LOOP SAYAC	;DÖNGÜYE DEVAM
	CALL DEVAM	;DONGU SONUNDA BOSLUK VE ARTTIR ILERLEMESIN!!!!

BOSLUK:	INC SI;
	MOV AL,[SI]	;BOŞLUKTAN SONRAKİ KARAKTER AL'YE ATILIR
	INC SI
	CMP AL,20H	;AL'DEKİ KARAKTER BOŞLUK MU?
	JNE ARTTIR	;BOŞLUK DEĞİLSE SAYAÇ ARTTIRMA DÖNGÜSÜNE
	LOOPE BOSLUK	;KARAKTER BULANA KADAR DEVAM

ARTTIR:	INC BX		;KELİME SAYACI ARTTIRILIR
	LOOP SAYAC	;CUMLE BİTENE KADAR DEVAM

DEVAM:	MOV YEDEK,BX	;KELİME SAYACINI YEDEĞE ALDIK
	
	MOV DX,OFFSET SONUC

	MOV AH,09H
	INT 21H		;EKRANA YAZDIRMA İŞLEMİ(DX'İN İÇERİĞİ)

	MOV AX,YEDEK	;KELİME SAYISI AX'E YÜKLENDİ
	MOV AH,0H	;
	MOV BX,10	;
	DIV BL		;AX DECIMAL YAPILDI
	OR AX,3030H	;DECIMAL AX ASCII YAPILDI
	MOV YEDEK,AX	;ASCII DEGER YEDEKLENDI

	CMP AL,30H	;AL'DEKI DEGER SIFIR MI?
	JE BASAMAK	;0 DEĞİLSE SAYI ÇİFT HANELİ

	MOV DL,AL
	MOV AH,02H
	INT 21H		;EKRANA YADIRMA İŞLEMİ(AL'NİN İÇERİĞİ)

BASAMAK:MOV AX,YEDEK
	MOV DL,AH
	MOV AH,02H	;
	INT 21H		;EKRANA YADIRMA İŞLEMİ(AL'NİN İÇERİĞİ)


SON:	MOV AH,4CH
	INT 21H		;PROGRAM SONU
END BASLA