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: