MIPS Programlama Dizideki Pozitif Negatif Sayıları ve Adetlerini Bulma
Bu yazımızda Mips işlemci programlama olan Mars programında bir dizi içerisinde bulunan sayılardan pozitif sayıları ve negatif sayıları bularak ekranda ayrı ayrı yazdıran aynı zamanda kaç tane pozitif sayı ve kaç tane negatif sayı olduğunu bulan program kodu. Öncelikle 10 elemandan oluşan bir dizi tanımlıyoruz. Daha sonra bu dizi içerisine isteğimiz gibi 10 tane pozitif, sıfır ve negatif sayıları ekliyoruz. Sonrasında ise bir döngü kurarak dizinin her elemanını teker teker kontrol ederek sayının pozitif mi negatif mi yoksa sıfır mı olduğunu bulup ekranda yazdırıyoruz. Aynı zamanda bu sayıların kaçar tene olduğunu başka registerlarda tutarak döngü bittikten sonra ekrana toplam pozitif ve negatif sayılardan kaçar tane olduğunu yazdırıyoruz.
Mips program kodu:
# Mips bir dizi içerisinde bulunan pozitif sayıları ve negatif sayıları bulan ve ekrana yazan ve pozitif negatif sayı adetlerini bulan program # www.bilisimkonulari.com .data # veri tanımlama başlangıç dizi: .word 12, -25, 40, 0, -18, 36, -42, 54, -75, 33 # dizi elemanları size: .word 10 # dizi boyutu pozitif_sayi: .asciiz "Pozitif sayi:" pozitif_adet: .asciiz "Pozitif sayi adeti:" negatif_sayi: .asciiz "Negatif sayi:" negatif_adet: .asciiz "Negatif sayi adeti:" br: .asciiz "\n" .text # veri tanımlama bitiş la $t0, dizi # t0 dizi adresi eklenir la $t5, size # t5 size adresi eklenir lw $t6, 0($t5) # t5 adresindeki değeri okur 10 li $t3,0 # pozitif sayaç li $t4,0 # negatif sayaç loop: # döngü başlangıcı la $a0, dizi # dizi a0 adrese yüklenir add $a1, $zero, 10 # a1'e 10 değerini atar a1=0+10 a1 döngü değeri jal yaz # yaz'a gider la $a0,pozitif_adet # a0 adresine pozitif_adet yükler li $v0, 4 # ascii karakterleri (pozitif sayilar:) yazdırır syscall # yazdırmayı bitirir move $a0,$t3 # a0 kayıtçıya t3 değeri atanır li $v0,1 # t3 değeri yani pozitif değerler adeti yazdırır syscall # yazdırmayı bitirir la $a0, br # a0 adresine br atanır li $v0, 4 # alt satıra geçme işlemi yapar syscall # yazdırmayı bitirir la $a0, negatif_adet # a0 adresine negatif_adet yükler li $v0, 4 # ascii karakterleri (negatif sayilar:) yazdırır syscall # yazdırmayı bitirir move $a0,$t4 # a0 kayıtçıya t4 değeri atanır li $v0,1 # t4 değeri yani negatif değerler adeti yazdırır syscall # yazdırmayı bitirir li $v0, 10 # programı durdurur syscall # yazdırmayı bitirir # **************************************************************** yaz: # yaz fonksiyonu add $t0, $zero, $a0 # dizi elemanının adresini yükler add $t1, $zero, $a1 # a1 döngü sayısını t1 e atar dongu: lw $a0, 0($t0) # a0 değerine dizi elemanını atar li $t2,0 # t2 değerine 0 atama yapar (şart için t2=0 kontrolü ) bge $a0, $t2, True # a0 >=0 mı kontrolü yapar (if a0>=0) addi $t4,$t4,1 # negatif sayaçı 1 artır t4=t4+1 la $a0, negatif_sayi # ekrana negatif sayı yazar li $v0, 4 # ascii olduğu belirtir syscall # yazmayı bitirir lw $a0, 0($t0) # dizi elemanını yazdırır li $v0, 1 syscall la $a0, br # alt satıra geçmek istediğini bildirir li $v0, 4 # alt satıra geçer syscall j Exit # exit fonksiyonuna gider True: addi $t3,$t3,1 # pozitif sayaçı 1 artır t3=t3+1 la $a0, pozitif_sayi # pozitif sayılar yazdırır li $v0, 4 # ascii olduğu belirtir syscall lw $a0, 0($t0) # dizi elemanını a0 atar li $v0, 1 li $t2,0 # dizi elemanını yazdırır syscall la $a0, br # alt satıra iner li $v0, 4 # ascii olduğu belirtir syscall Exit: addi $t0, $t0, 4 # bir sonraki dizi adresi addi $t1, $t1, -1 # döngü değerini bir azaltır bgtz $t1, dongu # dongü bitti mi t1=0 ise döngüden çıkar jr $ra # değeri döndürür return
Programın ekran görüntüsü:
<< Önceki Yazı
Sonraki Yazı >>