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.