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.

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 yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir