MIPS Programlama Dizideki Pozitif Negatif Sayıları ve Adetlerini Bulma - Bilişim Konuları

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ü:

mips-pozitifsayilar-negatifsayilar

Bu Yazıya Tepkin Nedir?
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Yorum Yap