EMU8086 Sayının Çift veya Tek Olduğunu Bulma

EMU8086 da dizideki elemanların tek ya da çift olduğunu bulan programı yazacağız. Tek olanları tek isimli diziye, çift olanları çift isimle diziye yazdıracağız. Bunun için öncelikle dizimizi, elemanlarımızı, teklerin ve çiftlerin tutulacağı dizileri tanımlayalım.


.model small
.stack 64
.data
dizi db 1,2,3,4,5,6
sayi db 2
cift db ?,?,?
tek db ?,?,?

Sayının tek mi çift mi olduğunu bulmak için sayının 2’ye göre modunu alıp kalanın 0 yada 1 olmasına bakacağız. Bu yüzden sayi diye bir değişken tanımlayıp 2 değerini verdik.

Dizimizde 6 eleman bulunduğu için cx değerine 6 veriyoruz. Dizimizin başlangıç adresini si’ye atıyoruz. İleride kullanacağımız bx ve di değerlerini de sıfırlıyoruz.


.model small
.stack 64
.data
dizi db 1,2,3,4,5,6
sayi db 2
cift db ?,?,?
tek db ?,?,?

.code
mov ax,@data
mov ds,ax
mov cx,6
lea si,dizi
mov bx,0000
mov di,0000

Code içindeki ilk iki satırı çıktının 0714:0000 adresinde gözükmesi için yazdık. Son olarak döngümüzü yazarak kodumuzu bitirelim.


.model small
.stack 64
.data
dizi db 1,2,3,4,5,6
sayi db 2
cift db ?,?,?
tek db ?,?,?

.code
mov ax,@data
mov ds,ax
mov cx,6
lea si,dizi
mov bx,0000
mov di,0000

don: mov ax,0000
mov al,[si]
div sayi
cmp ah,0001
je teke
jmp cifte

cifte:mov al,[si]
mov cift[di],al
inc di
jmp atla

teke: mov al,[si]
mov tek[bx],al
inc bx

atla: inc si
loop don
mov ah,4ch
int 21h
end

Başlangıç olarak ax değerini sıfırlıyoruz. Çünkü bölmemiz gereken sayıyı ax’e atacağız. Daha sonra dizinin ilk elemanını al’ye atıyoruz. Div sayi komutuyla değerin 2’ye göre modunu almış oluyoruz. İşlemin kalanı ah’a atanır. Cmp komutuyla ah’ın 1 olup olmadığına bakıyoruz. JE komutu eşitse demektir ve eşitse teke etiketine atlatır. Eğer değilse jmp komutuyla cifte etiketine geçilir.

Cifte etiketinde dizinin elemanı önce al’ye, sonra al’den cift dizisine atanır. Daha sonra di bir arttırılır. Jmp komutuyla atla etiketine gider.

Teke etiketinde dizinin elemanı önce al’ye, sonra al’den tek dizisine atanır. Daha sonra bx bir arttırılır.

Atla etiketinde si değeri bir arttırılır. Loop don komutuyla don etiketine çıkılması sağlanır. Döngü 6 kez döndükten sonra son 3 komut çalışır ve program sonlanır.

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