מבנה המחשב תרגיל 4

bennyassembly, mips assembly, מבנה המחשבLeave a Comment

הגדר פונקציה (בעלת תווית גלובאלית) שמקבלת בתור פרמטר מיקום של תחילת רשימה
המכילה מספרים בגודל מילה ואת מספר האברים ברשימה.
הפונקציה מחזירה 1 אם הרשימה היא סדרה חשבונית ואחרת היא מחזירה 0

הגדר פונקציה (בעלת תווית גלובאלית) שמקבלת בתור פרמטר מיקום של תחילת רשימה
המכילה מספרים בגודל מילה ואת מספר האברים ברשימה.
הפונקציה מחזירה 1 אם הרשימה היא סדרה הנדסית ואחרת היא מחזירה 0 .
הנחות לגבי הסדרה ההנדסית:
– סידרה הנדסית היא רק סדרה הנדסית עולה.
– מנה של סידרה הנדסית היא מספר שלם.

.data
str1: .asciiz "arithmetic progression "
str2: .asciiz "\ngeometric  progression "
array: .byte 1,1,1,1,1   # initialize data in block1.
.text
li $a1 5                   # initialize the size 
li $t9 1                   # to compare bool functions

la $a0 array                #$a0->word[0]   
addi $a3 $a0 1 

lb $t1 ($a0)               # t1 = array[0]
lb $t2 ($a3)               # t2 = array[1]

div $t2 $t1               # Lo = t1*t2
mflo $s7                   # s7 = Lo
li $a2 2                   # prapre index if nessesey to go to geometric progression lable

sub $s0 $t2 $t1            # s0 = t2-t1 
addi $a0 $a0 1             # a0++
addi $a3 $a0 1             # a3++

li $t4 3

loop1:

beq $t4 $0 finish_a      # the index is 0 (finish)
addi $t4 $t4 -1        #  index--  
lb $t1 ($a0)           # t1 = array[i]
lb $t2 ($a3)           # t2 = array[i+1]
sub $s1 $t2 $t1        # s1 = t2-t1 
beq $s0 $s1 even       # if the difference is the same thay even
j notEevn

even:
addi $a0 $a0 1             #index++
addi $a3 $a0 1             # index++
j loop1

finish_a:             # if we are its nean all the difference are even -->  arithmetic progression!!
li $v0,4            # code for print
la $a0 ,str1        # load string adress to $a0
syscall             # pirnt "arithmetic progression"
la $a3 array 
lb $t1 ($a3)
add $a0 ,$0,$t1 
li $v0,1
syscall

li $a0, ' '     # for spasec between the numbers
li $v0, 11
syscall

add $a0 ,$0,$s1 
li $v0,1
syscall


notEevn:  # is not arithmetic so chack if is geometric

la $a0 array         # inithilaze the adresses again        
addi $a3 $a0 1 
li $t4 3
loop2:
beq $t4 $0 finish_g      # the index is 0 (finish)
addi $a0 $a0 1
addi $a3 $a3 1
lb $t1 ($a0)           # t1 = array[i]
lb $t2 ($a3)           # t2 = array[i+1]
div $t2 $t1
mflo $t8
addi $t4 $t4 -1
beq $t8 $s7 loop2
j end





finish_g:
li $v0,4            # code for print
la $a0 ,str2        # load string adress to $a0
syscall             # pirnt " geometric  progression"
la $a3 array 
lb $t1 ($a3)
add $a0 ,$0,$t1 
li $v0,1
syscall

li $a0, ' '     # for spasec between the numbers
li $v0, 11
syscall
addi $a3 $a3 1
lb $t2 ($a3)
div $t2 $t1
mflo $s7
add $a0 ,$0,$s7 
li $v0,1
syscall




end:



כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *