EMU8086 Sayıdaki 1 Sayısının Adedini Bulma
EMU8086 da 16 bitlik bir sayı içindeki “1” sayısından kaç tane olduğunu bulan programı yazacağız. Bunun için data segmentte bir şey tanımlaya gerek yok. Direk olarak code kısmından başlıyoruz. Önce tanımlamaları yapalım.
.model small .stack 64 .data .code mov ax,@data mov ds,ax mov dx,1010101010101010B mov bl,0 mov cx,16
İ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 dx’e 16 bitlik bir sayı yükledik. Bl‘yi kaç tane 1 olduğunu saydırmak için başlangıç olarak 0 yaptık. 16 bitide kontrol ettirmek için döngü değişkeni olan cx’i 16 yaptık.
Şimdi döngümüzü yazarak kodumuzu tamamlayalım.
.model small .stack 64 .data .code mov ax,@data mov ds,ax mov dx,1010101010101010B mov bl,0 mov cx,16 ara: rcr dx,1 jc birvar devam: loop ara jmp cik birvar: inc bl jmp devam cik: mov ah,4ch int 21h end
Rcr komutuyla biti 1 sağa kaydırarak 1 olup olmadığına baktık. Jc komutuyla eğer sayı birse birvar etiketine atladık. Daha sonra inc bl ile bl yi 1 arttırdık. Daha sonra JMP komutuyla şartsız devam etiketine çıktık. Daha sonra loop ara komutuyla döngünün başına geldik. Dögü 16 kez döndükten sonra jmp cik komutu çalışır ve cik etiketine gelerek program sonlanır. Sayımızda 8 tane 1 olduğu için Bl‘nin sonucu aşağıdaki gibi olur.