EMU8086 Küçük Harfi Büyük Yapan Program

EMU8086’da dışarıdan alınan bir ifadeyi büyük harfe çevirip ekrana yazdıran programı göstereceğim. Bunun için macro kullanacağım.  Hatta ek olarak ekrana İfadeGirin yazısıda yazdıralım. Dışardan alınacak ifade için bir dizi ve ekrana yazılacak olan ifadeyi tanımlıyoruz.


.model small
.stack 64
.data 
yaz db "ifadeyigirin:$"
dizi db 6dup(00) 

6 bitlik bir dizi oluşturdum. Büyük harfe çevirmek için macromuzu yazacağız.


.code

cevir macro al
local cik
cmp al,"a"
jb cik
cmp al,"z"
ja cik
sub al,32
mov [si],al
inc si
cik:
endm 

Cevir makromuzun adı. Al göndereceğimiz parametre. Local ile makroda içinde tanımladığımız değişkenleri yazıyoruz. Cmp ile girilen ifadenin a ile z arasından bir harf olup olmadığına bakıyor. Eğer harf değilse cik: etiketine gidip makrodan çıkıyor. Eğer a ile z arasında ise harften 32 çıkararak büyük harfe çeviriyor.

Tanımlamalarımızı yapalım ve ekrana “ifadeyigirin:” yazısını yazdıralım.


 mov ax,@data
mov ds,ax
lea si,dizi 

mov ah,09h
lea dx,yaz
int 21h

Dizinin başlangıç adresini si’ye attık. Daha sonra dx’e yazıyı atarak ekrana yazdırdık.

Şimdi dışarıdan değer alıp diziye atayalım.


 mov cx,6 
diziyeat:
mov ah,01h
int 21h
mov [si],al
inc si
loop diziyeat

Döngü değişkeni olan cx’e 6 veriyoruz. Kullanıcıdan sayı alıyoruz ve bu al’de tutuluyor. Daha sonra bu değeri si’ye atarak dizimize kaydediyoruz.

Her harf için makroya yollama kodunu yazalım.


 mov cx,6
dongu:
mov al,[si-6]
cevir al 
loop dongu

Döngü değişkeni olan cx’e 6 veriyoruz. Daha sonra si-6 diyerek dizinin ilk elemanına ulaşıp onu al’ye atıyoruz. Daha sonra cevir al diyerek makroya gönderiyoruz. Döngüyle bütün harflerin büyümesini sağlıyoruz.

Son olarak kelimeyi ekrana yazdırma ve bitirme kodları kaldı.


 mov cx,6
ekranayaz:
mov ah,02h
mov dl,[si-6]
int 21h
inc si 
loop ekranayaz

mov ah,4ch
int 21h
end

Döngü değişkeni olan cx’e 6 veriyoruz. Dizinin ilk elemanını dl’ye atıp yazdırıyoruz. Daha sonra si’yi arttırarak her harfi yazmasını sağlıyoruz. Son kod bloğunu programı bitirmek için yazdık.

KODUN TAMAMI:


.model small
.stack 64
.data 
yaz db "ifadeyigirin:$"
dizi db 6dup(00) 
.code 
cevir macro al
local cik
cmp al,"a"
jb cik
cmp al,"z"
ja cik
sub al,32
mov [si],al
inc si
cik:
endm 

mov ax,@data
mov ds,ax
lea si,dizi 

mov ah,09h
lea dx,yaz
int 21h

mov cx,6 
diziyeat:
mov ah,01h
int 21h
mov [si],al
inc si
loop diziyeat

mov cx,6
dongu:
mov al,[si-6]
cevir al 
loop dongu

mov cx,6
ekranayaz:
mov ah,02h
mov dl,[si-6]
int 21h
inc si 
loop ekranayaz

mov ah,4ch
int 21h
end

EKRAN ÇIKTISI:

Furkan Aktaş

Bilgisayar Mühendisiyim. Microsoft MCSA Web Applications Sertifikasına Sahibim. Aktif iş hayatımda Full Stack .Net Developer olarak çalışmaktayım.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir