· EEM332

EEM332 Mikroişlemciler: Laboratuvar 5: Dizgeler ve Döngüler

EEM332 – Mikroişlemciler · 05.03.2002 · 18.10.2026

Bu yazı, Başkent Üniversitesi EEM332 Mikroişlemciler ders arşivindeki ilgili notları ve uygulamaları bir araya getiriyor (2002–2015). Dizgede harf değiştirme, küçük harfi büyütme, döngü ve notlar arasında en büyük değeri bulma. 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_lab05

EEM 332 - Mikroişlemciler Deney Numarası: 5 Deney Adı: TASM’ye Giriş/Assembly Programlama/Döngüler

Açıklama

Laborutavarda kullanılacak olan Turbo Assembler programı web sayfasına eklenmiştir. Programın kurulumu için web sayfasında verilen .zip dosyasının içindekileri çıkarıp (extract) oluşan “t” isimli klasörü C dizinine yapıştırınız. Bu klasörün içinde bulunan örnek programları inceleyebilirsiniz. Programın kullanımı ile ilgili daha ayrıntılı bilgi deney sırasında verilecektir.

Ön Çalışma

Aşağıdaki soruları yanıtlayınız. Çalışmanızın fazladan bir kopyasını yanınızda getiriniz. Ön çalışmalar laboratuvar saatinin başında toplanacaktır.

1) Çevirici dilinde (assembler language), aşağıdaki sıcaklık değerlerinin en düşüğünü bulan

programı yazınız: +13, -10, +19, +14, -18, -9, +12, -19, +16

2) Bir öğrencinin notları şu şekildedir: 69, 87, 96, 45, and 75. Çevirici dilinde, bu notların en

büyüğünü bulan programı yazınız.

Deneysel Çalışma

1) Turbo assembler tanıtımını izleyip, laboratuvar sorumlusunun verdiği çalışmayı

gerçekleştiriniz.

2) Ön çalışmanın 2. maddesinde verilen programı, notları I/O arayüzünden girilecek ve

sonucu I/O arayüzünden gösterecek şekilde değiştiriniz ve raporunuzda belirtiniz.

eem332_lab05

EEM 332 – Mikroişlemciler

Deney Numarası: 5 Deney Adı: Assembly Programlama/Döngüler

Deneysel Çalışma

1) Klavyeden girilen bir cümledeki küçük harfleri büyük harfe çeviren programı yazınız.

Örnek

2) Program içinde önceden girilmiş bir karakter dizisi üzerinde istenen harflerin

değişikliğini yapan programı yazınız.

Örnek: Mr. Gones olarak programda tanımlanmış dizgedeki ‘G’ karakterini ’J’ karakterine dönüştüren program çıktısı aşağıda verilmiştir.

LAB 5 Önçalışma

1) Kelime içindeki sesli harfi bir başka sesli harfe dönüştüren program.

MODEL SMALL

.STACK 64
.DATA
DATA DB ‘[kişisel bilgi çıkarıldı]’
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
CLD
MOV DI,OFFSET DATA                     //[kişisel bilgi çıkarıldı] DI ya atılır.
MOV CX,10                              //10 tane harf oldugu için.
MOV AL,'a'                             //Değişmesi istenilen harf.
REPNE SCASB                            //REPNE komutu iki stringi karşılaştırır.
JNE ATLA                               // Eşit değilse etikete atlar.
DEC SI
MOVBYTE PTR[DI],'a'                    ;a’ nin yerine o.
ATLA: MOV AX,09H
MOV DX,OFFSET DATA
INT 21H

MAIN ENDP

END MAIN

2) Girilen ismi ters çeviren program.

.MODEL SMALL
.STACK 64
.DATA
DATA1 DB '[kişisel bilgi çıkarıldı]’
DATA2 DB ?
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
CLD
MOV DI,OFFSET DATA1                    //DI ya gönderilir.
MOV SI,OFFSET DATA2                    //Data2 SI ys.
MOV CX,10                              //toplam harf sayısını dönderir.
TOP:
MOV BL,[SI]
LOOP TOP
MOV BYTE PTR[DI],BL
MOV CX,10
NEXT:
DEC SI
MOV BL,[SI]
INC DI
MOV BYTE PTR[DI],BL
LOOP NEXT
JMP RESULT

RESULT

MOV AX,09H
MOV DX,OFFSET DATA2
INT 21H

MAIN ENDP

END MAIN

332_lab05_önçalışma

1)

.MODEL SMALL
.STACK 64
.DATA
AD       DB   '[kişisel bilgi çıkarıldı]'
.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
MOV SI,OFFSET AD
MOV CL,9
MOV BL,'e'
DON: MOV BH,[SI]
CMP BL,BH
JZ DEGIS
DON2:
INC SI
LOOP DON
JMP SON
DEGIS: MOV DL,'a'
MOV [SI],DL
JMP DON2

SON

MOV          AH,09
MOV          DX,OFFSET AD
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 64
.DATA
AD        DB   '[kişisel bilgi çıkarıldı]'
.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
MOV SI,OFFSET AD
MOV DI,OFFSET AD
MOV CL,9
SUB AX,AX
DON: MOV AL,[SI]
PUSH AX
INC SI
LOOP DON
MOV CL,DL
SUB SI,CX
DON2:POP [SI]
INC SI
LOOP DON2
MOV [SI],BL
MOV AH,09H
MOV DX,OFFSET AD
INT 21H
MOV AH,4CH                ;set up to
INT 21H           ;return to DOS

MAIN ENDP

END MAIN          ;this is the program exit point

calisma-703

1-) Bu bölümde girilen isimde belirlenen bir sesli harfi bulup bunu başka bir sesli harfle değiştiren programı yazdık.

.MODEL SMALL
.STACK 64
.DATA
DATA DB '[kişisel bilgi çıkarıldı]'
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
CLD
MOV DI,OFFSET DATA ( İsmi buraya attık)
MOV CX,10 ( Döngü 10 defa dönmektedir)
MOV AL,'a' ( Değismesini istediğimiz harf)
REPNE SCASB ( Stringi scan ettiğimizde aradığımız harfi bulancaya kadar tekrar et )
JNE OVER
DEC SI
MOVBYTE PTR[DI],'e' ( ‘a’ nın yerine geçen harfimiz)
OVER:      MOV AX,09H
MOV DX,OFFSET DATA
INT 21H

MAIN ENDP

END MAIN

Bu yazdığım program çalışmadığı için laboratuarda başka program kullandım.Bu kullandığım program tam olarak çalışmaktadır.Bu kodu kısa sürede yazmak durumunda olduğumuz için Fırat Özaydın ile ortak çalıştığımı belirtmek isterim.

.MODEL SMALL
.STACK 100h
.DATA
DATA DB "kelime girin: $"
CHANGE DB 30,?, 29 DUP ('$')
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
MOV AH, 09H
MOV DX, OFFSET DATA
INT 21H
MOV AH, 0AH
MOV DX, OFFSET CHANGE
INT 21H
mov dl, 10d ; dl = LF
mov ah, 2h ; display subprogram
int 21h ; display LF
CLD
MOV DI,OFFSET CHANGE
MOV CX,0ffH
MOV AL,'e'

NEXT

REPNE SCASB
JNE OVER
DEC DI
MOV BYTE PTR[DI],'a'
INC CX
LOOP NEXT
OVER:
MOV AH,09H
MOV DX,OFFSET CHANGE+2
INT 21H
MOV AH,4CH
INT 21H

MAIN ENDP

END MAIN

2-) Bu bölümde girilen ismi soldan sağa yerine sağdan sola yazacak programı yazdık.

.MODEL SMALL
.STACK 64
.DATA
DATA1 DB '[kişisel bilgi çıkarıldı]'
DATA2 DB ? (ismi tersten yazdırıp buraya atacağımız için buna ihtiyacımız var)
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
CLD
MOV DI,OFFSET DATA1 (ismi DI ya attık )
MOV SI,OFFSET DATA2 (ismi SI ya attık)
MOV CX,10 (döngü 10 defa dönecek )
END:       MOV BL,[SI]
LOOP END (end döngüsünde 10 defa döner )
MOV BYTE PTR[DI],BL
MOV CX,10
NEXT:      DEC SI ( SI yı azalt)
MOV BL,[SI]
INC DI ( DI yı arttır)
MOV BYTE PTR[DI],BL
LOOP NEXT (next döngüsünde 10 defa döner)
JMP RESULT
RESULT:       MOV AX,09H
MOV DX,OFFSET DATA2 (İsmin son halini DX e attık)
INT 21H

MAIN ENDP

END MAIN

Bu yazdığım program çalışmadığı için laboratuarda bu baksa program kullandım.Bu kullandığım program çalışmaktadır. Bu kodu kısa sürede yazmak durumunda olduğumuz için Fırat Özaydın ile ortak çalıştığımı belirtmek isterim.

.model small
.stack 100h
.DATA
DATA DB " kelimeyi girin: $"
DATA DB 50,?, 49 DUP ('$')
ters DB       50 DUP(?), 49 DUP ('$')
.code
main proc far
MOV ax, @Data
MOV ds, ax
MOV AH, 09H
MOV DX, OFFSET DATA
INT 21H
MOV AH, 0AH
MOV DX, OFFSET DATA
INT 21H
MOV dl, 10d
MOV ah, 2h
İNT 21h
MOV cx, 11
MOV dx, OFFSET DATA
PUSH cx
MOV bx, OFFSET DATA
MOV si, OFFSET ters+4
ADD si, cx
DEC si
CHANGE
MOV al, [bx]
MOV [si], al
İNC bx
DEC si
LOOP CHANGE
POP cx
MOV ah, 50h
MOV bx, 1
MOV dx, OFFSET ters+2
İNT 21h
MOV ah, 4ch
İNT 21h

MAİN ENDP

END MAİN

eem332-5

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

EEM 332 – Mikroişlemciler Laboratuvarı

RAPOR

Deney No: #5 Deney Adı: TASM’ye Giriş/Assembly Programlama/Döngüler Deney Tarihi: 07/04/2006

.MODEL SMALL
.STACK
.DATA
DATA DB ? DUP (5)
RESULT DB ?
MESSAGE DB 'OGRENCI NOTLARINI GIRINIZ:';I/O arayüzünden girilecek

sayılar isteniyor.

.CODE
MAIN PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV CX, 5
MOV BX, OFFSET DATA
MOV AL,0
MOV AL, [BX]
INC BX
INT 21H
AGAIN:      MOV AH, 01; girilen sayıların büyüklük ve küçüklük durumları control
ediliyor
INT 16H
JZ AGAIN
MOV AH, 0
INT 16H
MOV [BP],AL
INC BP
CMP AL, [BX]
JL NEXT
MOV AL,[BX]

NEXT INC BX; (programdan çıkmak için gereken komut kümesi)

LOOP AGAIN
MOV RESULT, AL
MOV AH, 4CH
INT 21H

MAIN ENDP

END MAIN

rapor5

.MODEL SMALL
.STACK
.DATA
DATA DB ? DUP (5)
RESULT DB ?
MESSAGE DB 'OGRENCI NOTLARINI GIRINIZ:';I/O arayüzünden girilecek

sayılar isteniyor

.CODE
MAIN PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV CX, 5
MOV BX, OFFSET DATA
MOV AL,0
MOV AL, [BX]
INC BX
INT 21H
AGAIN:     MOV AH, 01; girilen sayıların büyüklük-küçüklükleri kontrol ediliyor
INT 16H
JZ AGAIN
MOV AH, 0
INT 16H
MOV [BP],AL
INC BP
CMP AL, [BX]
JL NEXT
MOV AL,[BX]

NEXT INC BX; programdan çıkmak için gereken komutlar

LOOP AGAIN
MOV RESULT, AL
MOV AH, 4CH
INT 21H

MAIN ENDP

END MAIN

önçalışma5

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

EEM 332 – Mikroişlemciler Laboratuvarı

Ön Çalışma/ Rapor

Deney No: # 5 Deney Adı: TASM’ ye Giriş/ Assembly Programlama/Döngüler Deney Tarihi: 31/03/2006

ÖN ÇALIŞMA

.Model small
.Stack 64k
.Data
SIGN_DATA DB +13,-10,+19,+14,-18,-9,+12,-19,+16
ORG 0010
LOWEST DB

Main: Prog Far

MOV CX,8
MOV SI,OFFSET SING_DATA
BACK:        MOV AL,[SI]
INC SI
CMP AL,[SI]
JLE SEARCH
MOV AL,[SI]
SEARCH:      LOOP BACK
MOV LOWEST,AL
MOV AH,4CH
INT 21
ENDP
END MAIN

2)

.Model small
.Stack 64
.Data
Sign_data           DB 69,87,96,45,75
Org                 001
Hıgh                DB

Maın Prog Far

MOV CX,5
MOV BX,OFFSET DATA
SUB AL,AL
AGAIN:       CMP AL,[BX]
JA NEXT
MOV AL,[BX]
NEXT:               INC BX
LOOP AGAIN
MOV DH,AL
Int 21 H
ENDP
END MAIN

EEM 332 5 OC

1-) Bu bölümde girilen isimde belirlenen bir sesli harfi bulup bunu başka bir sesli harfle değiştiren programı yazdık.

.MODEL SMALL
.STACK 64
.DATA
DATA DB '[kişisel bilgi çıkarıldı]'
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
CLD
MOV DI,OFFSET DATA ( İsmi buraya attık)
MOV CX,10 ( Döngü 10 defa dönmektedir)
MOV AL,'a' ( Değismesini istediğimiz harf)
REPNE SCASB ( Stringi scan ettiğimizde aradığımız harfi bulancaya kadar tekrar et )
JNE OVER
DEC SI
MOVBYTE PTR[DI],'e' ( ‘a’ nın yerine geçen harfimiz)
OVER:      MOV AX,09H
MOV DX,OFFSET DATA
INT 21H

MAIN ENDP

END MAIN

2-) Bu bölümde girilen ismi soldan sağa yerine sağdan sola yazacak programı yazdık.

.MODEL SMALL
.STACK 64
.DATA
DATA1 DB '[kişisel bilgi çıkarıldı]'
DATA2 DB ? (ismi tersten yazdırıp buraya atacağımız için buna ihtiyacımız var)
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
CLD
MOV DI,OFFSET DATA1 (ismi DI ya attık )
MOV SI,OFFSET DATA2 (ismi SI ya attık)
MOV CX,10 (döngü 10 defa dönecek )
END:       MOV BL,[SI]
LOOP END (end döngüsünde 10 defa döner )
MOV BYTE PTR[DI],BL
MOV CX,10
NEXT:       DEC SI ( SI yı azalt)
MOV BL,[SI]
INC DI ( DI yı arttır)
MOV BYTE PTR[DI],BL
LOOP NEXT (next döngüsünde 10 defa döner)
JMP RESULT
RESULT:     MOV AX,09H
MOV DX,OFFSET DATA2 (İsmin son halini DX e attık)
INT 21H

MAIN ENDP

END MAIN

deney

a)

.MODEL SMALL
.STACK 100h
.DATA
kelime DB "Bir kelime giriniz: $"
degistir DB 30,?, 29 DUP ('$')
.CODE
MAIN      PROC FAR
MOV AX,@DATA ; @ ile başlangıç adresi otomatik atanıyor.
MOV DS,AX
MOV ES,AX ; segment atamaları yapıldı.
MOV AH, 09H
MOV DX, OFFSET kelime            ; veri okunuyor.
INT 21H
MOV AH, 0AH
MOV DX, OFFSET degistir             ; veri ekrana yazılıyor.
INT 21H
MOV DL, 10D       ; display için yazılmış sabit kod
MOV AH, 2H
INT 21H
CLD   ; DF (direction flag (program artarak veya azalarak gidiyor)) içeriği 0'lanıyor.
MOV DI,OFFSET degistir ; degistir'i DI’ya attık.
MOV CX,0FFH
MOV AL,'e'   ; aranacak harf: 'e'

DONGU : REPNE SCASB ; 'e' harfi bulunana kadar tarama yapılacak.

JNE OVER    ; Eşit değilse OVER' a gidiliyor.
DEC DI   ; DI'nın değeri 1 azaltılıyor.
MOV BYTE PTR[DI],'a' ; ‘e’ yerine ‘a’ yazılacak
INC CX    ; CX 1 arttırılıyor.
LOOP DONGU ;DONGU' ye geri dönülüyor.
OVER:     MOV AH,09H  ; yukarıda belirtildiği gibi 09H' dan devam ediyor.
MOV DX,OFFSET degistir+2
INT 21H
MOV AH,4CH
INT 21H

MAIN ENDP

END MAIN

b)

.MODEL SMALL
.STACK 100H
.DATA
giris DB "Ters cevrilecek kelimeyi giriniz: $"
kelime DB 30,?, 29 DUP ('$')
ters DB 30 DUP(?), 29 DUP ('$')       ; stringler için hafızada yer ayrıldı.
.CODE
MAIN     PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV AH, 09H    ;Ekrana yazdırma işlemi gerçekleştiriliyor.
MOV DX, OFFSET giris
INT 21H
MOV AH, 0AH     ;Klavyeden kelime okunuyor.
MOV DX, OFFSET kelime
INT 21H
MOV DL,10D        ;Display işlemi gerçekleştiriliyor.
MOV AH,2H
INT 21H
MOV CX,11
MOV DX, OFFSET kelime ;Ters çevrilecek kelime okunup DX içine atanıyor.
PUSH CX
MOV BX, OFFSET kelime
MOV SI, OFFSET ters+4 ; data girilince data+2’ye kaydediliyor. O yüzden +4 kullanılıyor.
ADD SI,CX

CEVIR

MOV AL, [BX]
MOV [SI], AL
INC BX                 ;Harfler ters çeviriliyor.
DEC SI
LOOP CEVIR
POP CX
MOV AH, 40H
MOV BX, 1              ;Kelime ekrana yazılıyor.
MOV DX, OFFSET ters+2 ; data girilince data+2 den başladığı için.
INT 21H
MOV AH, 4CH     ; program sonlandırılıyor.
INT 21H

MAIN ENDP

END MAIN

önçalışma 5

1) Verilen isimde belirlenen bir sesli harfi bulup başka bir sesli harf ile değiştiren program

kodu aşağıdaki gibidir;

ÖRNEK: [kişisel bilgi çıkarıldı] → [kişisel bilgi çıkarıldı] (e → a)

.MODEL SMALL
.STACK 64
.DATA
DATA DB '[kişisel bilgi çıkarıldı]'      ; değiştirilecek string : “[kişisel bilgi çıkarıldı]”
.CODE
MAIN           PROC FAR
MOV AX, @DATA ; @ ile başlangıç adresi otomatik veriliyor
MOV DS, AX
MOV ES, AX
CLD
MOV DI, OFFSET DATA ; İsim DI’ya gönderildi
MOV CX, 09       ; Döngünün tekrar sayısı
MOV AL, 'a'      ; Yeni basılacak harf
REPNE SCASB ; Harf bulunana kadar tarama yapılacak
JNE OVER     ; Eşit değilse OVER döngüsüne atlıyor
DEC SI      ; SI’ nın değeri azaltılıyor
MOVBYTE PTR[DI], 'e' ; “e” yerine “a” yazılacak
OVER:          MOV AX, 09H
MOV DX, OFFSET DATA
INT 21H

MAIN ENDP

END MAIN

2) Çevirici dilinde girilen ismi soldan sağa yerine sağdan sola yazacak program kodu

aşağıdaki gibidir

ÖRNEK: [kişisel bilgi çıkarıldı] → neves ila

.MODEL SMALL
.STACK 64
.DATA
DATA1 DB '[kişisel bilgi çıkarıldı]’
DATA2 DB ?      ; “neves ila” DATA2’ye yüklenecek
.CODE
MAIN          PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
CLD
MOV DI, OFFSET DATA1 ; DI’ya başlangıç adresi verildi
MOV SI, OFFSET DATA2 ; SI’ya başlangıç adresi verildi
MOV CX, 09           ; Döngünün tekrar sayısı
END:          MOV BL, [SI] ; SI göstericisinin olduğu yerdeki harf BL’ye atıldı
LOOP END     ; 9 tur
MOV BYTE PTR[DI], BL ; DI’ nın gösterdiği yere BL yüklenir
MOV CX, 09
NEXT:         DEC SI   ; SI azaltılıyor
MOV BL, [SI]
INC DI ; DI arttırılıyor
MOV BYTE PTR[DI], BL
LOOP NEXT ; 9 tur
JMP RESULT ; Result döngüsüne atlar
RESULT:       MOV AX, 09H
MOV DX, OFFSET DATA2 ; Çevrilmiş isim DX’ e yüklendi
INT 21H

MAIN ENDP

END MAIN

Lab5s1

MODEL SMALL
.STACK 64
.DATA
DATA DB "ala"
.CODE

MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX	
MOV ES,AX
CLD 
MOV DI,OFFSET DATA 			
MOV CX,10				
MOV AL,'a' 				
REPNE SCASB 				
JNE ATLA				
DEC SI
MOV BYTE PTR[DI],'a' 			
ATLA:	MOV AX,09H
MOV DX,OFFSET DATA

INT 21H
MAIN ENDP			
END MAIN

lab5s2

.MODEL SMALL
.STACK 64
.DATA
DATA1 DB '[kişisel bilgi çıkarıldı]’
DATA2 DB ?				
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
CLD
MOV DI,OFFSET DATA1 		
MOV SI,OFFSET DATA2 			
MOV CX,10				
TOP:		
MOV BL,[SI]
LOOP TOP 
MOV BYTE PTR[DI],BL
MOV CX,10
NEXT:		
DEC SI 
MOV BL,[SI]
INC DI 
MOV BYTE PTR[DI],BL
LOOP NEXT 
JMP RESULT

RESULT:	
MOV AX,09H
MOV DX,OFFSET DATA2 
INT 21H
MAIN ENDP			
END MAIN

22222 332 deney 5

.model small
.stack 100h
.data

;
;Ekrana yazdırılacaklar ve stringler için hafızada yer ayrılıyor
;

giris DB "Ters cevrilecek kelimeyi giriniz: $"
kelime DB 30,?, 29 DUP ('$')
ters DB	30 DUP(?), 29 DUP ('$')


	.code
main proc far
	mov	ax, @Data
	mov	ds, ax	
	

;
;Ekrana yazdırma mesajı görüntüleniyor
;
MOV AH, 09H
MOV DX, OFFSET giris
INT 21H	




;
;Ters çevrilecek kelime klavyeden okunuyor
;
MOV AH, 0AH
MOV DX, OFFSET kelime
INT 21H

;
;İmleç bir aşağıya alınıyor
;
mov dl, 10d 
mov ah, 2h 
int 21h 


	
	mov	cx, 11				
	mov	dx, OFFSET kelime		;Ters çevrilecek kelime okunup DX içine atanıyor



			
	push	cx	
	mov	bx, OFFSET kelime
	mov	si, OFFSET ters+4
	add	si, cx	
	dec	si			
	
cevir:
		mov	al, [bx]		; 
		mov	[si], al		; 
		inc	bx			;Harfler çevrilmiş şekilde tekrar yerleştiriliyor
		dec	si			; 
		loop	cevir			; 
		pop	cx			;
		mov	ah, 40h			;
		mov	bx, 1			;Ters çevrilmiş kelime ekrana yazdırılıyor 
		mov	dx, OFFSET ters+2	;
		int	21h			; 

;
;Program sonlandırılıyor
;

		mov	ah, 4ch			
		int	21h			
		main endp
			end main

lab5m

;THE FORM OF AN ASSEMBLY LANGUAGE PROGRAM
;NOTE: USING SIMPLIFIED SEGMENT DEFINITION
		.MODEL SMALL
		.STACK 64
		.DATA
SIGN_DATA 	DB	69,87,96,45,75
ORG 001
HIGHEST	DB	?
		.CODE
MAIN		PROC	FAR
		MOV 	AX,@DATA
		MOV 	DS,AX
		MOV 	CX,5
		MOV 	SI,OFFSET SIGN_DATA
		MOV 	AL,[SI]
BACK:		INC 	SI
		CMP 	AL,[SI]
		JGE 	SEARCH
		MOV 	AL,[SI]
SEARCH:		LOOP 	BACK
		MOV 	HIGHEST,AL
		MOV 	AH,4CH
		INT 	21H
MAIN		ENDP
		END	MAIN

lab5m1

;THE FORM OF AN ASSEMBLY LANGUAGE PROGRAM
;NOTE: USING SIMPLIFIED SEGMENT DEFINITION
		.MODEL SMALL
		.STACK 64
		.DATA
SIGN_DATA 	DB	69,87,96,45,75
ORG 001
HIGHEST	DB	?
		.CODE
MAIN		PROC	FAR
		MOV 	AX,@DATA
		MOV 	DS,AX
		MOV 	CX,5,
		MOV 	SI,OFFSET SIGN_DATA
		MOV 	AL,[SI]
BACK:		INC 	SI
		CMP 	AL,[SI]
		JGE 	SEARCH
		MOV 	AL,[SI]
SEARCH:		LOOP 	BACK
		MOV 	HIGHEST,AL
		MOV 	AH,4CH
		INT 	21H
MAIN		ENDP
		END	MAIN

calisma-787

;==========================================
;===== 8BIT Input/Output TEST PROGRAM =====
;=====         FOR SKC - 86           =====
;==========================================

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

calisma-788

;==========================================
;===== 8BIT Input/Output TEST PROGRAM =====
;=====         FOR SKC - 86           =====
;==========================================

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

calisma-789

TITLE PROGRAM LAB 5: KEYBOARD HIT USING INT 16	

	.MODEL SMALL
	.STACK
	.DATA

	SAYILAR DB 5 dup (?)
	RESULT DB ?
	MESSAGE DB 'NOTLARI GIRINIZ?'
	.CODE

MAIN	PROC	FAR                                   
	MOV AX, @DATA                          
	MOV DS, AX                                      
	MOV CX, 5 
	MOV BP, 0
	MOV AH,09		       
	MOV DX, OFFSET MESSAGE
    	INT 21H
	MOV BX, OFFSET SAYILAR
	MOV AL,0                   
	MOV AL, [BX] 
	INC BX
	
AGAIN:	MOV AH, 01
	INT 16H
	JZ AGAIN
	MOV AH, 0
	INT 16H
	MOV [BP],AL
	INC BP
	MOV AH, 02
	INT 21H
	CMP AL, [BX]		
	JL NEXT			
	MOV AL,[BX]		

NEXT:	INC BX
	LOOP AGAIN                              
	MOV RESULT, AL		

	MOV AH, 4CH		
	INT 21H			

MAIN	ENDP			
	END MAIN

lab5

TITLE PROGRAM LAB 5: KEYBOARD HIT USING INT 16	

	.MODEL SMALL
	.STACK
	.DATA

	SAYILAR DB ? DUP (5)
	RESULT DB ?
	MESSAGE DB 'NOTLARI GIRINIZ?'
	.CODE

MAIN	PROC	FAR                                   
	MOV AX, @DATA                          
	MOV DS, AX                                      
	MOV CX, 5 		       
	MOV BX, OFFSET SAYILAR      
	MOV AL,0                   
	MOV AL, [BX] 
	INC BX
	INT 21H

AGAIN:	MOV AH, 01
	INT 16H
	JZ AGAIN
	MOV AH, 0
	INT 16H
	MOV [BP],AL
	INC BP
	CMP AL, [BX]		
	JL NEXT			
	MOV AL,[BX]		

NEXT	INC BX
	LOOP AGAIN                              
	MOV RESULT, AL		

	MOV AH, 4CH		
	INT 21H			

MAIN	ENDP			
	END MAIN

1111,1 332 deney 5

	.MODEL SMALL
	.STACK 100h
	.DATA 
kelime DB "Bir kelime giriniz: $"

degistir DB 30,?, 29 DUP ('$')
	.CODE
MAIN PROC FAR

	MOV AX,@DATA
	MOV DS,AX
	MOV ES,AX

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

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

mov dl, 10d ; dl = LF 
mov ah, 2h ; display subprogram
int 21h ; display LF

	CLD
	MOV DI,OFFSET degistir
	MOV CX,0ffH
	MOV AL,'e'
DONGU :	REPNE SCASB
	JNE OVER
	DEC  DI
	MOV BYTE PTR[DI],'a'
	INC CX
	LOOP DONGU

OVER:	MOV AH,09H
	MOV DX,OFFSET degistir+2
	INT 21H

	MOV AH,4CH
	INT 21H

MAIN ENDP
	END MAIN

calisma-882

.MODEL small
.STACK 64
.DATA
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
DİZİ1:MOV AH,01
İNT 21H
CMP AL,13
JZ YAZ
INC SI
CMP AL,61H
SUB AL,20H
SUB AL,0H
MOV [SNC+SI],AL
JMP DİZİ1
MOV AH,09H
MOV AH,4CH
INT 21H
MAIN ENDP
ENDP MAIN

calisma-883

.MODEL small
.STACK 64
.DATA
DATA1 DB "Mr.Gones"
DATA2 DB ?
.CODE
MAIN PROC FAR
MOV	AX,@DATA
MOV DS,AX
MOV BX,AX
MOV DI,OFFSET DATA1
MOV CX,9
MOV AL,'G'
JE OVER
DEC DI
MOV DI,'J'
MOV AH,9
MOV DX,OFFSET DATA1
INT 21H
MAIN ENDP
END MAIN

calisma-1226

.MODEL SMALL
.STACK 100h
.DATA
isim DB "Isim: $"
cevir DB 30,?, 29 DUP ('$')
.CODE

MAIN 	PROC FAR
	MOV AX, @DATA   ; @ ile başlangıç adresi otomatik veriliyor
	MOV DS, AX	
	MOV ES, AX

	MOV AH,09h
	MOV DX, OFFSET isim     ; İsim okunup DX’e gönderildi
	INT 21h

	MOV AH,Ah         ; Döngünün tekrar sayısı
	MOV DX, OFFSET cevir     ; Değiştirilip ekrana yazılıyor
	INT 21h

	MOV DL,10D      ;SABİT KOD
	MOV AH,2h
	INT 21h

	CLD   ;	Destination flag sıfırlaması
	MOV DI,OFFSET cevir
	MOV CX,0FFh
	MOV AL,'e';     ;Değiştirilecek harf

DONGU:	REPNE SCASB   ; Harf bulunana kadar tarama yapılacak
	JNE OVER      ; Eşit değilse OVER döngüsüne atlıyor
	DEC DI	; DI’ nın değeri azaltılıyor
	MOV BYTE PTR[DI],'a'     ; “e” yerine “a” yazılacak
	INC CX         ; CX++
	LOOP DONGU

OVER:	MOV AX, 09H
	MOV DX, OFFSET cevir
	INT 21h

	MOV AH,4CH	;SABİT KOD
	INT 21H
	MAIN ENDP			
	END MAIN

calisma-1227

.MODEL SMALL
.STACK 100h
.DATA
isim DB "Isim: $"
cevir DB 30,?, 29 DUP ('$')
.CODE

MAIN 	PROC FAR
	MOV AX, @DATA   ; @ ile başlangıç adresi otomatik veriliyor
	MOV DS, AX	

	MOV AH,09h
	MOV DX, OFFSET isim     ; İsim okunup DX’e gönderildi
	INT 21h

	MOV DL,10D      ;SABİT KOD
	MOV AH,2h
	INT 21h

	MOV CX,11
	MOV DX,OFFSET isim
	PUSH CX
	MOV BX,OFFSET isim
	MOV SI,OFFSET cevir+4
	ADD SI,CX

DONDUR:	MOV AL,[BX]
	MOV [SI],AL
	INC BX
	DEC SI
	LOOP DONDUR

	POP CX
	MOV AH,40H
	MOV BX,1
	MOV DX,OFFSET cevir+2
	INT 21h

	MOV AH,4CH	;SABİT KOD
	INT 21H
	MAIN ENDP			
	END MAIN

TOPLA1

;THE FORM OF AN ASSEMBLY LANGUAGE PROGRAM
;NOTE: USING SIMPLIFIED SEGMENT DEFINITION
		.MODEL SMALL
		.STACK 64
		.DATA
DATA1		DB	52H
DATA2		DB	29H
SUM		DB	?
		.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
		MOV	AL,DATA1	;get the first operand
		MOV	BL,DATA2	;get the second operand
		ADD	AL,BL		;add the operands
		MOV	SUM,AL	;store the result in location SUM
		MOV	AH,4CH	;set up to
		INT	21H		;return to DOS
MAIN		ENDP			
		END	MAIN		;this is the program exit point

README

Asm uzantılı olarak kaydedilen dosyanın adı topla1.asm; Bu dosya, Td,Tlink, Tasm dosyalarının bulunduğu dosyanın içine kaydedilmiştir. Bu dosyayı .asm olarak derlemek için C altındaki t klasörüne geçiniz

Aşağıda belirtilen işlemleri yapınız.

TD çalıştırıldığında ekranda görülen menü aşağıdaki şekildedir. F7 kullanılarak program adım adım çalıştırılır.

readme

Asm uzantılı olarak kayd edilen dosyanın adı topla1.asm; Bu dosya, Td,Tlink, Tasm dosyalarının bulunduğu file’ içine kayd edilmiştir. Bu dosyayı asm olarak derlemek için C altindaki file’a geçiniz ve aşağıdaki işlemleri yapınız.

C:\t>tasm topla1.asm

Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland Internationa

Assembling file: topla1.asm Error messages: None Warning messages: None Passes: 1 Remaining memory: 424k

Tlink ile obj file çalıştırılır

C:\t >tlink topla1.obj

Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International Unable to open file topla.obj

EXE file çalıştırılır

C:\t>td topla1.exe

TD de ekranda görülen menu. F7 kullanarak program adım adım çalıştırılır.

59C9:0000 B8CB59        mov ax,59CB       - ax 12A2 ¦c=
59C9:0003 8ED8       mov ds,ax       _ bx 4647 ¦z=
59C9:0005 A00000       mov al,[0000] _ cx 12A2 ¦s=
59C9:0008 8A1E0100       mov bl,[0001] _ dx 0000 ¦o=
59C9:000C 02C3       add al,bl      _ si F68E ¦p=
59C9:000E A20200       mov [0002],al _ di 9BC1 ¦a=
59C9:0011 B44C       mov ah,4C        _ bp 0100 ¦i=
59C9:0013 CD21        int 21       _ sp 0106 ¦d=

___________________________________________¦ ¦

59B9:0000 CD 20 00 A0 00 9A F0 FE - á Ü_ ¦         ¦
59B9:0008 1D F0 E6 01 BF 26 B0 01 µ +&_ +---------------
59B9:0010 BF 26 83 02 23 21 A2 12 +&â#!ó ¦59CC:0042 FFFF
59B9:0018 FF FF FF FF FF FF FF FF         ¦59CC:0040 FF00

eem332-lab-05.zip

ZIP arşivi · 1.0 MB · 05.03.2002

⬇ (1.0 MB)