EMU8086 Dizideki Bir Sayının Adedini Bulmak
EMU8086 da dizideki herhangi bir sayının kaç adet olduğunu bulan programı yazacağız. Bunun için data segmentte bir dizi tanımlıyoruz. Ben dizideki 2 sayısından kaç tane olduğunu bulan bir program yazacağım.
.model small .stack 64 .data dizi db 2,1,3,2,4,7,2
Şimdide code kısmına geçelim. Gerekli tanımlamaları yapalım.
.model small .stack 64 .data dizi db 2,1,3,2,4,7,2 .code mov ax,@data mov ds,ax mov cx,7 lea si,dizi mov bl,0
İlk iki kod satırını programı çalıştırdıktan sonra sonucu memory kısmında 0714:0000 adresinde görmek için yazdık. Daha sonra 7 sayımız olduğu için döngü değişkeni olan cx’e 7 verdik. Dizinin başlangıç adresini Si’ye atadık. Kaç adet olduğunu saydırmak için bl’yi kullanacağız. Bunun için bl’yi sıfırladık. Şimdi döngümüzü yazalım.
.model small .stack 64 .data dizi db 2,1,3,2,4,7,2 .code mov ax,@data mov ds,ax mov cx,7 lea si,dizi mov bl,0 dongu: cmp [si],2 jz git jmp gec git:inc bl gec:inc si loop dongu mov ah,4ch int 21h end
Cmp komutu sağdaki operanddan soldaki operandı çıkarır. Alttaki jz komutu sonuç 0 sa işlem yap anlamına gelir. Eğer sonuç 0‘sa git etiketine gider ve inc bl komutuyla bl 1 arttırılır. Değilse jmp komutuyla şartsız gec etiketine gider. Si’yi 1 arttırır ve loop dongu komutuyla dongu etiketine gider. 7 kez döngü döndükten sonra program sonlanır.
Dizide toplamda 3 tane iki olduğu için Bl’nin son hali aşağıdaki gibi olur.