MIPS İşlemci Programlama İle Fibonacci Dizisinin İlk 15 Elemanını Yazdırma - Bilişim Konuları

MIPS İşlemci Programlama İle Fibonacci Dizisinin İlk 15 Elemanını Yazdırma

Fibonacci Dizisi: Her eleman kendisinden önceki iki elemanın toplamından oluşan diziye fibonacci dizisi denir. Bu dizinin elemanları şu şekilde devam eder.

1-1-2-3-5-8-13 …..

Bu yazımızda Mips işlemci programlama ile Fibonacci dizisinin ilk 15 elemanını buldurarak ekrana yazdıran programın kodunu yazacağız. Örneğimizde dizinin ilk 15 elemanını yazdıracağız. Eğer istersek kod üzerinde herhangi bir değişiklik yapmaya gerek olmadan dizinin istediğimiz kadar elemanını yazdırabiliriz. Tek yapmamız gereken değişiklik dizinin boyutunun kaç olacağını değiştirmek.

fibs: .word 0 : 15 
size: .word 15

Yani kaç eleman yazdırmak istiyorsak sadece programın yukarıdaki bulunan iki satırı üzerinde değişiklik yapmamız yeterli olacaktır. Bu örnekte 15 yazdığımız için dizinin ilk 15 elemanını yazdıracağız. Daha farklı bir eleman sayısı yazdırmak istersek yukarıdaki iki kod satırında bulunan 15 sayısını değiştirmemiz yeterli olacaktır.

Kodumuzu her zaman olduğu gibi yine Mars4_5 programında yazacağız. Mars programını çalıştırdıktan sonra Dosya-Yeni komutlarını kullanarak yeni bir kod yazma sayfası açıyoruz. Daha sonra aşağıdaki program kodunu kopyalayarak sayfamıza yapıştırıyoruz. Daha sonra Sırasıyla;

Run – Assamble ve Run – Go komutlarına tıklayarak programımızı çalıştırıyoruz.

Program kodlarımız:

# Fibonacci dizisinin ilk 15 elemanını ekrana yazdıran MIPS programı
# www.bilisimkonulari.com

      .data
fibs: .word   0 : 15        # "array" of 12 words to contain fib values
size: .word  15             # size of "array" 
      .text
      
      la   $t0, fibs        # load address of array
      la   $t5, size        # load address of size variable
      lw   $t5, 0($t5)      # load array size
      li   $t2, 1           # 1 is first and second Fib. number
      add.d $f0, $f2, $f4
      sw   $t2, 0($t0)      # F[0] = 1
      sw   $t2, 4($t0)      # F[1] = F[0] = 1
      addi $t1, $t5, -2     # Counter for loop, will execute (size-2) times
loop: lw   $t3, 0($t0)      # Get value from array F[n] 
      lw   $t4, 4($t0)      # Get value from array F[n+1]
      add  $t2, $t3, $t4    # $t2 = F[n] + F[n+1]
      sw   $t2, 8($t0)      # Store F[n+2] = F[n] + F[n+1] in array
      addi $t0, $t0, 4      # increment address of Fib. number source
      addi $t1, $t1, -1     # decrement loop counter
      bgtz $t1, loop        # repeat if not finished yet.
      la   $a0, fibs        # first argument for print (array)
      add  $a1, $zero, $t5  # second argument for print (size)
      jal  print            # call print routine. 
      li   $v0, 10          # system call for exit
      syscall               # we are out of here.
            
#########  routine to print the numbers on one line. 

      .data
space:.asciiz  " "          # space to insert between numbers
head: .asciiz  "Fibonecci Dizisi Elemanları:\n"
      .text
      
print:add  $t0, $zero, $a0  # starting address of array
      add  $t1, $zero, $a1  # initialize loop counter to array size
      la   $a0, head        # load address of print heading
      li   $v0, 4           # specify Print String service
      syscall               # print heading
out:  lw   $a0, 0($t0)      # load fibonacci number for syscall
      li   $v0, 1           # specify Print Integer service
      syscall               # print fibonacci number
      la   $a0, space       # load address of spacer for syscall
      li   $v0, 4           # specify Print String service
      syscall               # output string
      addi $t0, $t0, 4      # increment address
      addi $t1, $t1, -1     # decrement loop counter
      bgtz $t1, out         # repeat if not finished
      jr   $ra              # return

Yukarıdaki kodları Mars4_5 programında yazıp çalıştırdıktan sonra aşağıdaki gibi bir ekran çıktısı elde edeceğiz.

mips-fibonacci

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

Yorum Yap