· EEM332

EEM332 Mikroişlemciler: Ekran Animasyonu ve 5×7 LED Matris Projeleri

EEM332 – Mikroişlemciler · 19.04.2011 · 18.10.2026

Bu yazı, Başkent Üniversitesi EEM332 Mikroişlemciler ders arşivindeki ilgili notları ve uygulamaları bir araya getiriyor (2011–2015). DOS ve BIOS kesmeleriyle ekran temizleme, klavye denetimi, karakter akışı ve gecikme; proje sürümleri ve akış şemaları. Bir arkadaşın hazırladığı çalışmalar ve ders belgeleri birlikte aktarılmış; öğrenci adları, numaraları ve grup bilgileri çıkarılmıştır. Belgelerin PDF arşiv kopyaları ve varsa kaynak kodları yazının sonunda ZIP olarak indirilebilir.

1flow

basla

mesajYazdir

tusKontrol

ekranTemizle

main

karakterYaz

kaydir

shortDelay delay0

delay1

rastgele

devam tusKontrol2

Buy SmartDraw!- purchased copies print this document without a watermark . Visit www.smartdraw.com or call 1-800-768-3729.

son

1flow: sayfa 1, devre, tablo ve şekiller
1flow, sayfa 1.

flow2-3

basla

mesajYazdir

hizAl

aralikAl

ekranTemizle

main

sutunOnay

karakterYaz satirOnay

kaydir

delay1

shortDelay delay2

delay3

nextdec1 nextdec2 nextdec3

decSi1         decSi2     decSi3

rastgele

devam tusKontrol2

Buy SmartDraw!- purchased copies print this document without a watermark . son Visit www.smartdraw.com or call 1-800-768-3729.

flow2-3: sayfa 1, devre, tablo ve şekiller
flow2-3, sayfa 1.

aksam

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)
	ekranhiz  db 13,10,"hizi belirle"
	ekranbos  db 13,10,"bosluk belirle"



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS
	mov satirNo,dh
	mov sutunNo,dl
	
	
ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;????????????????????????????????????????????????????????????????????????????????????
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h
	mov al,01h
	xor bh,bh
	mov bp, OFFSET KARAKTER
	mov cx,1

	mov dh,satirNo
	mov dl,sutunNo

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	MOV DX,	OFFSET ekranhiz
	MOV AH,	09H; menunun 2satiri
	INT 	21H
	MOV AH,	3FH ;hiz al
	MOV BX,	0
	MOV CX,	max_length
	MOV DX,	offset hiz 
	INT 	21H
ret
ENDP hizAl





PROC aralikAl
	MOV DX,	OFFSET ekranbos
	MOV AH,	09H; menunun 3satiri
	INT 	21H
	MOV AH,	3FH ;aralik al
	MOV BX,	0
	MOV CX,	max_length
	MOV DX,	offset aralik
	INT 	21H
ret
ENDP aralikAl




END Program

aksam2

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS
	mov satirNo,dh
	mov sutunNo,dl
	
	
ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		;???????????????
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası??????????
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	;MOV AH,09H	; menunun 2satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	;MOV AH,09H	; menunun 3satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

aksam

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
	aralik    db max_length dup (?)
	hiz 	  db max_lenght dup (?)
	ekranhiz  db 13,10,"hizi belirle"
	ekranbos  db 13,10,"bosluk belirle"



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS
	mov satirNo,dh
	mov sutunNo,dl
	
	
ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;????????????????????????????????????????????????????????????????????????????????????
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h
	mov al,01h
	xor bh,bh
	mov bp, OFFSET KARAKTER
	mov cx,1

	mov dh,satirNo
	mov dl,sutunNo

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	MOV DX,	OFFSET ekranhiz
	MOV AH,	09H; menunun 2satiri
	INT 	21H
	MOV AH,	3FH ;hiz al
	MOV BX,	0
	MOV CX,	max_length
	MOV DX,	offset hiz 
	INT 	21H
ret
ENDP hizAl





PROC aralikAl
	MOV DX,	OFFSET ekranbos
	MOV AH,	09H; menunun 3satiri
	INT 	21H
	MOV AH,	3FH ;aralik al
	MOV BX,	0
	MOV CX,	max_length
	MOV DX,	offset aralik
	INT 	21H
ret
ENDP aralikAl




END Program

aksam2

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS
	mov satirNo,dh
	mov sutunNo,dl
	
	
ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;????????????????????????????????????????????????????????????????????????????????????
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h
	mov al,01h
	xor bh,bh
	mov bp, OFFSET KARAKTER
	mov cx,1

	mov dh,satirNo
	mov dl,sutunNo

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	MOV AH,	09H; menunun 2satiri
	INT 	21H
	MOV AH,	3FH ;hiz al
	MOV BX,	0
	MOV CX,	max_length
	MOV DX,	offset hiz 
	INT 	21H
ret
ENDP hizAl





PROC aralikAl
	
	MOV AH,	09H; menunun 3satiri
	INT 	21H
	MOV AH,	3FH ;aralik al
	MOV BX,	0
	MOV CX,	max_length
	MOV DX,	offset aralik
	INT 	21H
ret
ENDP aralikAl




END Program

es

	.model small
	.stack 100h
.data

	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS

	MOV AL,DL
	
	MOV AH,0	;
	MOV BX,10	;
	DIV BL		;AX DECIMAL'E ÇEVRİLDİ
	OR AX,3030H	;DECIMAL AX ASCII'YE ÇEVRİLDİ

	MOV CX,0
	MOV CL,AH
	MOV DL,AL
ret
ENDP rastgele







PROC Shortdelay
	push ax bx cx dx   ; 1 saniye gecikme
	mov cx,10h 
delay0: 
	push cx 
	mov cx, 00fffh 
delay1: 
	loop delay1 
	pop cx 
	loop delay0 
	pop dx cx bx ax 
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h
	xor bh,bh			;sayfa numarası??????????
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz






END Program

kahson23

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
 	varColor  db 027h 
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	;call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
                                       push dx 
                                       mov dl, sutunNo 
                                       mov dh, satirNo
                                       shr dl,1 
                                       jnc no_XOR 
                                       shr dh,1
                                       jnc no_XOR 
                                       ;xor varColor,08H 
                               no_XOR: 
                                       inc KARAKTER 
                                       cmp KARAKTER,07 ; BELL 
                                       jnz not_Bell 
                                       inc KARAKTER ;skip Bell 
                       	     not_Bell: 
                                       pop dx 
ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		;???????????????
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası???????video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	; attribute 4 - magenta 
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	;MOV AH,09H	; menunun 2satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	;MOV AH,09H	; menunun 3satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

kahson231

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
 	varColor  db 027h 
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	;call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
		
		MOV AH,2CH
		INT 21H	
		MOV KARAKTER,DL

ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		;???????????????
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası???????video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	; attribute 4 - magenta 
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	;MOV AH,09H	; menunun 2satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	;MOV AH,09H	; menunun 3satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

labproje7

	.model small
	.stack 100h
	.data

data	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	SATIR 	  db 5
	SUTUN	  db 10



.code
Program:
	call basla
	mov dx, offset ekranyazi

	call mesajYazdir
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ah
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS

	MOV AL,DL
	
	MOV AH,0	;
	MOV BX,10	;
	DIV BL		;AX DECIMAL'E ÇEVRİLDİ
	OR AX,3030H	;DECIMAL AX ASCII'YE ÇEVRİLDİ

	MOV CX,0
	MOV CL,AH
	MOV DL,AL








PROC Shortdelay
	push ax bx cx dx   ; 1 saniye gecikme
	mov cx,10h 
delay0: 
	push cx 
	mov cx, 00fffh 
delay1: 
	loop delay1 
	pop cx 
	loop delay0 
	pop dx cx bx ax 
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;????????????????????????????????????????????????????????????????????????????????????
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h
	mov al,01h
	xor bh,bh
	mov bp, OFFSET KARAKTER
	mov cx,1

	mov dh,SATIR
	mov dl,SUTUN

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz






END Program

oy

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS
	mov satirNo,dh
	mov sutunNo,dl
	
	
ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		;???????????????
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h
	xor bh,bh			;sayfa numarası??????????
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	;MOV AH,09H	; menunun 2satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	;MOV AH,09H	; menunun 3satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

proje

	.model small
	.stack 100h
.data

	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ah
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS

	MOV AL,DL
	
	MOV AH,0	;
	MOV BX,10	;
	DIV BL		;AX DECIMAL'E ÇEVRİLDİ
	OR AX,3030H	;DECIMAL AX ASCII'YE ÇEVRİLDİ

	MOV CX,0
	MOV CL,AH
	MOV DL,AL
ret
ENDP rastgele







PROC Shortdelay
	push ax bx cx dx   ; 1 saniye gecikme
	mov cx,10h 
delay0: 
	push cx 
	mov cx, 00fffh 
delay1: 
	loop delay1 
	pop cx 
	loop delay0 
	pop dx cx bx ax 
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;????????????????????????????????????????????????????????????????????????????????????
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h
	mov al,01h
	xor bh,bh
	mov bp, OFFSET KARAKTER
	mov cx,1

	mov dh,satirNo
	mov dl,sutunNo

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz






END Program

kahson

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
 	varColor  db 027h 			;renk ayarı
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	;call tusKontrol	;zaten ayarlar girildiğinde otomatik başlıyor
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA	;tipik başlangıç işlemleri
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax
				;tipik sonlandırma işlemleri
	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23	;ekrana sığabilecek maksimum satır sayısı
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79	;ekrana sığabilecek maksimum sütun sayısı
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
		
		MOV AH,2CH	;saati kullanarak rastgele sayı üretiyor
		INT 21H	
		MOV KARAKTER,DL

ret
ENDP rastgele







PROC Shortdelay
		push si di	;kullanıcı ayarlarına göre gecikme ve sıklık ayarı
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası   ///   video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	;renk ayarı
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

karisik

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu - hiz(1-2-3) & aralik(1-2-3) girin"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
 	varColor  db 027h 		;dolgu rengi
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	;call tusKontrol	;değerlerden sonra zaten giriş yapıyor o yüzden iptal
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son



;BURADAN SONRA PROSEDÜRLER BAŞLIYOR


PROC basla
	mov ax,@DATA	;tipik başlangıç işlemleri
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son		
	push ax

	mov ah,4ch	;tipik bitiriş işlemleri
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	mov ah,2ch	;rastgele değer alınıyor
	int 21h

	add satirNo,dl	;rastgele değerler satır ve sütün belirliyor
	add sutunNo,dh

	cmp satirNo,23	;ekranda sığabilecek maksimum sayı ile karşılaştırılıyor
	jna satirOnay	;jump not above
	mov satirNo,dl
satirOnay:
	cmp sutunNo,79	;ekranda sığabilecek maksimum sayı ile karşılaştırılıyor
	jna sutunOnay
	mov sutunNo,dh
sutunOnay:
ret
ENDP kaydir







PROC rastgele
		
		MOV AH,2CH		;bilgisayar saati üzerinden rastgele sayı üretiliyor
		INT 21H	
		MOV KARAKTER,DL

ret
ENDP rastgele







PROC Shortdelay
		push si di		;kullanıcı seçimine göre hız ve sıklık ayarlanıyor
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h	
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası  ///  video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	;renk ayarı
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

oneya

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu - hiz(1-2-3) & aralik(1-2-3) girin"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
 	varColor  db 027h 
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	;call tusKontrol	;değerlerden sonra zaten giriş yapıyor
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	mov ah,2ch
	int 21h

	add satirNo,dl
	add sutunNo,dh

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
		
		MOV AH,2CH
		INT 21H	
		MOV KARAKTER,DL

ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		;???????????????
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası???????video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	; attribute 4 - magenta 
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	;MOV AH,09H	; menunun 2satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	;MOV AH,09H	; menunun 3satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

secmeyok

	.model small
	.stack 100h
.data

	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	varColor  db 027h 	;renk ayarı
	satirNo	  db 5
	sutunNo	  db 10



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA	;tipik başlangıç işlemleri
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h		;işleme başlamak için bir tuşa basılması bekleniyor
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch	;tipik sonlandırma işlemleri
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1	;karakterleri kaydırma işlemi
	add sutunNo,2

	cmp satirNo,23	;ekrana sığabilecek maksimum satır sayısı
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79	;ekrana sığabilecek maksimum sütun sayısı
	jna sutunOnay	
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
		MOV AH,2CH		;saati kullanarak rastgele sayı üretiyor
		INT 21H	
		MOV KARAKTER,DL
ret
ENDP rastgele







PROC Shortdelay
	push ax bx cx dx   ; 1 saniye gecikme
	mov cx,10h 
delay0: 
	push cx 
	mov cx, 00fffh 
delay1: 
	loop delay1 
	pop cx 
	loop delay0 
	pop dx cx bx ax 
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası   ///   video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	;renk ayarı 
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz






END Program

sonden

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu - hiz(1-2-3) & aralik(1-2-3) girin"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	varColor  db 027h 
	satirNo	  db 5
	sutunNo	  db 10
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)


.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	;call tusKontrol	;İPTAL EDİLDİ
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
		MOV AH,2CH
		INT 21H	
		MOV KARAKTER,DL
ret
ENDP rastgele







PROC Shortdelay
push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		;???????????????
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
ret	
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası???????video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	; attribute 4 - magenta 
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz


PROC hizAl
	
	;MOV AH,09H	; menunun 2satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	;MOV AH,09H	; menunun 3satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl











END Program

kahson

	.model small
	.stack 100h
.data

	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
                                       push dx 
                                       mov dl, sutunNo 
                                       mov dh, satirNo
                                       shr dl,1 
                                       jnc no_XOR 
                                       shr dh,1
                                       jnc no_XOR 
                                       ;xor varColor,08H 
                               no_XOR: 
                                       inc KARAKTER 
                                       cmp KARAKTER,07 ; BELL 
                                       jnz not_Bell 
                                       inc KARAKTER ;skip Bell 
                       	     not_Bell: 
                                       pop dx 
ret
ENDP rastgele







PROC Shortdelay
	push ax bx cx dx   ; 1 saniye gecikme
	mov cx,10h 
delay0: 
	push cx 
	mov cx, 00fffh 
delay1: 
	loop delay1 
	pop cx 
	loop delay0 
	pop dx cx bx ax 
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;renk (yeşil)
	xor bh,bh			;sayfa numarası??????????
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz






END Program

kahson2

	.model small
	.stack 100h
.data
	max_length equ 100
	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10
 	varColor  db 027h 
	aralik    db max_length dup (?)
	hiz 	  db max_length dup (?)



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	call hizAl
	call aralikAl
	
	;call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS
	mov satirNo,dh
	mov sutunNo,dl
	
	
ret
ENDP rastgele







PROC Shortdelay
		push si di
		cmp hiz,'1'
		je delay1
		cmp hiz,'2'
		je delay2
		cmp hiz,'3'
		je delay3
delay1:	
		mov di, 0900h
		;mov di,0100h		;???????????????
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3

delay2:	
		mov di, 2000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik ,'2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
		
delay3:		
		mov di, 4000h
		cmp aralik, '1'
		jz nextdec1
		cmp aralik, '2'
		jz nextdec2
		cmp aralik,'3'
		jz nextdec3
nextDec1:
		mov si, 2500h
		jmp decsi1
decSi1: 		
		dec si
		jnz decSi1
		dec di
		jnz nextDec1
		pop di si
		ret

nextDec2: 	
		mov si, 5000h
		jmp decsi2
decSi2: 
		dec si
		jnz decSi2
		dec di
		jnz nextDec2
		pop di si
		ret		

nextDec3: 
		mov si, 7000h
		jmp decsi3
decSi3: 		
		dec si
		jnz decSi3
		dec di
		jnz nextDec3
		pop di si
		ret		
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;yeşil renk
	xor bh,bh			;sayfa numarası???????video page
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov bl, varColor           	; attribute 4 - magenta 
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz







PROC hizAl
	
	;MOV AH,09H	; menunun 2satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;hiz al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset hiz 
	INT 21H
ret
ENDP hizAl





PROC aralikAl
	
	;MOV AH,09H	; menunun 3satiri	şimdilik alma!!!!!!!!!!!!!!!!!!!!!
	;INT 21H
	MOV AH,3FH 	;aralik al
	MOV BX,0
	MOV CX,max_length
	MOV DX,offset aralik
	INT 21H
ret
ENDP aralikAl




END Program

proje

	.model small
	.stack 100h
.data

	ekranyazi db 13,10,"matrix ekran koruyucu"
		  db 13,10,""
		  db 13,10,"$"
	KARAKTER  db 'a'
	satirNo	  db 5
	sutunNo	  db 10



.code
Program:
	call basla
	mov dx, OFFSET ekranyazi

	call mesajYazdir
	
	call tusKontrol
	call ekranTemizle

main:	
	call karakterYaz
	call kaydir
	call Shortdelay
	call rastgele
	call tusKontrol2
	jc main		;tusKontrol2 döngüsündeki stc'ye bağlı olarak çalışır (bitsin mi bitmesin mi kontrolü)
	call son




PROC basla
	mov ax,@DATA
	mov ds,ax
	mov es,ax	;extra segment
ret
ENDP basla



PROC mesajYazdir
	push ax
	
	mov ah,09h	;write string to standart output
	int 21h
	
	pop ax
ret
ENDP mesajYazdir



PROC tusKontrol
	push ax
	
	mov ah,01h	;read character from standart input
	int 21h
	
	pop ax
ret
ENDP tusKontrol




PROC ekranTemizle
	push ax bx cx dx

	mov bl,0
	mov bh,0
	sub cx,cx
	mov dx,184fh	;18h = 24 satır  &  4f = 79 sütun
	mov ax,0600h	;scroll all lines up
	int 10h

	pop dx cx bx ax
ret
ENDP ekranTemizle




PROC son
	push ax

	mov ah,4ch
	int 21h
	
	pop ax
ret
ENDP son




PROC kaydir
	add satirNo,1
	add sutunNo,2

	cmp satirNo,23
	jna satirOnay	;jump not above
	mov satirNo,1
satirOnay:
	cmp sutunNo,79
	jna sutunOnay
	mov sutunNo,0
sutunOnay:
ret
ENDP kaydir







PROC rastgele
	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME	;veya shr olur mu??
			;CH = HOUR		;(elimizdeki bir değer için)
			;CL = MINUTE
			;DH = SECOND
			;DL = 1/100 SECONDS

	MOV AL,DL
	
	MOV AH,0	;
	MOV BX,10	;
	DIV BL		;AX DECIMAL'E ÇEVRİLDİ
	OR AX,3030H	;DECIMAL AX ASCII'YE ÇEVRİLDİ

	MOV CX,0
	MOV CL,AH
	MOV DL,AL
ret
ENDP rastgele







PROC Shortdelay
	push ax bx cx dx   ; 1 saniye gecikme
	mov cx,10h 
delay0: 
	push cx 
	mov cx, 00fffh 
delay1: 
	loop delay1 
	pop cx 
	loop delay0 
	pop dx cx bx ax 
ret
ENDP Shortdelay 







PROC tusKontrol2
	push ax
	mov ah,0Bh	;Durum kontrolü, sonuç al'de 00 veya FF ile döner
	int 21h		;
	cmp al,0
	jnz Devam
	stc		;Carry Flag 1 yapılır, ana döngüde devam edilip edilmeyeceği buraya bağlı
Devam:	pop ax
ret
ENDP tusKontrol2








PROC karakterYaz
	push ax bx cx dx bp
	
	mov ah,13h			;write string
	mov al,01h			;renk (yeşil)
	xor bh,bh			;sayfa numarası??????????
	mov bp, OFFSET KARAKTER		;yazılacak bölüm
	mov cx,1			;number of characters in string

	mov dh,satirNo			;satır numarası atanır (kural-int10)
	mov dl,sutunNo			;sütun numarası atanır (kural-int10)

	int 10h
	pop bp dx cx bx ax
ret
ENDP karakterYaz






END Program

matrix

;-------------------------------------------------------------------------------- 
.model  small 
;-------------------------------------------------------------------------------- 
.data ;DATA + VARIABLES 
;-------------------------------------------------------------------------------- 
 
       MessageIntroScreen              db      13,10,"This program draws a color character" 
                                               db      13,10,"on the Screen and causes it to move." 
                                               db      13,10,"" 
                                               db      13,10,"Press ANY key to exit." 
       MessageCRLF                     db      13,10,"$" 
       varCharacter                    db      'a' 
       varColor                                db      027h 
       varRowNumber                    db      5 
       varColumnNumber         db      10 
 
;-------------------------------------------------------------------------------- 
.stack  100h  ;256-word stack; 
;-------------------------------------------------------------------------------- 
.code    ; START OF CODE 
Program: 
               ;------[ Begin main program body ]--------------------------------------------                                                  call initSegs 
                               call initSegs 
 
                               mov dx, OFFSET MessageIntroScreen 
                               call printMessage 
 
                               mov dx, OFFSET MessageCRLF 
                               call printMessage 
 
                               call Wait4KeyPress 
                               call ClearScreen 
               main_loop: 
 
                               call PrintChar 
                               call MoveChar 
                               call ShortDelay 
                               call changeChar 
                               call check4KeyPress 
                               jc main_loop 
                               call eXit 
               ;------[ End main program body ]-------------------------------------------- 
 
               ;------[ Begin PROCedures body ]-------------------------------------------- 
 
                       ;------------[ check4KeyPress ]--------------------------------- 
                       PROC check4KeyPress 
                                       push ax 
                                       mov ah, 0Bh 
                                       int 21H 
                                       cmp al,0                        ; is (al == 0) ? 
                                       jnz NoKey             ;if (al != 0) jump to NoKey label 
                                       stc                             ; else set carry flag 
                                                                       ; and return 
                       NoKey: 
                                       pop ax 
                       RET 
                       ENDP check4KeyPress 
                       ;------------[ ChangeChar ]--------------------------------- 
                       Proc changeChar 
                                       push dx 
                                       mov dl, varColumnNumber 
                                       mov dh, varRowNumber 
                                       shr dl,2 
                                       jnc no_XOR 
                                       shr dh,2 
                                       jnc no_XOR 
                                       xor varColor,08H 
                               no_XOR: 
                                       inc VarCharacter 
                                       cmp VarCharacter,07 ; BELL 
                                       jnz not_Bell 
                                       inc VarCharacter ;skip Bell 
                       not_Bell: 
                                       pop dx 
                       RET 
                       ENDP ChangeChar 
                       ;------------[ initSegs ]-------------------------------- 
                       PROC initSegs 
                               mov ax, @DATA 
                               mov ds, ax 
                               mov es,ax 
                       ret 
                       ENDP initSegs 
                       ;------------[ printMessage ]--------------------------- 
                       PROC printMessage 
                               push ax 
 
                               mov ah,09h 
                               int 21H 
 
                               pop ax 
                       ret 
                       ENDP printMessage 
               ;------------[ wait4KeyPress ]--------------------------------- 
                       PROC wait4KeyPress 
                               push ax 
 
                               mov ah, 01h           ;Clear Keyb Buffer 
                               int 21h                 ;call INT 21 
 
 
                               pop ax 
                       ret 
                       ENDP wait4KeyPress 
                       ;-------------------------[ PrintChar ]-------------------------------------- 
                       PROC PrintChar 
                               push ax bx cx dx bp 
 
                               mov ah,13h              ; function 13 - write string (Write Char if length =1!) 
                               mov al,01h              ; attrib in bl,move cursor 
                               xor bh,bh               ; video page 0 
                               mov bp, OFFSET varCharacter 
                               mov bl, varColor           ; attribute 4 - magenta 
                               mov cx,1               ; length of string (character) 
 
                               mov dh,varRowNumber           ;  row to put string 
                               mov dl,varColumnNumber            ; column to put string 
 
                               int 10h                 ; call BIOS service 
                               pop bp dx cx bx ax 
                               ret                     ; end proc 
                       ENDP PrintChar 
                       ;-------------------------[ MoveChar ]-------------------------------------- 
                       PROC MoveChar 
                                               add varRowNumber, 1 
                                               add varColumnNumber, 2 
                                               cmp VarRowNumber,23 
                                               jna RowOk 
                                               mov varRowNumber,1 
 
                                       RowOk: 
                                               cmp VarColumnNumber,79 
                                               jna ColOK 
                                               mov varColumnNumber,0 
                                       ColOK: 
 
                       RET                     ; end proc 
                       ENDP MoveChar 
                       ;-------------------------[ ClearScreen ]-------------------------------------- 
                       PROC ClearScreen 
                                              push ax bx cx dx 
 
 
                                              mov bl,0 
                                              mov bh,0 
                                              sub cx,cx 
                                              mov dx,184fh       ;18h = 24 rows, 4f = 79 coulums 
                                              mov ax,0600h 
                                              int 10h 
 
                                              pop dx cx bx ax 
                               RET 
                       ENDP ClearScreen 
 
                       ;-------------------------[ ShortDelay ]-------------------------------------- 
                       PROC ShortDelay 
                               push ax bx  cx  dx   ; creates 1 second delay 
                               mov cx,10h 
                         delay0: 
                               push cx 
                               mov cx, 00fffh 
                         delay1: 
                               loop delay1 
                               pop cx 
                               loop delay0 
                               pop dx cx bx ax 
                       RET 
                       ENDP Shortdelay 
                       ;------------[ eXit ]----------------------------------- 
                       PROC eXit 
                               push ax 
 
                               mov     ah,4ch         ;ah = code to return to DOS 
                               int     21h 
 
                               pop ax 
                       RET 
                       ENDP eXit 
                       ;------------[ END of Procedures Body ]--------------------------- 
;------[ End main program body ]-------------------------------------------- 
END Program

matrix

;------------------------------------------------------------------------------------;
;                                      5x7 LED matrix                                ;
; Klavyeden girilen karakterler, önce paralel veriye dönüştürülür. Veri eğer,        ;
; gösterilebilecek bir karakterse, PIC'in EEPROM'una TUŞ KODU olarak kaydedilir.     ;
; Program EEOKU bölümüne geçtiğinde, EEPROM'a kaydedilmiş kodları sırasıyla okur.    ;
; Okunan kod, çevrim tablosu tarafından karaktere dönüştürülür. Elde edilen yeni     ;
; veri, LED display'lere gönderilir.	7 KASIM 2003 CUMA                            ;
;------------------------------------------------------------------------------------;
		LIST	P=16F84A
		INCLUDE	<P16F84A.INC>
		__CONFIG	_CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
;------------------------------------------------------------------------------------;
; Register tanımlamaları                                                             ;
;------------------------------------------------------------------------------------;

TEMP		EQU	H'0F'	; Geçici register.

VERI		EQU	H'11'	; Seri verinin paralel olarak saklandığı file.
BIT_N		EQU	H'12'	; Klavyeden alınan bit sayısı.
CHAR_SUTUN	EQU	H'13'	; Karakterin sütun sayısı.
EEREAD_N	EQU	H'14'	; EEPROM'dan okunacak maximum sütun sayısı.
EEWRITE_N	EQU	H'15'	; EEPROM'a kaydedilen maximum sütun sayısı.
LINE		EQU	H'16'	; Çevrim tablosunda ulaşılacak satır no.

TIMER_H1	EQU	H'1A'	; Timer HIGH1.
TIMER_H2	EQU	H'1B'	; Timer HIGH2.
TIMA		EQU	H'1C'	; TimerA
TIMB		EQU	H'1D'	; TimerB
W_TEMP		EQU	H'1E'	; W'nin saklandığı geçici register.
STATUS_TEMP	EQU	H'1F'	; STATUS'ın saklandığı geçici register.

SUTUN1		EQU	H'21'	; Sütun 1 bilgisinin saklandığı register.
SUTUN2		EQU	H'22'	; Sütun 2 bilgisinin saklandığı register.
SUTUN3		EQU	H'23'	; Sütun 3 bilgisinin saklandığı register.
SUTUN4		EQU	H'24'	; Sütun 4 bilgisinin saklandığı register.
SUTUN5		EQU	H'25'	; Sütun 5 bilgisinin saklandığı register.
SUTUN6		EQU	H'26'	; Sütun 6 bilgisinin saklandığı register.
SUTUN7		EQU	H'27'	; Sütun 7 bilgisinin saklandığı register.
SUTUN8		EQU	H'28'	; Sütun 8 bilgisinin saklandığı register.
SUTUN9		EQU	H'29'	; Sütun 9 bilgisinin saklandığı register.
SUTUN10		EQU	H'2A'	; Sütun 10 bilgisinin saklandığı register.
SUTUN11		EQU	H'2B'	; Sütun 11 bilgisinin saklandığı register.
SUTUN12		EQU	H'2C'	; Sütun 12 bilgisinin saklandığı register.
SUTUN13		EQU	H'2D'	; Sütun 13 bilgisinin saklandığı register.
SUTUN14		EQU	H'2E'	; Sütun 14 bilgisinin saklandığı register.
SUTUN15		EQU	H'2F'	; Sütun 15 bilgisinin saklandığı register.
SUTUN16		EQU	H'30'	; Sütun 16 bilgisinin saklandığı register.
SUTUN17		EQU	H'31'	; Sütun 17 bilgisinin saklandığı register.
SUTUN18		EQU	H'32'	; Sütun 18 bilgisinin saklandığı register.
SUTUN19		EQU	H'33'	; Sütun 19 bilgisinin saklandığı register.
SUTUN20		EQU	H'34'	; Sütun 20 bilgisinin saklandığı register.
SUTUN21		EQU	H'35'	; Sütun 21 bilgisinin saklandığı register.
SUTUN22		EQU	H'36'	; Sütun 22 bilgisinin saklandığı register.
SUTUN23		EQU	H'37'	; Sütun 23 bilgisinin saklandığı register.
SUTUN24		EQU	H'38'	; Sütun 24 bilgisinin saklandığı register.

;------------------------------------------------------------------------------------;
		
		ORG	H'0000'		; RESET adresi.
		GOTO	MAIN		; Ana programa.
		
		ORG	H'0004'		; Kesme adresi.
		GOTO	KLYOKU		; Kesme alt programına.

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
YUKLE	; PORTA ve PORTB'nin başlangıç ayarları.
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

		BSF	STATUS,RP0	; BANK1'e geç.
		MOVLW	B'00011000'	; W'ye H'10' yükle.
		MOVWF	PORTA		; Çıkışlar: RA0=CLOCK, RA1=RESET, RA2=PRESET
					; Girişler: RA3=SCAN_END, RA4=Klavye DATA
		MOVLW	B'10000000'	; W'ye H'7F' yükle.
		MOVWF	PORTB		; RB7 giriş (Klavye CLOCK), diğerleri çıkış.
		BCF	STATUS,RP0	; BANK0'a dön.
		CLRF	PORTB		; PORTB'yi temizle.
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
KLYTIMER	; Bu alt program, besleme gerilimin uygulanmasıyla birlikte,         ;
		; klavyeden gelen tanıtım bilgilerinin bitmesi için birkaç           ;
		; saniyelik bir gecikme sağlar.                                      ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

		MOVLW	D'5'		; W'ye 5 yükle.
		MOVWF	TEMP		; TEMP'e gönder.
		
BEKLE		CALL	TIMER_HIGH	; Gecikme alt programını çağır.
		DECFSZ	TEMP,F		; TEMP-1, 0 mı?
		GOTO	BEKLE		; Hayır, TEMP'i eksiltmeye devam et.
		RETURN			; Alt programdan çık.

;------------------------------------------------------------------------------------;
MAIN	; Ana program.
;------------------------------------------------------------------------------------;

		CALL	YUKLE		; Portların başlangıç ayarlarını yap.
		CALL	KLYTIMER	; Klavyeden gelen parazitleri söndür.
		
		CLRF	VERI		; VERI'yi temizle.
		CLRF	EEREAD_N	; EEREAD_N'i temizle.
		CLRF	EEWRITE_N	; EEWRITE_N'i temizle.
		CLRF	EEADR		; EEADR'yi temizle.
		CLRF	PORTB		; PORTB'yi temizle.
		
		MOVLW	B'10001000'	; W'ye B'10001000' yükle.
		MOVWF	INTCON		; Genel kesme izni, PORTB kesmesi aktif.
		
;------------------------------------------------------------------------------------;
		
START		CLRF	PORTB		; PORTB'yi temizle.
		BSF	PORTA,0		; CLOCK hazır. (Düşen kenarla tetiklenir.)
		BCF	PORTA,1		; RESET=0
		BSF	PORTA,1		; RESET=1, sayıcılar saymaya hazır.
		CALL	SUTUN_TEMIZLE	; Sütun1...Sütun24'ü temizle.
		
KAYIT_SAYISI?	MOVLW	0		; W'ye 0 yaz.
		MOVWF	EEADR		; Veri sayısını okumak üzere EEADR'ye gönder.
		CALL	OKU		; Kayıt sayısını öğren ve dön.	
		MOVF	EEDATA,W	; Kayıt sayısını W'ye yaz.
		BTFSC	STATUS,Z	; Kayıt sayısı 0'dan farklı mı?
		GOTO	START		; Hayır, kayıtlı sütun sayısı "0"
		
DATA?255	MOVF	EEDATA,W	; EEDATA'yı W'ye yaz.
		SUBLW	D'255'		; 255-W
		BTFSC	STATUS,Z	; DATA, 255'ten farklı mı?
		GOTO	START		; Hayır 255, yeniden başla.
		MOVF	EEDATA,W	; EEDATA'yı W'ye yaz.
		MOVWF	EEREAD_N	; EEREAD_N register'a gönder.
		MOVWF	EEWRITE_N	; EEWRITE_N register'a gönder.
		
KAYIT_VARMI?	MOVF	EEREAD_N,W	; Okunacak karakter sayısını W'ye yaz.
		SUBLW	H'FF'		; 255-EEREAD_N
		BTFSC	STATUS,Z	; Okunacak bir kayıt var mı?
		GOTO	START		; Hayır, tüm kayıt silinmiş.

SONRAKI		INCF	EEADR,F		; EEADR+1
		CALL	OKU		; EEPROM'a kayıtlı veriyi al ve dön.
		MOVF	EEDATA,W	; EEDATA'yı W'ye yaz.
		MOVWF	VERI		; EEDATA'yı VERI'ye gönder.
		SUBLW	D'113'		; 113-VERI (Delete tuşunu kodu)
		BTFSC	STATUS,Z	; Basılan tuş DELETE'in dışında mı?
		GOTO	START		; Hayır, basılan tuş DELETE.
		
		CALL	ANALIZ		; Evet, tuşu analiz et, PORTB'den gönder.
				
		DECFSZ	EEREAD_N,F	; Kayıtlı son veri okundu mu?
		GOTO	BIR_SUTUN_BOS	; Hayır, karakter arası 1 sütun boş bırak.
		MOVLW	D'41'		; Evet.
		MOVWF	VERI		; W'ye boşluk karakterinin kodunu yaz.
		CALL	BOSLUK1		; Her CALL BOSLUK1...
		CALL	BOSLUK1		; ...komutuyla çağrılan...
		CALL	BOSLUK1		; ...alt programda 3 sütunluk...
		CALL	BOSLUK1		; ...boşluk bırakılır...
		CALL	BOSLUK1		; ...Bu, toplam olarak...
		CALL	BOSLUK1		; ...30 sütunluk boşluğa denk gelir....
		CALL	BOSLUK1		; ...24 sütun kaydırıldığında display...
		CALL	BOSLUK1		; ...söner. Bu noktadan itibaren 6 sütun...
		CALL	BOSLUK1		; ...kayma süresi kadar daha, ekran...
		CALL	BOSLUK1		; ...sönük kalacaktır.
		GOTO	START		; Ve tüm işlemleri yeniden yap.
		
BIR_SUTUN_BOS	MOVLW	H'00'		; W'ye 0 yükle.
		MOVWF	SUTUN1		; SUTUN1'e gönder.
		MOVWF	PORTB		; PORTB'den gönder.
		CALL	GOSTER		; Sütun bilgilerini göster.
		CALL	SHIFT		; 1 adım sola ötele.
		GOTO	SONRAKI		; Hayır, sonraki sütun bilgisini oku.
		
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
SUTUN_TEMIZLE	; Sütun verisini temizle.                                            ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

		CLRF	SUTUN1
		CLRF	SUTUN2
		CLRF	SUTUN3
		CLRF	SUTUN4
		CLRF	SUTUN5
		CLRF	SUTUN6
		CLRF	SUTUN7
		CLRF	SUTUN8
		CLRF	SUTUN9
		CLRF	SUTUN10
		CLRF	SUTUN11
		CLRF	SUTUN12
		CLRF	SUTUN13
		CLRF	SUTUN14
		CLRF	SUTUN15
		CLRF	SUTUN16
		CLRF	SUTUN17
		CLRF	SUTUN18
		CLRF	SUTUN19
		CLRF	SUTUN10
		CLRF	SUTUN21
		CLRF	SUTUN22
		CLRF	SUTUN23
		CLRF	SUTUN24
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
OKU	; EEPROM'daki veriyi oku.
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

		BSF	STATUS,RP0	; BANK1'e geç.
		BSF	EECON1,RD	; Girilen adresle ilgili veriyi oku.
		BCF	STATUS,RP0	; BANK0'a dön.
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
SHIFT	; Sütunları 1 adım sola ötele.                                               ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
		
		MOVF	SUTUN23,W	; 23. sütunu W'ye yaz.
		MOVWF	SUTUN24		; 24. sütuna gönder.
		
		MOVF	SUTUN22,W	; 22. sütunu W'ye yaz.
		MOVWF	SUTUN23		; 23. sütuna gönder.
		
		MOVF	SUTUN21,W	; 21. sütunu W'ye yaz.
		MOVWF	SUTUN22		; 22. sütuna gönder.
		
		MOVF	SUTUN20,W	; 20. sütunu W'ye yaz.
		MOVWF	SUTUN21		; 21. sütuna gönder.
		
		MOVF	SUTUN19,W	; 19. sütunu W'ye yaz.
		MOVWF	SUTUN20		; 20. sütuna gönder.
		
		MOVF	SUTUN18,W	; 18. sütunu W'ye yaz.
		MOVWF	SUTUN19		; 19. sütuna gönder.
		
		MOVF	SUTUN17,W	; 17. sütunu W'ye yaz.
		MOVWF	SUTUN18		; 18. sütuna gönder.
		
		MOVF	SUTUN16,W	; 16. sütunu W'ye yaz.
		MOVWF	SUTUN17		; 17. sütuna gönder.
		
		MOVF	SUTUN15,W	; 15. sütunu W'ye yaz.
		MOVWF	SUTUN16		; 16. sütuna gönder.

		MOVF	SUTUN14,W	; 14. sütunu W'ye yaz.
		MOVWF	SUTUN15		; 15. sütuna gönder.

		MOVF	SUTUN13,W	; 13. sütunu W'ye yaz.
		MOVWF	SUTUN14		; 14. sütuna gönder.

		MOVF	SUTUN12,W	; 12. sütunu W'ye yaz.
		MOVWF	SUTUN13		; 13. sütuna gönder.

		MOVF	SUTUN11,W	; 11. sütunu W'ye yaz.
		MOVWF	SUTUN12		; 12. sütuna gönder.

		MOVF	SUTUN10,W	; 10. sütunu W'ye yaz.
		MOVWF	SUTUN11		; 11. sütuna gönder.

		MOVF	SUTUN9,W	; 9. sütunu W'ye yaz.
		MOVWF	SUTUN10		; 10. sütuna gönder.

		MOVF	SUTUN8,W	; 8. sütunu W'ye yaz.
		MOVWF	SUTUN9		; 9. sütuna gönder.

		MOVF	SUTUN7,W	; 7. sütunu W'ye yaz.
		MOVWF	SUTUN8		; 8. sütuna gönder.

		MOVF	SUTUN6,W	; 6. sütunu W'ye yaz.
		MOVWF	SUTUN7		; 7. sütuna gönder.

		MOVF	SUTUN5,W	; 5. sütunu W'ye yaz.
		MOVWF	SUTUN6		; 6. sütuna gönder.

		MOVF	SUTUN4,W	; 4. sütunu W'ye yaz.
		MOVWF	SUTUN5		; 5. sütuna gönder.

		MOVF	SUTUN3,W	; 3. sütunu W'ye yaz.
		MOVWF	SUTUN4		; 4. sütuna gönder.

		MOVF	SUTUN2,W	; 2. sütunu W'ye yaz.
		MOVWF	SUTUN3		; 3. sütuna gönder.

		MOVF	SUTUN1,W	; 1. sütunu W'ye yaz.
		MOVWF	SUTUN2		; 2. sütuna gönder.
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
GOSTER	; Tablodan alınan sütun bilgisini PORTB'den gönderme.                        ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
		
		MOVF	SUTUN1,W	; 1. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN2,W	; 2. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN3,W	; 3. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN4,W	; 4. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN5,W	; 5. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN6,W	; 6. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN7,W	; 7. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN8,W	; 8. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN9,W	; 9. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN10,W	; 10. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN11,W	; 11. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN12,W	; 12. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN13,W	; 13. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN14,W	; 14. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN15,W	; 15. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN16,W	; 16. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN17,W	; 17. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN18,W	; 18. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN19,W	; 19. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN20,W	; 20. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN21,W	; 21. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN22,W	; 22. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN23,W	; 23. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		MOVF	SUTUN24,W	; 24. sütunu W'ye yaz.
		CALL	GOSTER_ALT	; Diğer işlemler için alt programı çağır.
		
		RETURN
		
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
GOSTER_ALT	; Bu alt program, sütun verisini PORTB'den gönderir.                 ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
		
		MOVWF	PORTB		; Sütun bilgisini PORTB'den gönder.
		CALL	TIMA_B		; Gecikme alt programını çağır.
		
		BCF	PORTA,0		; CLOCK düşen kenar.
		BSF	PORTA,0		; CLOCK yükselen kenar.
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
TIMA_B	; PORTB'den LED'lere gönderilen bilgiyi gösterme süresi.                     ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

		MOVLW	D'20'		; W'ye 20 yaz.
		MOVWF	TIMA		; TIMA register'a gönder.
PAUSE2		MOVLW	D'25'		; W'ye 25 yaz.
		MOVWF	TIMB		; TIMB register' gönder.
PAUSE1		DECFSZ	TIMB,F		; TIMB-1, 0'a ulaştı mı?
		GOTO	PAUSE1		; Hayır.
		DECFSZ	TIMA,F		; TIMA-1, 0'a ulaştı mı?
		GOTO	PAUSE2		; Hayır.
		RETURN			; Evet, alt programdan çık.

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
TIMER_HIGH	; Bu alt program yaklaşık 0.2 saniyelik bir gecikme sağlar.          ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
		
		MOVLW	D'255'		; W'ye 255 yaz.
		MOVWF	TIMER_H1	; TIMER_H1 register'a gönder.
		
DONGU1		MOVLW	D'255'		; W'ye 255 yaz.
		MOVWF	TIMER_H2	; TIMER_H2 register'a gönder.
		
DONGU2		DECFSZ	TIMER_H2,F	; TIMER_H2-1, 0 mı?
		GOTO	DONGU2		; Hayır.
		DECFSZ	TIMER_H1,F	; TIMER_H1-1, 0 mı?
		GOTO	DONGU1		; Hayır.
		RETURN			; Evet, alt programdan çık.










;××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××;
KLYOKU	; Klavyeden gönderilen seri bilgiyi, paralel veriye dönüştürür.              ;
;××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××;
		
		BCF	INTCON,GIE	; Tüm kesme işlemleri geçersiz.
		BCF	INTCON,RBIE	; PORTB'den gelecek kesmeler geçersiz.
		BCF	INTCON,RBIF	; PORTB kesme bayrağını sıfırla.

		MOVWF	W_TEMP		; W'yi W_TEMP'e gönder.
		SWAPF	STATUS,W	; Alt ve üst 4-bit'i takas et.
		MOVWF	STATUS_TEMP	; STATUS'ı STATUS_TEMP'e gönder.
		
;××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××;
		
		CLRF	PORTB		; PORTB'yi temizle.
		
BASLA		CLRF	VERI		; VERI'yi, yeni bilgi için temizle.
		CALL	KLY_KONTROL	; Bit1 : START bit, değerlendirilmeyecek.
		MOVLW	D'8'		; W'ye 8 yükle.
		MOVWF	BIT_N		; BIT_N register'a gönder.

BIT_KAYDIR	RRF	VERI,F		; VERI içindeki bilgiyi, 1-bit sağa ötele.
		CALL	KLY_KONTROL	; CLOCK ve DATA sinyallerini değerlendir.
		IORWF	VERI,F		; W ve VERI'ye OR işlevi uygula.
		IORLW	B'01111111'	; W ve B'01111111'ye OR işlevi uygula.
		ANDWF	VERI,F		; Maskele.
		DECFSZ	BIT_N,F		; BIT_N-1, 0 mı?
		GOTO	BIT_KAYDIR	; Hayır.
		CALL	KLY_KONTROL	; Bit10 : EŞLİK bit'i, değerlendirilmeyecek.
		CALL	KLY_KONTROL	; Bit11 : STOP bit'i, değerlendirilmeyecek.
		
		CALL	KLY_KONTROL	; Klavyeden...
		CALL	KLY_KONTROL	; ...parmağın...
		CALL	KLY_KONTROL	; ...kaldırılması...
		CALL	KLY_KONTROL	; ...sırasında...
		CALL	KLY_KONTROL	; ...oluşan...
		CALL	KLY_KONTROL	; ...ikinci...
		CALL	KLY_KONTROL	; ...interrrupt'ın...
		CALL	KLY_KONTROL	; ...önlenmesi.
		CALL	KLY_KONTROL	; Aksi halde...
		CALL	KLY_KONTROL	; ...her karakter...
		CALL	KLY_KONTROL	; ...çift olarak gözükecektir.
		
		GOTO	KLY_MAIN 	; Seri veri, paralel veriye dönüştürüldü.

KLY_KONTROL	BTFSC	PORTB,7		; CLOCK 0 mı?
		GOTO	$ - 1		; Hayır, 0 olmasını bekle.
		BTFSS	PORTB,7		; CLOCK, 1 mi?
		GOTO	$ - 1		; Hayır, 1 olmasını bekle.
		BTFSS	PORTA,4		; DATA 1 mi?
		RETLW	B'00000000'	; Hayır, 0 ile dön.
		RETLW	B'10000000'	; Evet,  1 ile dön.

;××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××;
KLY_MAIN	; Bu alt program, klavyeden gelen seri bilgiyi okur.                 ;
;××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××;

DELETE?		MOVF	VERI,W		; VERI'yi W'ye yaz.
		SUBLW	D'113'		; 113-VERI
		BTFSS	STATUS,Z	; DELETE tuşuna basıldı mı?
		GOTO	HATAKONTROL	; Hayır, devam et.
		MOVLW	H'00'		; W'ye 0 yaz.
		MOVWF	EEADR		; Adres bilgisi olarak EEADR'ye gönder.
		MOVWF	EEDATA		; Veri olarak EEDATA'ya gönder.
		CALL	EEYAZ		; 0. adrese 0 yaz. (Kayıt sayısını temizle.)
		CALL	SUTUN_TEMIZLE	; Sütun bilgisini temizle.
		CLRF	EEREAD_N	; Okunacak kayıt sayısı 0
		CLRF	EEWRITE_N	; EEPROM'a kayıt sayısı 0
		GOTO	KLYCIK		; Silme işlemi tamamlandı.

HATAKONTROL	MOVF	VERI,W		; VERI'yi W'ye yaz.
		SUBLW	B'11110000'	; HATAKODU-VERI
		BTFSC	STATUS,Z	; Klavye kodu hatasız mı?
		GOTO	KLYCIK		; Hatalı, alt programdan çık.
		
SKIP		MOVF	VERI,W		; VERI'yi W'ye yaz.
		ANDLW	B'01111111'	; 7. bit'i maskele.		
		MOVWF	VERI		; Maskelenen bilgiyi yeniden VERI'ye gönder.
		
VERI_KAYDET	MOVF	VERI,W		; VERI'yi W'ye yaz.
		MOVWF	EEDATA		; EEDATA'ya gönder.
		MOVF	EEWRITE_N,W	; EEWRITE_N'i W'ye yaz.
		MOVWF	EEADR		; EEADR'ye adres bilgisi olarak gönder.
		INCF	EEADR,F		; EEADR+1
		INCF	EEWRITE_N,F	; Yazılan kayıt sayısını 1 arttır.
		CALL	EEYAZ		; EEPROM'a yaz.		

KAYIT_SAYISI	MOVLW	0		; Kayıt sayısının tutulduğu adres.
KAYDET		MOVWF	EEADR		; EEPROM'un ilk adresi.
		MOVF	EEWRITE_N,W	; Kayıtlı bellek sayısını W'ye yaz.
		MOVWF	EEDATA		; EEDATA' ya gönder.
		CALL	EEYAZ		; VERI'yi EEPROM'a kaydet.
		
KLYCIK		SWAPF	STATUS_TEMP,W	; STATUS_TEMP'i W'ye yaz.
		MOVWF	STATUS		; STATUS'ı ilk konumuna getir.
		SWAPF	W_TEMP,F	; W_TEMP'e swap işlemi uygula.
		SWAPF	W_TEMP,W	; W'yi ilk konumuna getir.

		BCF	INTCON,RBIF	; PORTB kesme bayrağını sıfırla.
		BSF	INTCON,GIE	; Yeni kesmeler kabul edilir.
		BSF	INTCON,RBIE	; PORTB'den gelecek kesmeler geçerli.
		
		RETFIE			; Alt programından çık.

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
EEYAZ	; VERI'yi EEPROM'a kaydetme alt programı.                                    ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
		
		BSF	STATUS,RP0	; BANK1'e geç.
		BCF	INTCON,GIE	; GIE pasif.
		BSF	EECON1,WREN	; Yazma işlemine izin ver.
		MOVLW	H'55'		; EEPROM...
		MOVWF	EECON2		; ...için...
		MOVLW	H'AA'		; ...standard...
		MOVWF	EECON2		; ...işlemler.
		BSF	EECON1,WR	; Yazma işlemini başlat.
SIFIRDATUT	BTFSC	EECON1,WR	; Yazma işlemi bitti mi?
		GOTO	SIFIRDATUT	; Hayır, bekle.
		BSF	EECON1,WREN	; Evet, Write Enable'ı lojik "1" yap.
		BCF	EECON1,EEIF	; EEIF'i temizle.
		BCF	STATUS,RP0	; BANK0'a dön.
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
ANALIZ	; EEDATA register'ından alınan bilginin değerlendirilmesi.                   ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

BIR_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'22'		; 22-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "1" mi?
		GOTO	IKI_1		; Hayır.
		MOVLW	D'3'		; W'ye 3 yaz.
		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'3'		; Sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
BIR_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	BIR_2		; Hayır, diğer sütunları oku.
		RETURN

IKI_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'30'		; 30-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "2" mi?
		GOTO	UC_1		; Hayır.
		MOVLW	D'8'		; W'ye 8 yaz.
		CALL	COMMON1		; Ortak işlemler1.
IKI_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	IKI_2		; Hayır, diğer sütunları oku.
		RETURN
		
UC_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'38'		; 38-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "3" mü?
		GOTO	DORT_1		; Hayır.
		MOVLW	D'13'		; W'ye 13 yaz.
		CALL	COMMON1		; Ortak işlemler1.
UC_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	UC_2		; Hayır, diğer sütunları oku.
		RETURN
		
DORT_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'37'		; 37-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "4" mü?
		GOTO	BES_1		; Hayır.
		MOVLW	D'18'		; W'ye 18 yaz.
		CALL	COMMON1		; Ortak işlemler1.
DORT_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	DORT_2		; Hayır, diğer sütunları oku.
		RETURN
		
BES_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'46'		; 46-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "5" mi?
		GOTO	ALTI_1		; Hayır.
		MOVLW	D'23'		; W'ye 23 yaz.
		CALL	COMMON1		; Ortak işlemler1.
BES_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	BES_2		; Hayır, diğer sütunları oku.
		RETURN
		
ALTI_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'54'		; 54-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "6" mı?
		GOTO	YEDI_1		; Hayır.
		MOVLW	D'28'		; W'ye 28 yaz.
		CALL	COMMON1		; Ortak işlemler1.
ALTI_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	ALTI_2		; Hayır, diğer sütunları oku.
		RETURN
		
YEDI_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'61'		; 61-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "7" mi?
		GOTO	SEKIZ_1		; Hayır.
		MOVLW	D'33'		; W'ye 33 yaz.
		CALL	COMMON1		; Ortak işlemler1.
YEDI_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	YEDI_2		; Hayır, diğer sütunları oku.
		RETURN
		
SEKIZ_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'62'		; 32-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "8" mi?
		GOTO	DOKUZ_1		; Hayır.
		MOVLW	D'38'		; W'ye 38 yaz.
		CALL	COMMON1		; Ortak işlemler1.
SEKIZ_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	SEKIZ_2		; Hayır, diğer sütunları oku.
		RETURN
		
DOKUZ_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'70'		; 70-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "9" mu?
		GOTO	SIFIR_1		; Hayır.
		MOVLW	D'43'		; W'ye 43 yaz.
		CALL	COMMON1		; Ortak işlemler1.
DOKUZ_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	DOKUZ_2		; Hayır, diğer sütunları oku.
		RETURN
		
SIFIR_1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'69'		; 69-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "0" mı?
		GOTO	A1		; Hayır.
		MOVLW	D'48'		; W'ye 48 yaz.
		CALL	COMMON1		; Ortak işlemler1.
SIFIR_2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	SIFIR_2		; Hayır, diğer sütunları oku.
		RETURN

A1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'28'		; 28-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "A" mı?
		GOTO	B1		; Hayır.
		MOVLW	D'53'		; W'ye 53 yaz.
		CALL	COMMON1		; Ortak işlemler1.
A2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	A2		; Hayır, diğer sütunları oku.
		RETURN
		
B1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'50'		; 50-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "B" mi?
		GOTO	C1		; Hayır.
		MOVLW	D'58'		; W'ye 58 yaz.
		CALL	COMMON1		; Ortak işlemler1.
B2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	B2		; Hayır, diğer sütunları gönder.
		RETURN

C1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'33'		; 33-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "C" mi?
		GOTO	D1		; Hayır.
		MOVLW	D'63'		; W'ye 63 yaz.
		CALL	COMMON1		; Ortak işlemler1.
C2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	C2		; Hayır, diğer sütunları gönder.
		RETURN

D1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'35'		; 35-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "D" mi?
		GOTO	E1		; Hayır.
		MOVLW	D'68'		; W'ye 73 yaz.
		CALL	COMMON1		; Ortak işlemler1.
D2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	D2		; Hayır, diğer sütunları gönder.
		RETURN
		
E1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'36'		; 36-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "E" mi?
		GOTO	F1		; Hayır.
		MOVLW	D'72'		; W'ye 77 yaz.
		CALL	COMMON4		; Ortak işlemler4.
E2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	E2		; Hayır, diğer sütunları gönder.
		RETURN

F1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'43'		; 43-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "F" mi?
		GOTO	G1		; Hayır.
		MOVLW	D'76'		; W'ye 81 yaz.
		CALL	COMMON4		; Ortak işlemler4.
F2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	F2		; Hayır, diğer sütunları oku.
		RETURN

G1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'52'		; 52-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "G" mi?
		GOTO	H1		; Hayır.
		MOVLW	D'81'		; W'ye 86 yaz.
		CALL	COMMON1		; Ortak işlemler1.
G2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	G2		; Hayır, diğer sütunları oku.
		RETURN

H1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'51'		; 51-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "H" mi?
		GOTO	I1		; Hayır.
		MOVLW	D'86'		; W'ye 96 yaz.
		CALL	COMMON1		; Ortak işlemler1.
H2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	H2		; Hayır, diğer sütunları oku.
		RETURN

I1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'67'		; 67-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "I mı?
		GOTO	J1		; Hayır.
		MOVLW	D'87'		; W'ye 97 yaz.
		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'1'		; I'nın sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
I2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	I2		; Hayır, diğer sütunları gönder.
		RETURN

J1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'59'		; 59-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "J mi?
		GOTO	K1		; Hayır.
		MOVLW	D'91'		; W'ye 102 yaz.
		CALL	COMMON4		; Ortak işlemler4.
J2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	J2		; Hayır, diğer sütunları gönder.
		RETURN

K1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'66'		; 66-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "K" mı?
		GOTO	L1		; Hayır.
		MOVLW	D'96'		; W'ye 107 yaz.
		CALL	COMMON1		; Ortak işlemler1.
K2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	K2		; Hayır, diğer sütunları gönder.
		RETURN

L1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'75'		; 75-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "L" mi?
		GOTO	M1		; Hayır.
		MOVLW	D'100'		; W'ye 111 yaz.
		CALL	COMMON4		; Ortak işlemler4.
L2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	L2		; Hayır, diğer sütunları gönder.
		RETURN

M1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'58'		; 58-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "M" mi?
		GOTO	N1		; Hayır.
		MOVLW	D'107'		; W'ye 118 yaz.
		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'7'		; M'nin sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
M2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	M2		; Hayır, diğer sütunları gönder.
		RETURN

N1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'49'		; 49-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "M" mi?
		GOTO	O1		; Hayır.
		MOVLW	D'112'		; W'ye 123 yaz.
		CALL	COMMON1		; Ortak işlemler1.
N2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	N2		; Hayır, diğer sütunları gönder.
		RETURN

O1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'68'		; 68-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "O" mu?
		GOTO	P1		; Hayır.
		MOVLW	D'117'		; W'ye 128 yaz.
		CALL	COMMON1		; Ortak işlemler1.
O2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	O2		; Hayır, diğer sütunları gönder.
		RETURN

P1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'77'		; 77-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "P" mi?
		GOTO	Q1		; Hayır.
		MOVLW	D'122'		; W'ye 138 yaz.
		CALL	COMMON1		; Ortak işlemler1.
P2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	P2		; Hayır, diğer sütunları gönder.
		RETURN
		
Q1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'21'		; 21-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "Q" mu?
		GOTO	R1		; Hayır.
		MOVLW	D'127'		; W'ye 143 yaz.
		CALL	COMMON1		; Ortak işlemler1.
Q2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	Q2		; Hayır, diğer sütunları oku.
		RETURN

R1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'45'		; 45-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "R" mi?
		GOTO	S1		; Hayır.
		MOVLW	D'132'		; W'ye 148 yaz.
		CALL	COMMON1		; Ortak işlemler1.
R2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	R2		; Hayır, diğer sütunları gönder.
		RETURN

S1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'27'		; 27-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "S" mi?
		GOTO	T1		; Hayır.
		MOVLW	D'137'		; W'ye 153 yaz.
		CALL	COMMON1		; Ortak işlemler1.
S2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	S2		; Hayır, diğer sütunları gönder.
		RETURN

T1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'44'		; 44-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "T" mi?
		GOTO	U1		; Hayır.
		MOVLW	D'142'		; W'ye 163 yaz.
		CALL	COMMON1		; Ortak işlemler1.
T2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	T2		; Hayır, diğer sütunları gönder.
		RETURN

U1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'60'		; 60-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "U" mu?
		GOTO	V1		; Hayır.
		MOVLW	D'147'		; W'ye 168 yaz.
		CALL	COMMON1		; Ortak işlemler1.
U2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	U2		; Hayır, diğer sütunları gönder.
		RETURN

V1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'42'		; 42-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "V" mi?
		GOTO	W1		; Hayır.
		MOVLW	D'152'		; W'ye 178 yaz.
		CALL	COMMON1		; Ortak işlemler1.
V2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	V2		; Hayır, diğer sütunları gönder.
		RETURN
		
W1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'29'		; 29-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "W" mu?
		GOTO	X1		; Hayır.
		MOVLW	D'159'		; W'ye 185 yaz.
		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'7'		; Sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
W2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	W2		; Hayır, diğer sütunları oku.
		RETURN
		
X1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'34'		; 34-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "X" mi?
		GOTO	Y1		; Hayır.
		MOVLW	D'164'		; W'ye 190 yaz.
		CALL	COMMON1		; Ortak işlemler1.
X2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	X2		; Hayır, diğer sütunları oku.
		RETURN

Y1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'53'		; 53-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "Y" mi?
		GOTO	Z1		; Hayır.
		MOVLW	D'169'		; W'ye 195 yaz.
		CALL	COMMON1		; Ortak işlemler1.
Y2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	Y2		; Hayır, diğer sütunları gönder.
		RETURN

Z1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'26'		; 67-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "Z" mi?
		GOTO	NOKTA1		; Hayır.
		MOVLW	D'174'		; W'ye 200 yaz.
		CALL	COMMON1		; Ortak işlemler1.
Z2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	Z2		; Hayır, diğer sütunları gönder.
		RETURN

NOKTA1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'74'		; 74-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "NOKTA" mı?
		GOTO	BOSLUK1		; Hayır.
		MOVLW	D'175'		; W'ye 201 yaz.
		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'1'		; NOKTA'nın sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
NOKTA2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	NOKTA2		; Hayır, diğer sütunları gönder.
		RETURN
		
BOSLUK1		MOVF	VERI,W		; Karakter'e ait kodu W'ye yaz.
		SUBLW	D'41'		; 41-EEDATA
		BTFSS	STATUS,Z	; Basılan tuş "SPACE" mi?
		RETURN			; Hayır.
CUMLE_SONU	MOVLW	D'178'		; W'ye 204 yaz.
		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'3'		; BOSLUK'un sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
BOSLUK2		MOVLW	B'00000011'	; W'ye 3 yaz.
		CALL	COMMON2		; Ortak işlemler2.
		DECFSZ	CHAR_SUTUN,F	; Karakterin sütun sayısı-1, 0 mı?
		GOTO	BOSLUK2		; Hayır, diğer sütunları gönder.
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
; Karakterlerle ilgili yapılacak ortak işlemler, bu alt programda toplandı.	     ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

COMMON1		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'5'		; Sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
		RETURN

COMMON2		MOVWF	PCLATH		; Tabloya ulaşmak için üst bayt olarak yaz.
		MOVF	LINE,W		; Line'ı W'ye yaz.
		CALL	TABLE		; Çevrim tablosunu çağır.
		CLRF	PCLATH		; Üst bayt'ı sıfırla.
		MOVWF	SUTUN1		; Tablo bilgisini SUTUN'a gönder.
		CALL	GOSTER		; Sütun bilgisini LED göstergeye aktar.
		CALL	SHIFT		; Sütunları 1 adım sola ötele.
		DECF	LINE,F		; LINE-1
		RETURN

COMMON4		MOVWF	LINE		; LINE register'a gönder.
		MOVLW	D'4'		; Sütun sayısını W'ye yaz.
		MOVWF	CHAR_SUTUN	; CHAR_SUTUN register'a gönder.
		RETURN

;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;
TABLE	; Klavyeden basılan her tuş KLYOKU alt programında 8-bit'lik paralel KOD'a   ;
	; dönüştürülür. Her karakterin sütun sayısı farklı olduğundan, karakterin    ;
	; sütun özellikleri aşağıda yer alan TABLE adlı alt programa yerleştirildi.  ;
	; Örneğin "I" karakterini oluşturmak için, 3 kez çevrim tablosundan okuma    ;
	; yapılır. "W" ya da "M" karakterini oluşturmak için ise 7 kez.              ;
;«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»;

	ADDWF	PCL,F	; Program sayıcı+Tabloda ulaşılacak satır.

	RETLW	H'00'	; 0
_1	RETLW	H'7F'	; 1
	RETLW	H'20'	; 2
	RETLW	H'10'	; 3

_2	RETLW	H'31'	; 4
	RETLW	H'49'	; 5
	RETLW	H'49'	; 6
	RETLW	H'49'	; 7
	RETLW	H'27'	; 8

_3	RETLW	H'36'	; 9
	RETLW	H'49'	; 10
	RETLW	H'49'	; 11
	RETLW	H'41'	; 12
	RETLW	H'22'	; 13

_4	RETLW	H'04'	; 14
	RETLW	H'7F'	; 15
	RETLW	H'24'	; 16
	RETLW	H'14'	; 17
	RETLW	H'0C'	; 18

_5	RETLW	H'46'	; 19
	RETLW	H'49'	; 20
	RETLW	H'49'	; 21
	RETLW	H'49'	; 22
	RETLW	H'7A'	; 23

_6	RETLW	H'26'	; 24
	RETLW	H'49'	; 25
	RETLW	H'49'	; 26
	RETLW	H'49'	; 27
	RETLW	H'3E'	; 28

_7	RETLW	H'60'	; 29
	RETLW	H'50'	; 30
	RETLW	H'48'	; 31
	RETLW	H'47'	; 32
	RETLW	H'40'	; 33

_8	RETLW	H'36'	; 34
	RETLW	H'49'	; 35
	RETLW	H'49'	; 36
	RETLW	H'49'	; 37
	RETLW	H'36'	; 38

_9	RETLW	H'3E'	; 39
	RETLW	H'49'	; 40
	RETLW	H'49'	; 41
	RETLW	H'49'	; 42
	RETLW	H'32'	; 43

_0	RETLW	H'3E'	; 44
	RETLW	H'41'	; 45
	RETLW	H'41'	; 46
	RETLW	H'41'	; 47
	RETLW	H'3E'	; 48

_A	RETLW	H'3F'	; 49
	RETLW	H'48'	; 50
	RETLW	H'48'	; 51
	RETLW	H'48'	; 52
	RETLW	H'3F'	; 53

_B	RETLW	H'36'	; 54
	RETLW	H'49'	; 55
	RETLW	H'49'	; 56
	RETLW	H'49'	; 57
	RETLW	H'7F'	; 58

_C	RETLW	H'22'	; 59
	RETLW	H'41'	; 60
	RETLW	H'41'	; 61
	RETLW	H'41'	; 62
	RETLW	H'3E'	; 63

_D	RETLW	H'3E'	; 64
	RETLW	H'41'	; 65
	RETLW	H'41'	; 66
	RETLW	H'41'	; 67
	RETLW	H'7F'	; 68

_E	RETLW	H'41'	; 69
	RETLW	H'49'	; 70
	RETLW	H'49'	; 71
	RETLW	H'7F'	; 72

_F	RETLW	H'40'	; 73
	RETLW	H'48'	; 74
	RETLW	H'48'	; 75
	RETLW	H'7F'	; 76
	
_G	RETLW	H'2E'	; 77
	RETLW	H'49'	; 78
	RETLW	H'49'	; 79
	RETLW	H'41'	; 80
	RETLW	H'3E'	; 81

_H	RETLW	H'7F'	; 82
	RETLW	H'08'	; 83
	RETLW	H'08'	; 84
	RETLW	H'08'	; 85
	RETLW	H'7F'	; 86

_I	RETLW	H'7F'	; 87

_J	RETLW	H'7E'	; 88
	RETLW	H'01'	; 89
	RETLW	H'01'	; 90
	RETLW	H'02'	; 91

_K	RETLW	H'43'	; 92
	RETLW	H'24'	; 93
	RETLW	H'18'	; 94
	RETLW	H'08'	; 95
	RETLW	H'7F'	; 96

_L	RETLW	H'01'	; 97
	RETLW	H'01'	; 98
	RETLW	H'01'	; 99
	RETLW	H'7F'	; 100

_M	RETLW	H'3F'	; 101
	RETLW	H'40'	; 102
	RETLW	H'40'	; 103
	RETLW	H'3F'	; 104
	RETLW	H'40'	; 105
	RETLW	H'40'	; 106
	RETLW	H'3F'	; 107

_N	RETLW	H'7F'	; 108
	RETLW	H'02'	; 109
	RETLW	H'1C'	; 110
	RETLW	H'20'	; 111
	RETLW	H'7F'	; 112

_O	RETLW	H'3E'	; 113
	RETLW	H'41'	; 114
	RETLW	H'41'	; 115
	RETLW	H'41'	; 116
	RETLW	H'3E'	; 117

_P	RETLW	H'30'	; 118
	RETLW	H'48'	; 119
	RETLW	H'48'	; 120
	RETLW	H'48'	; 121
	RETLW	H'3F'	; 122

_Q	RETLW	H'3F'	; 123
	RETLW	H'43'	; 124
	RETLW	H'45'	; 125
	RETLW	H'41'	; 126
	RETLW	H'3E'	; 127

_R	RETLW	H'31'	; 128
	RETLW	H'4A'	; 129
	RETLW	H'4C'	; 130
	RETLW	H'48'	; 131
	RETLW	H'7F'	; 132

_S	RETLW	H'26'	; 133
	RETLW	H'49'	; 134
	RETLW	H'49'	; 135
	RETLW	H'49'	; 136
	RETLW	H'32'	; 137

_T	RETLW	H'40'	; 138
	RETLW	H'40'	; 139
	RETLW	H'7F'	; 140
	RETLW	H'40'	; 141
	RETLW	H'40'	; 142

_U	RETLW	H'7E'	; 143
	RETLW	H'01'	; 144
	RETLW	H'01'	; 145
	RETLW	H'01'	; 146
	RETLW	H'7E'	; 147

_V	RETLW	H'78'	; 148
	RETLW	H'06'	; 149
	RETLW	H'01'	; 150
	RETLW	H'06'	; 151
	RETLW	H'78'	; 152

_W	RETLW	H'7E'	; 153
	RETLW	H'01'	; 154
	RETLW	H'01'	; 155
	RETLW	H'7E'	; 156
	RETLW	H'01'	; 157
	RETLW	H'01'	; 158
	RETLW	H'7E'	; 159

_X	RETLW	H'41'	; 160
	RETLW	H'22'	; 161
	RETLW	H'1C'	; 162
	RETLW	H'22'	; 163
	RETLW	H'41'	; 164

_Y	RETLW	H'40'	; 165
	RETLW	H'20'	; 166
	RETLW	H'1F'	; 167
	RETLW	H'20'	; 168
	RETLW	H'40'	; 169

_Z	RETLW	H'61'	; 170
	RETLW	H'51'	; 171
	RETLW	H'49'	; 172
	RETLW	H'45'	; 173
	RETLW	H'43'	; 174

_NOKTA	RETLW	H'01'	; 175

_BOSLUK	RETLW	H'00'	; 176
	RETLW	H'00'	; 177
	RETLW	H'00'	; 178

;------------------------------------------------------------------------------------;
		END

segment

CODE SEGMENT
Bu segment çalışan programı içeren segmentin adresini gösterir. Diğer bir deyişle CS ile adreslenen segment içinde makine dili komutları yer almaktadır. Segmentin ilk baytından itibaren program parçası çalıştırılmaya başlanır.

DATA SEGMENT
Data segmenti register’i olan DS geçerli data segmentinin başlangıç adresini içerir. Bu segment genel olarak program değişkenlerini tarafından kullanılır. Diğer bir deyişle bilgi işlem operasyonlarında tabii tutulan bilgiler Data Segment içindeki lokasyonlara (bölümlerde) yer alır.

STACK SEGMENT
Bu segment alt programlara giderken dönüş adreslerini saklamak program bitiminde işletim sistemine dönmek için gerekli bölgelerin saklanmasında kullanılır.

EXTRA SEGMENT
Genel olarak string operasyonları için kullanılır.


CPU registerları 

       Mikro işlemci, register adı verilen 14 adet özel lokasyon içerir. Herbiri 16 bit genişliğinde olan bu lokasyonları özel bellek birimleri olarak düşünebiliriz. Registerler, mikro işlemci tarafından özel amaçlar için kullanılır. Ayrıca, çeşitli verilerin geçici süreler için saklanması ve bu veriler üzerinde işlem yapılması için registerlerden yararlanılır. Registerler CPU chip’inin üzerinde yer aldıklarından, registerle yapılan işlemler, bellek bölgeleri üzerinde yapılan işlemlere nazaran çokdahahızlıdır. 
8086/8088 mikro işlemcisinin sahip olduğu registerleri aşağıdaki gibi guruplara ayırmamız mümkün; 

 

Segment registerleri (4 adet ) 
Genel amaçlı registerler 
a) Data registerleri (4 adet ) 
b) Pointer ve index registerleri (4 adet ) 
Instruction Pointer (1 adet ) 
Program Status word (1 adet ) 
       Yukarıda gösterilen 14 adet registerin 4 tanesi CODE, DATA, STACK VE EXTRA segmentlerin başlangıç adreslerini saklayan CS,DS,SS ve ES registerleridir. Bu dört registere genel olarak segment registerleri denilmektedir. Geriye kalanlardan 8 tanesi genel amaçlı register, 1 tanesi instruction pointer (komut göstergeci ) registeri ve sonuncusu da program status word (durum göstergeci) registeri olarak bilinmektedir. Program status word registerine flag registeri adını vereceğiz. Genel amaçlı registerler, kendi aralaronda iki guruba ayrılırlar. Her iki gurup, 4 adet registerden oluşur. Bunlardan ilk dört registere data, diğer 4 adet registereise pointer ve index registerleri adı verlir.

 

Data registerları 

       Daha çok, aritmetiksel işlemler için kullanılan DATA registerleri AX,BX,CX ve DX’dir. Herbir DATA registeri diğer registerlerden farklı olarak, bir bütün halinde veya iki parça halinde kullanılabilmektedir. Bir DATA registerini iki alt alana bölebilir, böylece registeri 16 bitlik birtek register halinde veya 8 bitlik iki ayrı register halinde kullanma imkanına sahip olabiliriz. Bu özellik şekil üzerinde gösterilmiştir. Örneğin AX registerini 16 bitlik işlemler için AX’i oluşturan AH ve AL yi ise 8 bitlik işlemler için ele alırız. 16 bit uzunluğundaki data registerlerinden herhangi birisinin yüksek seviyeli kısmı (high order) register isminin ve ‘High’ kelimesinin ilk harfi ile , alçak seviyeli kısmı (Low order) ise ,yine register isminin ve ‘Low’ kelimesinin ilk harfi ile gösterilir. Böylece AX için AH ve AL, BX için BH ve BL ,CX için CH ve CL, DX için DH ve DL olarak isimlendirilen 8-bitlik registerler elde edilir. Bu 8 bit registerlerden birinin değerinin değiştirilmesi ile, kendisini ihtiva eden 16 bit registerinin değerinin de değişeceği ve bunun tersinin de mümkün olacağı açıktır. Fakat bir 16-bit registerin herhangi bir yarımı üzerinde yapılan işlem diğer yarımı üzerinde değişikliğe yol açmayacaktır. Data registerlerinin dışında kalan registerlerinin dışında kalan registerlerin, bu şekilde alt alanlara bölenemeyeceği şekil üzerinde de gösterilmiştir. Ancak flag registerleri için daha da farklı bir kullanım söz konusudur. 

       DATA registerlerinin herhangibiri genel program amaçları için kullanılabilir. Diğer taraftan belirli data registerlerlerinin belirli işlemler sırasında operand olarak kullanılması zorunludur. Böyle bir durumda, programcının bir seçim yapması söz konusu değildir. Akümülatör olarak isimlendirilebilen AX registeri ; çarpa, bölme, giriş, çıkış, bazı string operasyonlarında word uzunluklu olarak kullanılır. AL registeri byte uzunluklu olup, bazı operasyonların sayaç registeri olarak veya desimal amaçlı aritmetiksel işlemlerde transfer alanı (alıcı alan registeri ) olorak kullanılır. Ah registeri byte uzunluklu bölme ve çarpmalarda kullanılır. Base registerolarak isimlendirilebilen BX , daha çok bellek içindeki verilerin adreslanmesinde kullanılır. CX sayaç registeridir, LOOP komutlarının veya tekrarlı! ; string operasyonlarının sayaç registeri olarak kullanılır. CL registeri shift ve rotate sayacı olarak kullanılabilir. Data registeri ismi verilen DX , word uzunluklu çarpma ve bölme operasyonlarında ,ayrıca giriş çıkış operasyonları için port numarası göstermede kullanılır. 

Segment registerları 

       8088 ve 8086 işlemcisi kullanan bilgisayarlar, programların veya dataların belleğin iki ayrı alanına yerleştirirler. Bu program ve data alanları maximum 64 K büyüklüğnde olup segment olarak isimlendirilir. 8088 işlemcisi aynı anda 4 ayrı segmente sahip olabilir. Bu segmentler CODE, DATA, STACK ve EXTRA segment olarak isimlendirilir. Bu segmentlere ait ilk byte’ın diğer bir deyişle segmentin başlangıç adresinin gösterilmesi için 4 ayrı register kullanılır. Bunlar; sırası ile CS, DS, SS ve ES olup segment registerleri olarak isimlendirilirler. Code segment registeri olan CS icra gören programı içeren segmentin başlangıç adresini gösterir. Diğer bir deyişle, CS ile adreslenen segment içinde makine dili komutları yer almaktadır. Stack segment registeri olan SS, geçerli stack segmentin başlangıç adresini içerir. Stack segmen! t,çeşitli verilerin geçici olarak saklandığı bir bellek bloğudur. Data segment registeri olan DS ,geçerli data segmentinin başlangıç adresidir. Bu segment genel olarak program değişkenleri tarafından kullanılır. Diğer bir deyişle, bilgi işlem operasyonlarına tabi tutulan bilgiler, data segment içindeki lokasyonlarda yer alırlar. Ekstra segment registeri olan ES geçerli ekstra segmentin başlangıç adresini içerir. Ekstra segment, genel olarak string operasyonları için kullanılır. Yeterli bellek büyüklüğüne sahip olan sistemlerde bu 4 segment, belleğin farklı parçalarıdır. Geniş belleğe sahip olmayan sistemlerde ise, bu segmentler üstüste gelebilir.

 

Pointer ve index registerları 

       Yukardaki şekil üzerinde degösterildiği gibi; pointer ve indeks registerleri SP, BP, SI ve DI ’dir. Ancak, IP ve BX registerlerini de birer pointer ya da indeks registeri olarak kabul etmek mümkündür. Pointer ve indeks registerleri de, data registerleri gibi aritmetiksel işlemler için kullanılabilmektedirler. Fakat bu registerlerin kullanımındaki asıl amaç çeşitli bellek bölgelerindeki verilere ulaşabilmek için adres göstericisi olarak ele alınmalarıdır. Bellek içindeki bir lokasyonun adresini gösterebilmek için, iki ayrı adres değeri kullanılır. İlk değer, işaret edilen lokasyonu içinde barındıran segmentin adresidir . bu noktada segment registerlerinden yararlanılır. Lokasyonun segment içindeki yerini gösteren ikinci adres değeri ise offset adresi olarak bilinir. Offset adreslerinin gösterilmesi için de , pointer ve indeks registerlerinden yararlan! 05;lır. 
 

       Mikro işlemci, code segment içindeki lokasyonlara erişebilmek için CS ve IP registerlerini kullanır. Stack segment içinde bulunan bir veriye ulaşmak için SS registeri ile birlikte SP ya da BP registerlerinden birini kullanmak gerekir. Data segment içindeki lokasyonlara erişmek için, data segmentin başlangıcı olan DS registerinden, lokasyonun offset adresini göstermesi için de BX, SI veya DI registerlerinden yararlanılır. Ekstra segment ya da gelişigüzel seçilen bir segment içerisindeki lokasyonlara erişebilmek için CS, DS, SS’ten yararlanabiliriz. Örneğin ES’deki değeri SS’ e ve ekstra segment içindeki lokasyonun offset adreslerini BP’ ye aktarabiliriz. 

 

Instruction pointer registerı 

       Komut göstergeci olarak isimlendirebileceğimiz IP registeri, 8088’in icra ünitesi tarafundan icra ettirilecek olan bir sonraki komutun offset adresini içerir. Offset adersi IP ile gösterilen bellek bölgesi code segmenti içindedir. Çünkü programları oluşturan komutlar bu segment içinde bulunur. IP registeri özel amaçlı bir register olması nedeniyle, programcı tarafından direkt olarak kullanılamaz. Ancak bu registerin değerini, stack üzerindeki bilgiler ile dolaylı olarak değiştirmek mümkündür. 

 

Program status word registerı 

       Program status word registeri, kısaca PSW şeklinde gösterebiliriz. Bu registere flag registeri adını vereceğiz. Flag registeri diğer registerlerden oldukça farklıdır. Herşeyden önce, ‘PSW’ gösterimi bir operand değil, sadece bu registerden bahsetmek için kullanılan bir kısaltmadır. Flag registerinin bir bütün olarak veya 16 bitlik, 8 bitlik bir sayı olarak değerlendirilmesi söz konusu değildir. Çünkü flag registerinin sayısal değeri değil, kendisini oluşturan bitlerin herbirinin değeri önem taşımaktadır. Ancak, burada da bir kısıtlama olacak ve registeri oluşturan 16 bitten sadece 9 tanesi kullanılacaktır. Bu 9 bitin herbirinin mevcut değeri çeşitli kontrol komutların icra şekline etki etmekte ya da aritmetiksel veya mantıksal işlemlerin sonucu hakkında bilgi vermektedir. Örneğin ! flag registerinin 6.biti zero flağı olarak isimlendirilir. Bu işlem sonrasında , bu bitin değerini kontrol ederek , işlem sonucunun 0 olup olmadığını kontrol edebiliriz. Bu bitin değeri 1 ise , işlemin sonucu 0 , aksi taktirde 0’dan farklıdır.

Not: DOS ekran animasyonu ile PIC için 5×7 LED matris programı farklı donanım hedeflerine aittir. Sürümler ve taslaklar ayrı kaynaklar olarak korunmuştur.

Ekran görüntülerindeki kısa örnekler

Ekranı temizlemek için BIOS INT 10H, AH=06H kaydırma hizmetinin AL=0 seçeneği kullanılmıştır:

MOV AX,0600H
MOV BH,07H
MOV CX,0
MOV DX,184FH
INT 10H

Renkli dikdörtgen denemesi kaynakta “kesin değil” olarak adlandırılmıştır:

MOV AX,0600H
MOV CH,1
MOV CL,1
MOV DH,24
MOV DL,78
MOV BH,100b
INT 10H

DOS INT 21H, AH=0BH standart giriş durumunu sorgular: AL=00H ise karakter yok, AL=FFH ise karakter hazırdır. Tuş bekleme örneği:

MOV AH,1
INT 21H

Ekran görüntüleri metne aktarıldığı için ayrıca indirme dosyasına eklenmemiştir.

eem332-matrix-projesi.zip

ZIP arşivi · 359 KB · 19.04.2011

⬇ (359 KB)