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.
Sonraki Yazı >>