Добрый день, помогите пожалуйста разобраться только неделю назад начали изучать Ассемблер и тут дали простую задачку а я пыталась сделать но что то не получается, программка должна быть без рекурсии и без регистров а потом тоже самое с использованием регистров и рекурсии, а я даже первую часть не знаю как сделать как прибавить (-1)^n? Извините за глупые вопросы F0=0, F1 = 1 Fn=Fn-1 +Fn-2 +(-1)^n | Код |
.data num: .word 0 : 12 # "array" of 12 words to contain fib values size: .word 12 # size of "array" .text la $t0, num # load address of array la $t5, size # load address of size variable lw $t5, 0($t5) # load array size li $t2, 0 # 1 is first and second number li $t3, 1 li $t4, -1 li $t5, 1 add.d $f0, $f2, $f4 sw $t2, 0($t0) # F[0] = 0 sw $t3, 4($t0) # F[1] = F[0] = 1 sw $t4, 5(&t0) 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, num # 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 .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) li $v0, 1 # specify Print Integer service syscall 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
|
|