Emu8086 ile 4 rakamın ortalaması

Klavyeden girilen 4 rakamin ortalamasini emu8086 da hesaplama.
10h kesmesi, 16h kesmesi, loop, push, pop kullanımı.
Ondalıklı sonucun sadece integer kısmını alır. Ondalık kısım için ekstradan kod yazmamız gerekli.

org 100h

;klavyeden 4 tane rakam alacagimiz icin 
;loop dongumuz icin CX'e 4'u atadik
mov CX, 4
;dongu baslangic yeri             
sayici:
  ;16h kesmesi ve AH'a atadigimiz 
  ;0 fonksiyonu ile klavyeden AL'e rakam alinir
  mov AH, 0     
  int 16h
  ;push komutu ile AX'deki bilgimizi 
  ;stacka aliyoruz (push komutu operandi word olmali!)
  push AX 
  ;10h kesmesi ve AH'a atadigimiz 
  ;0e fonksiyonu ile AL'deki Ascii degeri ekrana yazdiriyoruz  
  mov AH, 0eh
  int 10h
  ;AL'ye 1 bosluk atiyoruz ve 
  ;bunu ekrana yazdirarak
  ;girdigimiz rakamlarin arasinda
  ;1 bosluk olmasini sagliyoruz
  mov AL, ' '
  mov AH, 0eh
  int 10h  
loop sayici  ;dongumuz bitti, her dongude CX 1 azalacak  
             ;CX degeri 0 olana kadar
             ;bu dongu tekrarlayacak

;stack da suan 4 deger var
;pop komutu ile stackdan deger cagiracagiz
;ilk cagirilan deger, stacka son gonderilen deger olacaktir.
pop AX  ;klavyeden alinan 4. deger AX'e geldi
pop BX  ;klavyeden alinan 3. deger BX'e geldi
add AX, BX  ;AX ve BX toplandi, toplam AL'de
pop BX  ;klavyeden alinan 2. deger BX'e geldi
add AX, BX  ;AX ve BX toplandi, toplam AL'de
pop BX  ;klavyeden alinan ilk deger BX'de
add AX, BX ;AX ve BX toplandi, toplam AL'de   
mov AH, 0  ;AH'i sifirliyoruz                         
mov BL, 04h  ;4 rakam girdik, ortalamayi bulmak icin BL'e 4 attik 
div BL       ;AX'i BL'e bolduk, kalan AH'da, bolum AL'de

mov AH, 0eh  ;son olarak sonucu 10h ve 0eh fonksiyonu ile ekrana yazdiriyoruz
int 10h

ret

Hiç yorum yok:

Yorum Gönder