· EEM332

EEM332 Mikroişlemciler: Laboratuvar 6: Assembly Döngüleri ve Cümle İşleme

EEM332 – Mikroişlemciler · 23.03.2006 · 18.10.2026

Bu yazı, Başkent Üniversitesi EEM332 Mikroişlemciler ders arşivindeki ilgili notları ve uygulamaları bir araya getiriyor (2006–2015). Cümle ve kelime işleme, sayma, dönüştürme ve assembly döngüleri; ön çalışmalar ve deney çözümleri. 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.

eem332_lab06

EEM 332 - Mikroişlemciler Deney Numarası: 6 Deney Adı: Assembly Programlama/Döngüler

Ön Çalışma Laboratuvara gelmeden önce aşağıda verilen soruları yanıtlayınız.

1) Çevirici dilinde, klavyeden girilen bir cümlede (en fazla 100 karakter) bulunan kelimelerin

sayısını bulan ve bu sayıyı onluk (decimal) sistemde ekrana yazdıran programı yazınız.

Deneysel Çalışma

1) Ön çalışmada yazdığınız programı çalıştırınız ve sonuçları gösteriniz.

2) Ön çalışmada yazdığınız programı, aşağıdaki işlemi yapacak şekilde değiştiriniz ve

sonuçları gösteriniz.

Yazılacak programla, return (enter) tuşuna basıldığında klavyeden girilmiş olan cümlenin en sonundaki kelimenin en başa atılması sağlanmalıdır.

Örnek

bu kelimeyi başa atınız <enter> atınız bu kelimeyi başa <enter> başa atınız bu kelimeyi <enter> kelimeyi başa atınız bu <enter> bu kelimeyi başa atınız

Rapor

1) Ön ve deneysel çalışmalarda yazdığınız programlardan da faydalanarak klavyeden girilen

bir cümledeki kelimeleri ard [kişisel bilgi çıkarıldı] 3 kez gelişigüzel (random) sıralayan programı yazınız.

Örnek

bu cümleyi random sıralayınız <enter> cümleyi bu sıralayınız random random bu sıralayınız cümleyi bu random cümleyi sıralayınız

calisma-641

1)

.MODEL SMALL
.STACK 100h
.DATA
MAXCUMLE EQU 100
STRING DB MAXCUMLE DUP(?)
COUNT DB (?)
.CODE
START:
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
MOV AH,3Fh
MOV BX,01h
MOV CX, MAXCUMLE
MOV DX,OFFSET STRING
INT 21H
AND AX,AX
JZ DONE
MOV CX,AX
MOV DI,OFFSET STRING
MOV AL,' '
MOV AH,CL
KONTROL:
CMP AL,[DI]
JZ SAY
JNZ NO
SAY:
INC BX
CMP [DI+1],AL
JZ ATLA

BOSLUKGEC

INC DI
INC DX
CMP AL,[DI]
JZ ATLA
NO:
INC DI
INC DX
;CMP ah,Dl
;JZ ATLA
LOOP KARSILASTIR
MOV AX,BX
MOV DX,AX
OR DX 3030H
MOV AH,02H
INT 21h
DONE:
MOV AH,4CH
INT 21H
ENDP
END START

2) Gelişi güzel sayı üretmek için 3 farklı yöntem vardır. Bunlar Get Trick Count API si, Rdtsc

komutu ve nrandom komutudur.

GetTickCount

Çağrıldığında işletim sisteminin başladığı andan itibaren geçen zamanı bize milisaniye olarak döndürür ve EAX yazmacına yazdırır. Her çağrılışda farklı bir sayı gelecektir. EAX yazmacına atılan zaman değerinin tamamını ya da 8 bitlik veya 16 bitlik kısımlarını kullanarak rassal bir sayı elde edebilirz

RDTSC

Çağrıldığında bize işlemcinin en son resetlendiği andan itibaren her bir sayıp devrini verir. RDTSC için ayrılan yazmaçlar EAX ve EDX yazmaçlarıdır. RDTSC komutu düşük öncelikli 32 biti EAX yazmacına yüksek öncelikli 32 biti EDX yazmacına yazar.

Masm32.lib->nrandom fonksiyonu

Masm32 ile birlikte gelen rastgele sayı üreten fonksiyondur.

RDTSC

invoke nseed,eax invoke nrandom,sayı şeklinde çağrılır burada sayı bir değişken ya da doğrudan bir sayı olabilir. Bu da o sayıya kadar rastgele sayı üretmemizi sağlar.nseed ise nrandom komutunun program açıldığında hep aynı sayıyı değil yine rassal bir sayı üreterek açılmasını sağlar. Kullanılmazsa nrandom yine rastgele sayı üretir ancak program her açıldığında aynı sayı ile açılır.

lab06_önçalışma

1)

.MODEL SMALL
.STACK 64
.DATA
SONUC    DB    100 DUP(?)
.CODE
MAIN          PROC    FAR                  ;this is the program entry point
MOV     AX,@DATA                  ;load the data segment address
MOV     DS,AX                    ;assign value to DS
SUB DX,DX        ;DX'i s?f?rla
SUB BX,BX
INC DX           ;En az bir kelime
DEVAM:     MOV AH,1
INT 21H
CMP AL,0DH          ;Enter'a basildi mi?
JZ BITIS            ;Basildiysa döngüden çık
MOV [SI],AL
INC SI           ;stringi arttir
CMP AL,20H         ;Bosluk mu?
JZ BOSLUK         ;Bosluk ise DX'i arttır
JMP DEVAM          ;Devam
BOSLUK: INC DX             ;Bosluk, DX'i arttır
JMP DEVAM
MOV DI,DX
;Lab Föyünde verilen Hex 'i Decimal'e çeviren kod
BITIS: MOV DI,DX
MOV AX,DI     ;HEXVAL ADRESINDEN DEGERI AX?E AL
SUB DX,DX
MOV BL,000AH      ;BX YAZMACINA 0A DEGERINI ATA
DIV BL        ;AX YAZMACINI BX YAZMACINA B?L
MOV DH,AL      ;CIKAN DEGER DECIMAL SAYININ 10LAR
MUL BL          ;DEGERI BX?LE CARP
MOV CX,DI
SUB CX,AX    ;CX VE AX YAZMACLARININ FARKINI AL
MOV DL,CL     ;CIKAN DEGER DECIMAL SAYININ 1LER
OR DX,3030H      ;ASCII'ye çevir
XCHG DL,DH         ;Basamakları düzenle
MOV DI,OFFSET SONUC
MOV AX,0D0AH          ;Alt satıra yazdırmak icin
MOV [DI],AX           ;Alt Satıra yazdırmak icin
ADD DI,2
MOV [DI],DL
INC DI
MOV [DI],DH
INC DI
MOV DX,OFFSET SONUC
MOV AH,'$'      ;String sonu
MOV [DI],AH
MOV         AH,09H      ;Yazdır
INT        21H
MOV    AH,4CH           ;set up to
INT   21H             ;return to DOS

MAIN ENDP

END MAIN              ;this is the program exit point

2)

.model small
.stack 100
.data
rnum dw ?
.code
main proc far
in al, 40h           ; read micro-clock for initial seed
mov ah, al
in al, 40h
xchg al, ah
or ax, 1
mov rnum, ax               ;rnum değeri ax değerini alır
mov bx,0100                ;0-100 arası için kıstılama yapacak register
div bx                    ;bölme işlemi kalan dx registerinde
add dx,1                 ;mod işlemi gereği 1 toplanması
mov ax,dx
MOV aH, 0H
;decimale çevirmek için gerekli işlemler
MOV BX, 10
DIV BL
OR aX, 3030H
mov dl,al
mov bl,ah
mov ah,02H
int 21H
mov dl,bl      ;yazdırma işlemleri
mov ah,02H
int 21H
mov ah,4cH       ;DOS a dönüş
int 21H

main endp

end main

rapor 6

.MODEL LARGE
.STACK 64
.DATA
CUMLE            DB    100 DUP(?)
KELIME_YAZDIR    DB    100 DUP(?)
RANDOM_KEL       DB    100 DUP(?)
.CODE
MAIN       PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV DI,OFFSET CUMLE
MOV CX,03h
PUSH CX
SUB BL,BL
VERİ_AL:   MOV AH,01H
INT   21H
MOV [DI],AL
INC DI
CMP AL,13
JNE   VERİ_AL
MOV DI,OFFSET CUMLE
MOV SI,OFFSET KELIME_YAZDIR
MOV [SI],DI
INC DI
INC SI
KEL_BAS_AL:      MOV AL,[DI]
INC DI
CMP AL,13
JE    ENTER_EKLE
CMP AL,' '
JNE   KEL_BAS_AL
INC BL
MOV BH,BL
MOV DX,DI
MOV [SI],DX
INC SI
JMP KEL_BAS_AL
ENTER_EKLE:      INC BH
MOV AL,13
MOV [SI],AL
MOV DI,OFFSET RANDOM_KEL
RAND_KEL: MOV AH,2Ch
INT   21h
MOV SI,OFFSET KELIME_YAZDIR
POP CX
SHR DL,CL
PUSH CX
AND DL,BL
SUB DH,DH
ADD SI,DX
MOV AL,[SI]
MOV [DI],AL
INC DI
SON_BUL:   SUB AX,AX
INC SI
MOV AL,[SI]
DEC SI
MOV [SI],AL
INC SI
CMP AL,13
JNE  SON_BUL
DEC BL
DEC BH
CMP BH,0h
JNE  RAND_KEL
MOV DH,13
MOV [DI],DH
MOV DI,OFFSET RANDOM_KEL
YAZ_DIGER_KEL: MOV SI,OFFSET CUMLE
SUB AX,AX
MOV AL,[DI]
SUB AH,AH
ADD SI,AX
MOV DH,13
CMP [DI],DH
JE   TEKRAR_YAP
INC DI
YAZ:      SUB DX,DX
MOV DL,[SI]
INC SI
CMP DL,13
JE   BOSLUK_KOY
MOV AH,02h
INT  21h
CMP AL,' '
JE   YAZ_DIGER_KEL
JMP YAZ
BASA_DON: JMP KEL_BAS_AL
BOSLUK_KOY:    MOV DL,' '
MOV AH,02h
INT  21h
JMP YAZ_DIGER_KEL
TEKRAR_YAP:    POP CX
DEC CX
PUSH CX
MOV DI,OFFSET CUMLE
MOV SI,OFFSET KELIME_YAZDIR
MOV [SI],DI
INC DI
INC SI
SUB BX,BX
CMP CX,0
JNE  BASA_DON
MOV AH,4CH
INT  21H

MAIN ENDP

END MAIN

ön calışma 6

Başkent Üniversitesi Elektrik - Elektonik Mühendisliği Bölümü

EEM 332 – Mikroişlemciler Laboratuvarı

Ön Çalışma

Deney No: #6 Deney Adı: Assembly Programlama/ Döngüler Deney Tarihi:21/04/06

.MODEL SMALL
.STACK 64
.DATA
ORG 0100h
DAT           DB 100 DUP(?)
Sayi DB   ?
.CODE
MAIN          PROC            FAR
MOV             AX,#DAT
MOV             DS,AX
SUB             AX,AX
MOV             CX,100
MOV             SI,OFFSET DAT
sub             bx,bx

verial

mov             ax,0
int             16h
mov             [si],si
inc             si
mov             dl,al
mov             ah,02
cmp             sl,32d: (bosluk karşılaştırılması burada yapılır)
jnz             devam : 32d boşlugunun seçili kodu eger boşluk

bırakılmışsa bs 1 arttırılabilir.

İnc             bx
devam:        cmp             sl,46 : nokta karşılaştırılması burada yapılır.
Jx              yazdır
İnt             21h : dl dekini yazdırır.
loop            verial
inc             bl : bl son bir kez arttırılır,çünkü boşluk sayısı kelime

sayısından 1 azdır.

sub             ax,ax
mov             al,bl
mov             cl,10
div             al, : ax 10’a bölününce al’ye bölüm, ah’a kalan atılır.
mov             bx,ax
mov             dl,46
int             21h
mov             ah,02
int             21h
mov             dl,09
int             21h
mov             dl,ah
or              dl,46
int             21h
mov             dl,bh
or              dl,46
int             21h
mov             ah,4ch
int             21h
ENDP
END MAİN

rapor03

Başkent Üniversitesi Elektrik - Elektonik Mühendisliği Bölümü

EEM 332 – Mikroişlemciler Laboratuvarı

RAPOR

Deney No: #6 Deney Adı: Assembly Programlama/ Döngüler Deney Tarihi: 21/04/2006

Deneysel çalışma

1)

C. Mov [DI],AL Register indirect addressing 10000+0100=10100

D.MOV AL,[BP+DI]

Based indexed addressing mode 10000+1000+0100= 11100

E. MOV CX,[DI]

İndexed addressing mode 10100

F. MOV DX,[BP]

Based addressing mode 11000

G. MOV [100],DL

Direct addressing mode 10100

H. MOV [SI+100],AX

İndexed addressing mode 20000+0200+100= 20300

İ. MOV DL,[BX+100]

Based addressing mode 10000+0300+100= 10400

J. MOV [SI],DX

Register indirect addressing 10000+0200= 10200

K. MOV CL,[BX]

Based addressing addressing 10300

L. MOV CH,[BX+SI]

Based indexed addressing mode 10000+0300+0200= 10500

M. MOV AX,[BP+200]

Based addressing mode 10000+1000+200= 11200

N.MOV AL,[BP+SI-200]

Based indexed addressing mode 10000+1000+0200-200= 11000

O. MOV AL,[SI-0100]

İndexed indirect mode 10000+0200-0100= 10100

2)

Programın komutları :( Assembly)

(Hafıza adresleri) Program komutları

13A5:0100     mov ax,1234
13A5:0103     mov bx,ax
13A5:0105     mov cl,bl
13A5:0107     DS: mov [0200],ax
13A5:010B     mov ch,[0201]
13A5:010F     ES: mov [0220],ax
13A5:0113     mov SI,0220
13A5:0116     mov ah,[SI]
13A5:0118     mov bp,0220
13A5:011B     DS: mov ax,5678
13A5:011F     mov bx,0200
13A5:0122     DS: mov [bx+2],ax
13A5:0126     mov ax,90AB
13A5:0129     mov DI,0220
13A5:012C     mov [DI]-1c,ax
13A5:012F     mov bx,100
13A5:0132     mov SI,104
13A5:0135     mov cl,[bx][SI]
13A5:0137     mov SI,0100
13A5:013A     mov ch,[bx][SI]+5

Komut satırları taker taker trace yapılırsa çıkan sonuçlar şu şekildedir.

-t
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0103 NV UP EI PL NZ NA PO NC
13A5:0103 89C3   MOV BX,AX
-t
AX=1234 BX=1234 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0105 NV UP EI PL NZ NA PO NC
13A5:0105 88D9   MOV CL,BL
-t
AX=1234 BX=1234 CX=0034 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0107 NV UP EI PL NZ NA PO NC
13A5:0107 3E     DS:
13A5:0108 A30002   MOV [0200],AX            DS:0200=0000
-t
AX=1234 BX=1234 CX=0034 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=010B NV UP EI PL NZ NA PO NC
13A5:010B 8A2E0102 MOV CH,[0201]             DS:0201=12

-

-t
AX=1234 BX=1234 CX=1234 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=010F NV UP EI PL NZ NA PO NC
13A5:010F 26     ES:
13A5:0110 A32002   MOV [0220],AX            ES:0220=0000
-t
AX=1234 BX=1234 CX=1234 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0113 NV UP EI PL NZ NA PO NC
13A5:0113 BE2002  MOV SI,0220
-t
AX=1234 BX=1234 CX=1234 DX=0000 SP=FFEE BP=0000 SI=0220 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0116 NV UP EI PL NZ NA PO NC
13A5:0116 8A24   MOV AH,[SI]              DS:0220=34
-t
AX=3434 BX=1234 CX=1234 DX=0000 SP=FFEE BP=0000 SI=0220 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0118 NV UP EI PL NZ NA PO NC
13A5:0118 BD2002  MOV BP,0220

-

-t
AX=3434 BX=1234 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=011B NV UP EI PL NZ NA PO NC
13A5:011B 3E     DS:
13A5:011C B87856   MOV AX,5678
-t
AX=5678 BX=1234 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=011F NV UP EI PL NZ NA PO NC
13A5:011F BB0002  MOV BX,0200
-t
AX=5678 BX=0200 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0122 NV UP EI PL NZ NA PO NC
13A5:0122 3E     DS:
13A5:0123 894702  MOV [BX+02],AX             DS:0202=0000
-t
AX=5678 BX=0200 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0126 NV UP EI PL NZ NA PO NC
13A5:0126 B8AB90  MOV AX,90AB

-

-t
AX=90AB BX=0200 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0000
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0129 NV UP EI PL NZ NA PO NC
13A5:0129 BF2002  MOV DI,0220
-t
AX=90AB BX=0200 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0220
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=012C NV UP EI PL NZ NA PO NC
13A5:012C 8945E4  MOV [DI-1C],AX            DS:0204=0000
-t
AX=90AB BX=0200 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0220
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=012F NV UP EI PL NZ NA PO NC
13A5:012F BB0001  MOV BX,0100
-t
AX=90AB BX=0100 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0220 DI=0220
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0132 NV UP EI PL NZ NA PO NC
13A5:0132 BE0401  MOV SI,0104

-

-t
AX=90AB BX=0100 CX=1234 DX=0000 SP=FFEE BP=0220 SI=0104 DI=0220
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0135 NV UP EI PL NZ NA PO NC
13A5:0135 8A08   MOV CL,[BX+SI]             DS:0204=AB
-t
AX=90AB BX=0100 CX=12AB DX=0000 SP=FFEE BP=0220 SI=0104 DI=0220
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=0137 NV UP EI PL NZ NA PO NC
13A5:0137 BE0001  MOV SI,0100
-t
AX=90AB BX=0100 CX=12AB DX=0000 SP=FFEE BP=0220 SI=0100 DI=0220
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=013A NV UP EI PL NZ NA PO NC
13A5:013A 8A6805  MOV CH,[BX+SI+05]            DS:0205=90
-t
AX=90AB BX=0100 CX=90AB DX=0000 SP=FFEE BP=0220 SI=0100 DI=0220
DS=13A5 ES=13A5 SS=13A5 CS=13A5 IP=013D NV UP EI PL NZ NA PO NC
13A5:013D 0000   ADD [BX+SI],AL            DS:0200=34

D komutunu kullanarak girilen değerlerin hafızadaki yerleşim hallerini görebiliriz.

-d
13A5:0100 B8 34 12 89 C3 88 D9 3E-A3 00 02 8A 2E 01 02 26 .4.....>.......&
13A5:0110 A3 20 02 BE 20 02 8A 24-BD 20 02 3E B8 78 56 BB . .. ..$. .>.xV.
13A5:0120 00 02 3E 89 47 02 B8 AB-90 BF 20 02 89 45 E4 BB ..>.G..... ..E..
13A5:0130 00 01 BE 04 01 8A 08 BE-00 01 8A 68 05 00 00 00 ...........h....
13A5:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13A5:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13A5:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
13A5:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

-

U komutunu kullanarak fiziksel adres ve atama değerleri bulunabilir ve incelenebilir.

-u 100
13A5:0100 B83412             MOV AX,1234
13A5:0103 89C3               MOV BX,AX
13A5:0105 88D9                MOV CL,BL
13A5:0107 3E                 DS:
13A5:0108 A30002             MOV [0200],AX
13A5:010B 8A2E0102           MOV CH,[0201]
13A5:010F 26                 ES:
13A5:0110 A32002              MOV [0220],AX
13A5:0113 BE2002             MOV SI,0220
13A5:0116 8A24               MOV AH,[SI]
13A5:0118 BD2002             MOV BP,0220
13A5:011B 3E                 DS:
13A5:011C B87856             MOV AX,5678
13A5:011F BB0002             MOV BX,0200
13A5:0122 3E                 DS:
13A5:0123 894702             MOV [BX+02],AX
13A5:0126 B8AB90              MOV AX,90AB
13A5:0129 BF2002             MOV DI,0220
13A5:012C 8945E4             MOV [DI-1C],AX
13A5:012F BB0001             MOV BX,0100
13A5:0132 BE0401             MOV SI,0104
13A5:0135 8A08               MOV CL,[BX+SI]
13A5:0137 BE0001              MOV SI,0100
13A5:013A 8A6805              MOV CH,[BX+SI+05]
13A5:013D 0000               ADD [BX+SI],AL

-

L6S1

.MODEL SMALL
.STACK 100h
.DATA 
	MAXCUMLE EQU 100
	STRING DB MAXCUMLE DUP(?)
	COUNT DB  (?)
.CODE
START: 
	MOV AX,@DATA
	MOV DS,AX
	MOV ES,AX
	MOV AH,3Fh
	MOV BX,01h
	MOV CX, MAXCUMLE
	MOV DX,OFFSET STRING
	INT 21H
	AND AX,AX
	JZ DONE
	MOV CX,AX
	MOV DI,OFFSET STRING
    MOV AL,' '
	MOV AH,CL 
KONTROL:
    CMP AL,[DI]
    JZ SAY
	JNZ NO
SAY:
    INC BX
	CMP [DI+1],AL
    JZ ATLA
	
	
ATLA: 
	INC DI
	INC DX
	CMP AL,[DI]
	JZ ATLA 
NO:
	INC DI
	INC DX
	CMP ah,Dl
	JZ ATLA
	
	LOOP KONTROL   	

	MOV AX,BX
	MOV DX,AX
	OR DX,3030H
	INT 21h
DONE:
		MOV AH,4CH
		INT 21H
ENDP
END START

lab61

;EEM 332 - LAB 6 - ÖNÇALIŞMA SORU 1

		.MODEL SMALL
		.STACK 64
		.DATA
SONUC	DB	100 DUP(?)
		

		.CODE
MAIN		PROC	FAR		;this is the program entry point
		MOV	AX,@DATA	;load the data segment address
		MOV	DS,AX	;assign value to DS
		
	
		SUB DX,DX	;DX'i sıfırla
		SUB BX,BX
		INC DX		;En az bir kelime
		
	DEVAM:	MOV AH,1
		INT 21H
		CMP AL,0DH		;Enter'a basıldı mı?
		JZ  BITIS		;Basıldıysa döngüden çık
		MOV [SI],AL
		INC SI			;stringi arttır
		CMP AL,20H		;Boşluk mu?
		JZ  BOSLUK		;Boşluk ise DX'i arttır
		JMP DEVAM		;Devam

	BOSLUK: INC DX		;Boşluk, DX'i arttır
		JMP DEVAM    

		MOV DI,DX	
	
	

		;Lab Föyünde verilen Hex 'i Decimal'e çeviren kod

	BITIS:  MOV DI,DX
		MOV AX,DI 	;HEXVAL ADRESINDEN DEGERI AX’E AL
		SUB DX,DX
		MOV BL,000AH 	;BX YAZMACINA 0A DEGERINI ATA
		DIV BL 		;AX YAZMACINI BX YAZMACINA BÖL
		MOV DH,AL 	;CIKAN DEGER DECIMAL SAYININ 10LAR
		MUL BL 		;DEGERI BX’LE CARP
		MOV CX,DI
		SUB CX,AX	;CX VE AX YAZMACLARININ FARKINI AL
		MOV DL,CL 	;CIKAN DEGER DECIMAL SAYININ 1LER 


		OR  DX,3030H		;ASCII'ye çevir
		XCHG DL,DH		;Basamakları düzenle
		MOV DI,OFFSET SONUC
		MOV AX,0D0AH		;Alt Satıra yazdırmak için
		MOV [DI],AX		;Alt Satıra yazdırmak için
		ADD DI,2
		MOV [DI],DL
		INC DI
		MOV [DI],DH
		INC DI	
		MOV DX,OFFSET SONUC	
		MOV AH,'$'		;String sonu
		MOV [DI],AH



		MOV 	AH,09H	;Yazdır
		INT 	21H
		
		MOV	AH,4CH	;set up to
		INT	21H		;return to DOS
MAIN		ENDP			
		END  MAIN		;this is the program exit point

lab62

.model small
.stack 100
.data
rnum dw ?
	.code
main proc far

        in al, 40h			; read micro-clock for initial seed
        mov ah, al
        in al, 40h
        xchg al, ah
        or ax, 1
        mov rnum, ax			;rnum değeri ax değerini alır

	mov bx,0100			;0-100 arası için kıstılama yapacak register
	div bx				;bölme işlemi kalan dx registerinde
	add dx,1			;mod işlemi gereği 1 toplanması
	
	mov ax,dx	
	MOV aH, 0H
					;decimale çevirmek için gerekli işlemler		
	MOV BX, 10	
	DIV BL
	OR aX, 3030H	

	mov dl,al
	mov bl,ah
	mov ah,02H
	int 21H

	mov dl,bl			;yazdırma işlemleri
	mov ah,02H
	
	int 21H
	mov ah,4cH			;DOS a dönüş
	int 21H

main endp
	end main

lab6d2

;EEM 332 - LAB 6 - ÖNÇALIŞMA SORU 1

		.MODEL SMALL
		.STACK 64
		.DATA
SONUC		DB	100 DUP(?)
ISIM		DB	100 DUP(?)
		

		.CODE
MAIN		PROC	FAR		;this is the program entry point
		MOV	AX,@DATA	;load the data segment address
		MOV	DS,AX		;assign value to DS



		SUB DX,DX	;DX'i sıfırla
		SUB CX,CX
		MOV SI,OFFSET ISIM
		MOV DI,OFFSET SONUC

		
	DEVAM:	MOV AH,1
		INT 21H
		CMP AL,0DH	;Enter'a basıldı mı?
		JZ  DONDURME		;Basıldıysa döngüden çık
		MOV [SI],AL
		INC SI		;stringi arttır
		JMP DEVAM	;Devam

      DONDURME: MOV AH,'$'
		MOV [SI],AH
		MOV SI,OFFSET ISIM


	ARA:	INC CL
		MOV AH,20H
		CMP [SI],AH	;Boşluk mu?
		JZ  YAZ		;Boşluk ise ÇIK
		INC SI
		JMP ARA		;Devam


	YAZ: 	MOV AH,'$'
		INC SI
		CMP [SI],AH
		JZ  BAS		;SONU ise ÇIK
		MOV AH,[SI]
		MOV [DI],AH
		INC DI
		JMP YAZ

	BAS:	MOV SI,OFFSET ISIM
		MOV AH,' '
		MOV [DI],AH
		INC DI
		DEC CL
	YAZ2:	MOV AH,[SI]
		MOV [DI],AH
		INC DI
		INC SI
		LOOP YAZ2


		MOV AX,0D0AH
		MOV [DI],AX	;Alt Satıra yazdırmak için
		MOV DX,OFFSET SONUC
		ADD DI,2	;İki adet 8 bit
		MOV AH,'$'	;String sonu
		MOV [DI],AH

		MOV 	AH,09H
		INT 	21H

		SUB DI,2
		MOV AH,'$'	;String sonu
		MOV [DI],AH

	        MOV AH,1
		INT 21H
		CMP AL,0DH		;Enter'a basıldı mı?
		JNZ  SON		;Basıldıysa döngüden çık

		MOV AH,'$'	;String sonu

	
		MOV SI,OFFSET SONUC
	 HESAP:	CMP [SI],AH
		JZ SAYITMM
		INC CL
		INC SI
		JMP HESAP
	SAYITMM:INC CL
		MOV SI,OFFSET ISIM
		MOV DI,OFFSET SONUC
		JMP BIRDAHA

	BIRDAHA:MOV AH,[DI]
		MOV [SI],AH
		INC SI
		INC DI
		LOOP BIRDAHA

		MOV SI,OFFSET ISIM
		MOV DI,OFFSET SONUC
		JMP ARA



		MOV 	AH,09H
		INT 	21H
		
	SON:	MOV	AH,4CH		;set up to
		INT	21H		;return to DOS
MAIN		ENDP			
		END	MAIN		;this is the program exit point

lab6d3

;EEM 332 - LAB 6 - ÖNÇALIŞMA SORU 1

		.MODEL SMALL
		.STACK 64
		.DATA
SONUC		DB	100 DUP(?)
ISIM		DB	100 DUP(?)
RNUM 		DW 	?
		

		.CODE
MAIN		PROC	FAR		;this is the program entry point
		MOV	AX,@DATA	;load the data segment address
		MOV	DS,AX		;assign value to DS



		SUB DX,DX	;DX'i sıfırla
		SUB CX,CX
		MOV SI,OFFSET ISIM
		MOV DI,OFFSET SONUC

		
	DEVAM:	MOV AH,1
		INT 21H
		CMP AL,0DH	;Enter'a basıldı mı?
		JZ  DONDURME		;Basıldıysa döngüden çık
		MOV [SI],AL
		INC SI		;stringi arttır
		JMP DEVAM	;Devam

      DONDURME: MOV AH,'$'
		MOV [SI],AH
		MOV SI,OFFSET ISIM
	

	ARA1:	MOV AH,20H
		MOV AL,'$'
		CMP [SI],AH	
		JZ  BOSSAY		;Boşluk ise sayacı arttır
		CMP [SI],AL
		JZ  RANDOM		;BİTTİ İSE ÇIK	
		INC SI
		JMP ARA1		;Devam

	BOSSAY:	INC CL
		INC SI
		JMP ARA1


	RANDOM: IN AL, 40H		; READ MİCRO-CLOCK FOR İNİTİAL SEED
		MOV AH, AL
		IN AL, 40H
		XCHG AL, AH
  		OR AX, 1
     		MOV RNUM, AX		;RNUM DEĞERİ AX DEĞERİNİ ALIR

		MOV BL,CL		;0-100 ARASI İÇİN	
		DIV BX			;BÖLME İŞLEMİ KALAN DX’DE
		ADD DX,1		;MOD İŞLEMİ GEREĞİ 1 TOPLANMASI
		
		
		MOV SI,OFFSET ISIM
		SUB CX,CX


	ARA:	INC CL
		MOV AH,20H
		CMP [SI],AH	;Boşluk mu?
		JZ  YAZ		;Boşluk ise ÇIK
		INC SI
		JMP ARA		;Devam


	YAZ: 	MOV AH,'$'
		INC SI
		CMP [SI],AH
		JZ  BAS		;SONU ise ÇIK
		MOV AH,[SI]
		MOV [DI],AH
		INC DI
		JMP YAZ

	BAS:	MOV SI,OFFSET ISIM
		MOV AH,' '
		MOV [DI],AH
		INC DI
		DEC CL
	YAZ2:	MOV AH,[SI]
		MOV [DI],AH
		INC DI
		INC SI
		LOOP YAZ2
	
		DEC DX
		MOV AH,'$'	;String sonu
		MOV [DI],AH
		JNZ TEKRAR


		MOV AX,0D0AH
		MOV [DI],AX	;Alt Satıra yazdırmak için
		MOV DX,OFFSET SONUC
		ADD DI,2	;İki adet 8 bit
		MOV AH,'$'	;String sonu
		MOV [DI],AH

		MOV 	AH,09H
		INT 	21H

		SUB DI,2
		MOV AH,'$'	;String sonu
		MOV [DI],AH

	        MOV AH,1
		INT 21H
		CMP AL,0DH		;Enter'a basıldı mı?
		JNZ  SON		;Basıldıysa döngüden çık

		MOV AH,'$'	;String sonu

	
	TEKRAR:	MOV SI,OFFSET SONUC
	 HESAP:	CMP [SI],AH
		JZ SAYITMM
		INC CL
		INC SI
		JMP HESAP
	SAYITMM:INC CL
		MOV SI,OFFSET ISIM
		MOV DI,OFFSET SONUC
		JMP BIRDAHA

	BIRDAHA:MOV AH,[DI]
		MOV [SI],AH
		INC SI
		INC DI
		LOOP BIRDAHA

		MOV SI,OFFSET ISIM
		MOV DI,OFFSET SONUC
		JMP ARA



		MOV 	AH,09H
		INT 	21H
		
	SON:	MOV	AH,4CH		;set up to
		INT	21H		;return to DOS
MAIN		ENDP			
		END	MAIN		;this is the program exit point

332 deney 6

                .MODEL SMALL
		.STACK 64
		.DATA
aamcevrim db '00$'
.code
mov ax,@data
mov ds,ax
mov es,ax

call aamsonuc proc

 mov ax, 20h
 mov bl, 0Ah
 div bl ;AX=0203 yapar.
or ax,3030h ;AX’teki 0203h artık 3233h oldu.
mov sonuc, ax
lea dx,sonuc
 mov ah,9
 int 21h

aamsonuc endp
 mov ah,4ch
int 21h
end

brc


	.MODEL SMALL
	.STACK 64 (?)

;________DATA SEGMENT________________________________	



	.DATA
CR	EQU	0DH
LF	EQU	0AH


MSG	DB	'Kelimeleri Sayilacak Cumleyi Giriniz..:$'
MSG2	DB	CR, LF, 'Girilen Cumledeki Kelime adeti..:', '$'
MSG3	DB	' Adettir...$'

STR1	DB  100, ?, 100 DUP (0)	; buraya klavyeden gelicek string
	ORG 100



;________CODE SEGMENT_________________________________
 
    
	.CODE
MAIN	PROC	FAR                                   
	MOV AX, @DATA                          
	MOV DS, AX                                      
	
	XOR AX,AX		

	CALL CLRSCR		
	CALL CURSOR		
	
	MOV DX, OFFSET MSG
	CALL DISPLAYSTR

	MOV DX, OFFSET STR1	; DX e stringin adresi atılıyor.
	CALL INPUT

	MOV BX, OFFSET STR1
	CALL FNDSPC		

	CALL CASCII
				
				
	MOV DX, OFFSET MSG2
	CALL DISPLAYSTR
	
	MOV AH,02H
	MOV DL,CH
	INT 21H
	
	MOV DL,CL
	INT 21H
	
	MOV DX, OFFSET MSG3
	CALL DISPLAYSTR	
	
	MOV AH, 4CH		; EXIT to DOS 
	INT 21H			

MAIN	ENDP			
	


;_________________________________________________________
;_______CLRSCR Fonksiyonu__________________________________
;_________________________________________________________


CLRSCR	PROC
	MOV AX, 0600H
	MOV BH, 07H
	MOV CX, 0000H
	MOV DX, 184FH
	INT 10H
	RET
CLRSCR	ENDP	
	
;_________________________________________________________
;_______CURSOR  Fonksiyonu_________________________________
;_________________________________________________________


CURSOR	PROC
	MOV AH, 02H
	MOV BH, 00H
	MOV DL, 00H
	MOV DH, 00H	;***************************************
	INT 10H
	RET
CURSOR	ENDP	
	

;_________________________________________________________
;_______INPUT Fonksiyonu___________________________________
;_________________________________________________________


INPUT	PROC

	MOV AH,0AH		;AH=0AH String  için INT 21 değeri.
;DX= STR ADDRESS******************
	INT 21H			; String DX in gösterdiği adreste.
	RET
INPUT	ENDP


;_________________________________________________________
;_______FNDSPC Fonksiyonu__________________________________
;_________________________________________________________


FNDSPC	PROC

	
	XOR DX,DX
	
SPACE:	INC DX			
				; en son giren space en son kelimenin başladıı yer
SEARCH:	MOV AL,[BX]
	INC BX
	CMP AL, 20H		;space arıoz 
	JE SPACE			; space varsa spacein indexini kaydetmek için SPACE e git dioz  
	CMP AL,0DH		; NULL mı acaba Null sa string bitti loopdan defol
	JE LOST		
	JMP SEARCH		
	
LOST:	RET			; DX= Kaç Space olduğu. 
				; BX=  NULL ın indexi.

FNDSPC	ENDP


;_________________________________________________________
;_______DISPLAYSTR Fonksiyonu______________________________
;_________________________________________________________


DISPLAYSTR	PROC
	MOV AH, 09H
; DX= STR ADDRESS *****************************************
	INT 21H
	RET
DISPLAYSTR ENDP



;_________________________________________________________
;_______CASCII Fonksiyonu______________________________
;_________________________________________________________


CASCII	PROC
	
	MOV AX, DX
	
	MOV CL, 04H
	SHL AX, CL
	SHR AL, CL
	OR AX, 3030H

	MOV CX, AX
	
	RET
CASCII	ENDP


;_________________________________________________________
;_______RWASCII Fonksiyonu______________________________
;_________________________________________________________


	



;__________________________________________________________
	END MAIN

calisma-807


	.MODEL SMALL
	.STACK 64 (?)

;________DATA SEGMENT________________________________	



	.DATA
CR	EQU	0DH
LF	EQU	0AH


STR1	DB  100, ?, 100 DUP (0)	; buraya klavyeden gelicek string
	ORG 100
STR2	DB CR, LF, 100 DUP (?), '$'	; burası deiştirilmiş string


MSG	DB	'Donusturulecek Cumleyi Giriniz..:$'
	ORG 22H
MSG2	DB	CR, LF, 'Donusturulen Cumle..:', '$'
	ORG 20H


;________CODE SEGMENT_________________________________
 
    
	.CODE
MAIN	PROC	FAR                                   
	MOV AX, @DATA                          
	MOV DS, AX                                      
	
	XOR AX,AX		

	
	
	MOV DX, OFFSET MSG
	MOV AH, 09H
	INT 21H		 
				
				

	MOV DX, OFFSET STR1	 
	MOV AH,0AH		
	INT 21H			
			

	MOV BX, OFFSET STR1	
	XOR DX,DX
	
SPACE:	MOV DX, BX		
				
SEARCH:	MOV AL,[BX]
	INC BX
	CMP AL, 20H		 
	JE SPACE			  
	CMP AL,0DH		
	JE LOST		
	JMP SEARCH		

	MOV AX, OFFSET STR1
	ADD AX, DX
	MOV SI, AX

	MOV AX, OFFSET STR2
	MOV DI, AX

	MOV AX, BX
	SUB AX, DX
	MOV CX, AX
	DEC CX
	
	
TURN:	MOV AL, [SI]
	MOV [DI], AL
	INC SI
	INC DI
	LOOP TURN
	
	MOV AL, 20H
	MOV [DI],  AL
	INC DI

	MOV AX, OFFSET STR1
	INC AX
	INC AX
	MOV SI, AX

COPY:	MOV AL, [SI]
	MOV [DI], AL
	INC DI
	INC SI
	CMP SI, DX
	JC COPY	


	MOV DX, OFFSET MSG2
	MOV AH, 09H
	INT 21H
	
	
	MOV DX, OFFSET STR2
	MOV AH, 09H
	INT 21H
			
	MOV AH, 4CH		
	INT 21H			

MAIN	ENDP			
	


	END MAIN

calisma-808

		.MODEL SMALL
		.STACK 64 (?)
		.DATA

	BRC	DB  100  (?)
		ORG 100
    
		.CODE
	MAIN	PROC	FAR                                   
		MOV AX, @DATA                          
		MOV DS, AX                                      
		SUB AX,AX
		MOV AH,0AH
		LEA DX, BRC
		INT 21H
		
		SUB DX,DX
		LEA BX, BRC

BOS:		INC DL
		
DEVAM:	MOV AL,[BX]
		INC BX
		CMP AL,20H
		JE BOS
		CMP AL,0DH
		JE DIGER
		JMP DEVAM
	
DIGER:	SUB AX,AX
		MOV AL,DL
		MOV CL, 04H
		SHL AX, CL
		SHR AL, CL
		OR AX,3030H
		MOV CX, AX
		MOV AH,02H
		MOV DL,CH
		INT 21H
		MOV DL,CL
		INT 21H
		MOV AH, 4CH		
		INT 21H			

MAIN	ENDP			
	END MAIN

calisma-809


	.MODEL SMALL
	.STACK 64 (?)

;________DATA SEGMENT________________________________	



	.DATA
CR	EQU	0DH
LF	EQU	0AH


STR1	DB  100, ?, 100 DUP (0)	; buraya klavyeden gelicek string
	ORG 100
STR2	DB CR, LF, 100 DUP (?), '$'	; burası deiştirilmiş string


MSG	DB	'Donusturulecek Cumleyi Giriniz..:$'
	ORG 22H
MSG2	DB	CR, LF, 'Donusturulen Cumle..:', '$'
	ORG 20H


;________CODE SEGMENT_________________________________
 
    
	.CODE
MAIN	PROC	FAR                                   
	MOV AX, @DATA                          
	MOV DS, AX                                      
	
	XOR AX,AX		

	CALL CLRSCR		
	CALL CURSOR		
	
	MOV DX, OFFSET MSG
	CALL DISPLAYSTR		 
				
				

	MOV DX, OFFSET STR1	 
	CALL INPUT		

	MOV BX, OFFSET STR1	
	CALL FNDSPC		

	MOV AX, OFFSET STR1
	ADD AX, DX
	MOV SI, AX

	MOV AX, OFFSET STR2
	MOV DI, AX

	CALL REVERT		


	MOV DX, OFFSET MSG2
	CALL DISPLAYSTR
	
	
	MOV DX, OFFSET STR2
	CALL DISPLAYSTR
			
	MOV AH, 4CH		
	INT 21H			

MAIN	ENDP			
	


;_________________________________________________________
;_______CLRSCR Fonksiyonu__________________________________
;_________________________________________________________


CLRSCR	PROC
	MOV AX, 0600H
	MOV BH, 07H
	MOV CX, 0000H
	MOV DX, 184FH
	INT 10H
	RET
CLRSCR	ENDP	
	
;_________________________________________________________
;_______CURSOR  Fonksiyonu_________________________________
;_________________________________________________________


CURSOR	PROC
	MOV AH, 02H
	MOV BH, 00H
	MOV DL, 00H
	MOV DH, 00H	
	INT 10H
	RET
CURSOR	ENDP	
	

;_________________________________________________________
;_______INPUT Fonksiyonu___________________________________
;_________________________________________________________


INPUT	PROC

	MOV AH,0AH		
	INT 21H			
	RET
INPUT	ENDP


;_________________________________________________________
;_______FNDSPC Fonksiyonu__________________________________
;_________________________________________________________


FNDSPC	PROC

	;BX= OFFSET STR*******************************
	XOR DX,DX
	
SPACE:	MOV DX, BX		
				
SEARCH:	MOV AL,[BX]
	INC BX
	CMP AL, 20H		 
	JE SPACE			  
	CMP AL,0DH		
	JE LOST		
	JMP SEARCH		
	
LOST:	RET			; DX= Son kelimenin yeri 
				; BX=  NULL ın indexi.

FNDSPC	ENDP


;_________________________________________________________
;_______REVERT Fonksiyonu__________________________________
;_________________________________________________________



REVERT	PROC
	
	MOV AX, BX
	SUB AX, DX
	MOV CX, AX
	DEC CX
	
	
TURN:	MOV AL, [SI]
	MOV [DI], AL
	INC SI
	INC DI
	LOOP TURN
	
	MOV AL, 20H
	MOV [DI],  AL
	INC DI

	MOV AX, OFFSET STR1
	INC AX
	INC AX
	MOV SI, AX

COPY:	MOV AL, [SI]
	MOV [DI], AL
	INC DI
	INC SI
	CMP SI, DX
	JC COPY
	
	RET
REVERT	ENDP


;_________________________________________________________
;_______DISPLAYSTR Fonksiyonu______________________________
;_________________________________________________________


DISPLAYSTR	PROC
	MOV AH, 09H
	INT 21H
	RET
DISPLAYSTR ENDP

;__________________________________________________________
	END MAIN

lab66

		.MODEL SMALL
		.STACK 64
		.DATA
		ORG	0100H
CUMLE          	DB	100 DUP (?)
YEDEK		DB	100 DUP (?)			


		.CODE		
MAIN		PROC	FAR		
		MOV	AX,@DATA	
		MOV	DS,AX		
		MOV	AX,0
		MOV	SI,OFFSET CUMLE		
		MOV 	CX,100

KLAVYEDENOKU:
		MOV	AH,0
		INT 	16H
		MOV	[SI],AL
		INC	SI
		MOV	DL,AL
		MOV	AH,02
		INT	21H
		CMP	AL,' '		
		JNZ	BITTIMI        
		INC	BX
		LOOP	KLAVYEDENOKU
		
BITTIMI:	
		CMP	AL,'.'		
		JZ	BITTI		
		LOOP    KLAVYEDENOKU
		
BITTI:		
		MOV	AX,0
		MOV 	AL,BL
		MOV	CL,0AH
		DIV	CL		
		MOV	BX,AX
		
		MOV	AH,02
		MOV	DL,9			
		INT	21H
		
		MOV	AH,02H
		MOV	DL,BL
		OR	DL,30H	
		INT 	21H
		MOV	DL,BH
		OR	DL,30H
		INT	21H
		
ENTERBEKLE:
		MOV	AH,0
		INT	16H
		CMP	AL,'q'
		JZ	SONLANDIR
		CMP	AL,0DH
		JNZ	ENTERBEKLE

		DEC	SI
		DEC	SI

SONKELIMEBUL:
		MOV	BL,[SI]
		DEC	SI
		CMP	BL,' '
		JNZ	SONKELIMEBUL

		INC	SI	
		MOV	BX,SI


		MOV	DI,OFFSET YEDEK
BASAAT:		
		MOV	CL,[SI]
		MOV	[DI],CL
		INC	DI
		CMP	CL,'.'
		JNZ	BASAAT

		DEC	DI
		MOV	CL,' '
		MOV	[DI],CL
		MOV	SI,OFFSET CUMLE
		
KOPYALA:	
		INC	DI
		MOV	CL,[SI]
		MOV	[DI],CL
		INC	SI
		CMP	SI,BX
		JNZ	KOPYALA

		INC	DI
		MOV	CL,'.'
		MOV	[DI],CL

		MOV	SI,OFFSET CUMLE
		MOV	DI,OFFSET YEDEK

GERIKOPYALA:
		MOV	CL,[DI]
		MOV	[SI],CL
		INC	DI
		INC	SI
		CMP	CL,'.'
		JNZ	GERIKOPYALA

		MOV	CL,'$'
		MOV	[SI],CL

		MOV	AH,02H
		MOV	DL,09H
		INT	21H

		MOV	AH,09
		MOV	DX,OFFSET CUMLE
		INT	21H

		JMP	ENTERBEKLE

SONLANDIR:

		ENDP
		END MAIN

lab7

CNT3		EQU 3FD6H
APORT3		EQU 3FD0H
BPORT3		EQU 3FD2H
CPORT3		EQU 3FD4H
RAME		EQU 0FFFFH

CODE 	SEGMENT
	ASSUME 	CS:CODE,   DS:CODE

	ORG  0

START:	MOV SP,RAME
	MOV AL,90H
	MOV DX,CNT3
	OUT DX,AL

J1:	MOV DX,APORT3
	IN AL,DX
	NOT AL
	MOV DX,BPORT3
	OUT DX,AL
	JMP  J1

CODE    ENDS
	END START

lab72

CNT3		EQU 3FD6H
APORT3		EQU 3FD0H
BPORT3		EQU 3FD2H
CPORT3		EQU 3FD4H
RAME		EQU 0FFFFH

CODE 	SEGMENT
	ASSUME 	CS:CODE,   DS:CODE

	ORG  0

START:	MOV SP,RAME
	MOV AL,90H
	MOV DX,CNT3
	OUT DX,AL

J1:	MOV DX,APORT3
	IN AL,DX
	MOV DX,BPORT3
	OUT DX,AL
	JMP  J1

CODE    ENDS
	END START

oncalisma6

.MODEL SMALL
		.STACK 64
		.DATA
		ORG   0100h
DAT		DB      100  DUP(?)
Sayi     DB      ?
		

		.CODE
MAIN		PROC			FAR          
		MOV			AX,#DAT
		MOV 			DS,AX
		SUB			AX,AX
		MOV 			CX,100
		MOV			SI,OFFSET DAT
		sub			bx,bx	

verial:
		mov			ax,0
		int			16h
		mov			[si],si
		inc 			si
		mov 			dl,al
		mov 			sh,02	
		cmp			sl,32d
		jnz			devam 
		İnc 			bx

devam:		cmp			sl,46 
		Jx			yazdır
		İnt 			21h 
		loop			verial

		inc			bl   
		sub			ax,ax
		mov 			al,bl	
		mov 			cl,10
		div			al, 
		mov			bx,ax

		mov 			dl,46
		int			21h
		mov 			ah,02
		int 			21h
		mov 			dl,09
		int 			21h
		mov			dl,ah
		or 			dl,46
		int 			21h
		mov 			dl,bh
		or 			dl,46
		int 			21h
		mov 			ah,4ch
		int 			21h


		ENDP
		END MAIN

d6lab2

.MODEL SMALL
.STACK 100h
.DATA
UZUNLUK EQU 100 ; en fazla 100 karakter
BOY DW 0
CUMLE DB UZUNLUK DUP(?)
KELIME1 DB UZUNLUK DUP(?)
KELIME2 DB UZUNLUK DUP(?)
YAZI DB 'BIR CUMLE GIRIN:','$'

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

	MOV DX,OFFSET YAZI

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

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

	INT 21H
	AND AX,AX	;AX'DE KAC KARAKTER GİRİLDİĞİ SAKLANACAK
	MOV CX,AX
	MOV BOY,CX

DEVAM:	MOV SI,OFFSET CUMLE;POINTER CUMLE'DEKİ İLK KARAKTERİ GÖSTERİYOR
	MOV DI,OFFSET KELIME1;POINTER KELIME1'DEKİ İLK KARAKTERİ GÖSTERİYOR

	MOV CX,BOY
	ADD SI,CX
	DEC SI

AKELIME:MOV AL,[SI]	;CUMLE'NİN İLK KARAKTERİ AL'YE ATILDI
	CMP AL,20H	;AL'DEKİ KARAKTER BOŞLUK MU?
	JE BUL		;BOŞLUK İSE BUL DÖNGÜSÜNE GİDİLİR
	MOV [DI],AL
	INC DI

BUL:	DEC SI
	CMP AL,20H	;AL'DEKİ KARAKTER BOŞLUK MU?
	LOOPNE BKELIME

	MOV AL,20H	;AL'DEKİ KARAKTER BOŞLUK MU?
	MOV [DI],AL	;BOŞLUK İSE DEVAM EDİLDİ VE BOŞLUK EKLENDİ
	INC DI
	MOV AL,24H	;'$' BİTİRME KARAKTERİ
	MOV [DI],AL	;STRING SONUNA '$' KARAKTERİ EKLENDİ

	MOV SI,OFFSET CUMLE
	MOV DI,OFFSET KELIME2

BKELIME:MOV AL,[SI]	;CUME'NİN İLK KARAKTERİ AL'YE ATILDI
	MOV [DI],AL
	INC SI
	INC DI
	LOOP BKELIME

	MOV AL,20H	;AL'DEKİ KARAKTER BOŞLUK MU?
	MOV [DI],AL	;BOŞLUK İSE DEVAM EDİLDİ VE BOŞLUK EKLENDİ
	INC DI
	MOV AL,24H	;'$' BİTİRME KARAKTERİ
	MOV [DI],AL	;CUMLE SONUNA '$' KARAKTERİ EKLENDİ

YAZ:	MOV DX,OFFSET KELIME1
	MOV AH,09H
	INT 21H		;EKRANA YAZDIRMA İŞLEMİ(DX'İN İÇERİĞİ)
	MOV DX,OFFSET KELIME2
	MOV AH,09H
	INT 21H		;EKRANA YAZDIRMA İŞLEMİ(DX'İN İÇERİĞİ)
	MOV SI,OFFSET CUMLE
	MOV DI,OFFSET KELIME1
	MOV CX,BOY

KOPYA:	MOV AL,[DI]
	MOV [SI],AL
	INC SI
	PUSH SI
	INC DI
	CMP AL,24H	;SON MU?
	LOOPNE KOPYA
	
	MOV CX,BOY
	POP BX
	MOV SI,OFFSET CUMLE
	ADD SI,BX
	MOV DI,OFFSET KELIME2

KOPYA2:	MOV AL,[DI]
	MOV [SI],AL
	INC SI
	INC DI
	CMP AL,24H	;SON MU?
	LOOPNE KOPYA2

	INC SI
	MOV AL,24H	;'$' BİTİRME KARAKTERİ
	MOV [SI],AL
	MOV AH,1
	INT 21H		;KARAKTER OKU
	CMP AL,1BH
	JE SON
	CALL DEVAM

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

d6lab3

.MODEL LARGE
.STACK 64
.DATA
UZUNLUK EQU 100 ; en fazla 100 karakter
CUMLE DB UZUNLUK DUP(?)
KELIME DB UZUNLUK DUP(?)
RASTGELE DB UZUNLUK DUP(?)
.CODE
MAIN	PROC FAR	;BAŞLANGIÇ AYARLARI
	MOV AX,@DATA
	MOV DS,AX

	MOV DI,OFFSET CUMLE;POINTER CUMLENIN İLK HARFİNDE
	MOV CX,03h	;3 DEFA DÖNECEK
	PUSH CS
	MOV BX,0	;BL SIFIRLANDI

OKU:	MOV AH,01H	;
	INT 21H		;KARAKTER OKUNDU
	MOV [DI],AL
	INC DI
	CMP AL,13	;BASILAN TUŞ ENTER MI?
	JNE OKU
	MOV DI,OFFSET CUMLE;POINTER CUMLENIN İLK HARFİNDE
	MOV SI,OFFSET KELIME;POINTER KELIMENIN İLK HARFİNDE
	MOV [SI],DI
	INC SI
	INC DI

KEL_AL:	MOV AL,[DI]
	INC DI
	CMP AL,13	;BASILAN TUŞ ENTER MI?
	JE ENTIR
	CMP AL,' '	;BOŞLUK MU
	JNE KEL_AL
	INC BL
	MOV BH,BL
	MOV DX,DI
	MOV [SI],DX
	INC SI
	JMP KEL_AL

ENTIR:	INC BH
	MOV AL,13	;ENTER İŞLEMİ
	MOV [SI],AL
	MOV DI,OFFSET RASTGELE

RAST:	MOV AH,2CH	;
	INT 21H		;SISTEM ZAMANI
			;CH = SAAT
			;CL = DAKİKA
			;DH = SANİYE
			;DL = 1/100 SANİYE
	MOV SI,OFFSET KELIME
	ADD SI,DX
	MOV AL,[SI]
	MOV [DI],AL
	INC DI

SON:	MOV AX,0
	INC SI
	MOV AL,[SI]
	DEC SI
	MOV [SI],AL	;YER DEĞİŞTİRME OLDU
	INC SI
	CMP AL,13	;BASILAN TUŞ ENTER MI?
	JNE SON
	DEC BL
	DEC BH
	CMP BH,0h
	JNE RAST
	MOV DH,13
	MOV [DI],DH
	MOV DI,OFFSET KELIME

OTEKI:	MOV SI,OFFSET CUMLE
	MOV AX,0
	MOV AL,[DI]
	ADD SI,AX
	MOV DH,13
	CMP [DI],DH
	JE TEKRAR
	INC DI

YAZ:	MOV DX,0
	MOV DL,[SI]
	INC SI
	CMP DL,13	;BASILAN TUŞ ENTER MI?
	JE BOSLUK;
	MOV AH,02h	;
	INT 21h		;EKRANA YAZDIRMA İŞLEMİ(AL'NİN İÇERİĞİ)
	CMP AL,' '	;BOŞLUK MU?
	JE OTEKI
	JMP YAZ

BASA:	JMP KEL_AL

BOSLUK:	MOV DL,' '
	MOV AH,02h	;
	INT 21h		;EKRANA YAZDIRMA İŞLEMİ(AL'NİN İÇERİĞİ)
	JMP OTEKI

TEKRAR:	POP CX
	DEC CX
	PUSH CX
	MOV DI,OFFSET CUMLE
	MOV SI,OFFSET KELIME
	MOV [SI],DI
	INC SI
	INC DI
	MOV BX,0
	CMP CX,0
	JNE BASA
	
	MOV AH,4CH
	INT 21H		;PROGRAM SONU
MAIN ENDP
END MAIN

d6oc1

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

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

	MOV DX,OFFSET YAZI

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

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

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

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

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

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

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

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

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

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

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

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


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

d6oc2

.MODEL SMALL
.STACK 100h

.CODE
BASLA:	MOV AH,2CH
	INT 21H		;GET SYSTEM TIME
			;CH = HOUR
			;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

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

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

	MOV AH,4CH	;
	INT 21		;PROGRAM SONLANDIRILDI

END BASLA

RAND3

		.MODEL LARGE
		.STACK 64
		.DATA
CUMLE		DB	100 DUP(?)
KELIME_BAS	DB	100 DUP(?)
RANDOM_KEL	DB	100 DUP(?)
		.CODE
MAIN		PROC	FAR		
		MOV	AX,@DATA	
		MOV	DS,AX		
		MOV	DI,OFFSET CUMLE
		MOV	CX,03h
		PUSH	CX
		SUB	BL,BL
CUMLE_AL:	MOV	AH,01H
		INT	21H
		MOV	[DI],AL
		INC	DI
		CMP	AL,13
		JNE	CUMLE_AL
		MOV	DI,OFFSET CUMLE
		MOV	SI,OFFSET KELIME_BAS
		MOV	[SI],DI
		INC	DI
		INC	SI
KEL_BAS_AL:	MOV	AL,[DI]
		INC	DI
		CMP	AL,13
		JE	ENTER_EKLE
		CMP	AL,' '
		JNE	KEL_BAS_AL
		INC	BL
		MOV	BH,BL
		MOV	DX,DI
		MOV	[SI],DX
		INC	SI
		JMP	KEL_BAS_AL
ENTER_EKLE:	INC	BH
		MOV	AL,13
		MOV	[SI],AL
		MOV	DI,OFFSET RANDOM_KEL
RAND_KEL:	MOV	AH,2Ch
		INT	21h
		MOV	SI,OFFSET KELIME_BAS
		POP	CX
		SHR	DL,CL
		PUSH	CX
		AND	DL,BL
		SUB	DH,DH
		ADD	SI,DX
		MOV	AL,[SI]
		MOV	[DI],AL
		INC	DI
SON_BUL:	SUB	AX,AX
		INC	SI
		MOV	AL,[SI]
		DEC	SI
		MOV	[SI],AL
		INC	SI
		CMP	AL,13
		JNE	SON_BUL
		DEC	BL
		DEC	BH
		CMP	BH,0h
		JNE	RAND_KEL
		MOV	DH,13
		MOV	[DI],DH
		MOV	DI,OFFSET RANDOM_KEL
YAZ_DIGER_KEL:	MOV	SI,OFFSET CUMLE
		SUB	AX,AX
		MOV	AL,[DI]
		SUB	AH,AH
		ADD	SI,AX
		MOV	DH,13
		CMP	[DI],DH
		JE	TEKRAR_YAP
		INC	DI
YAZ:		SUB	DX,DX
		MOV	DL,[SI]
		INC	SI
		CMP	DL,13
		JE	BOSLUK_KOY
		MOV	AH,02h
		INT	21h
		CMP	AL,' '
		JE	YAZ_DIGER_KEL
		JMP	YAZ
BASA_DON:	JMP	KEL_BAS_AL
BOSLUK_KOY:	MOV	DL,' '
		MOV	AH,02h
		INT	21h
		JMP	YAZ_DIGER_KEL
TEKRAR_YAP:	POP	CX
		DEC	CX
		PUSH 	CX
		MOV	DI,OFFSET CUMLE
		MOV	SI,OFFSET KELIME_BAS
		MOV	[SI],DI
		INC	DI
		INC	SI
		SUB	BX,BX
		CMP	CX,0
		JNE	BASA_DON
		MOV	AH,4CH		
		INT	21H		
MAIN		ENDP			
		END	MAIN

eem332-lab-06.zip

ZIP arşivi · 838 KB · 23.03.2006

⬇ (838 KB)