0% found this document useful (0 votes)
11 views3 pages

2 3

Uploaded by

mkhamaise71
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views3 pages

2 3

Uploaded by

mkhamaise71
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

add $sp, $zero, $imm, 1 # Set $sp = 1

sll $sp, $sp, $imm, 11 # Shift $sp left by 11 to get 2048


lw $a0, $zero, $imm, 0x100 # Load n from address 0x100 into $a0
lw $a1, $zero, $imm, 0x101 # Load k from address 0x101 into $a1
jal $ra, $imm, $zero, binom # Jump to binom subroutine
sw $v0, $zero, $imm, 0x102 # Store result in address 0x102
halt $zero, $zero, $zero, 0 # Halt the program
binom:
add $sp, $sp, $imm, -4 # Adjust stack pointer
sw $ra, $sp, $imm, 3 # Save return address
sw $s0, $sp, $imm, 2 # Save binom(n-1,k-1)
sw $a1, $sp, $imm, 1 # Save k
sw $a0, $sp, $imm, 0 # Save n
beq $imm, $a1, $a0, return # If n == k , return 1
beq $imm, $zero, $a1, return # If k == 0 , return 1
add $a1, $a1, $imm, -1 # k = k - 1
add $a0, $a0, $imm, -1 # n = n - 1
jal $ra, $imm, $zero, binom # Call binom(n-1,k-1)
add $s0, $v0, $zero, 0 # $s0 = binom(n-1,k-1)
add $a1, $a1, $imm, 1 # Restore k
jal $ra, $imm, $zero, binom # Call binom(n-1,k)
add $v0, $s0, $v0, 0 # $v0 = binom(n-1,k-1) + binom(n-1,k)
beq $imm, $zero, $zero, end # Jump to end
return:
add $v0, $zero, $imm, 1 # result = 1
end:
lw $a0, $sp, $imm, 0 #
Restore $a0
lw $a1, $sp, $imm, 1 #
Restore $a1
lw $s0, $sp, $imm, 2 #
Restore $s0
lw $ra, $sp, $imm, 3 #
Restore return address
add $sp, $sp, $imm, 4 #
Pop 4 items from stack
beq $ra, $zero, $zero # Return from subroutine
.word 0x100 10 # n = 10
.word 0x101 5 # k = 5

---------------------------------------
add $sp, $zero, $imm, 1 # Set $sp = 1
sll $sp, $sp, $imm, 11 # Shift $sp left by 11 to get 2048
lw $a0, $zero, $imm, 0x100 # Load n from address 0x100 into $a0
lw $a1, $zero, $imm, 0x101 # Load k from address 0x101 into $a1
jal $ra, $imm, $zero, binom # Jump to binom subroutine
sw $v0, $zero, $imm, 0x102 # Store result in address 0x102
halt $zero, $zero, $zero, 0 # Halt the program
binom:
add $sp, $sp, $imm, -4 # Adjust stack pointer
sw $ra, $sp, $imm, 3 # Save return address
sw $s0, $sp, $imm, 2 # Save binom(n-1,k-1)
sw $a1, $sp, $imm, 1 # Save k
sw $a0, $sp, $imm, 0 # Save n
beq $imm, $a1, $a0, return # If n == k , return 1
beq $imm, $zero, $a1, return # If k == 0 , return 1
add $a1, $a1, $imm, -1 # k = k - 1
add $a0, $a0, $imm, -1 # n = n - 1
jal $ra, $imm, $zero, binom # Call binom(n-1,k-1)
add $s0, $v0, $zero, 0 # $s0 = binom(n-1,k-1)
add $a1, $a1, $imm, 1 # Restore k
jal $ra, $imm, $zero, binom # Call binom(n-1,k)
add $v0, $s0, $v0, 0 # $v0 = binom(n-1,k-1) + binom(n-1,k)
beq $imm, $zero, $zero, end # Jump to end
return:
add $v0, $zero, $imm, 1 # result = 1
end:
lw $a0, $sp, $imm, 0 # Restore $a0
lw $a1, $sp, $imm, 1 # Restore $a1
lw $s0, $sp, $imm, 2 # Restore $s0
lw $ra, $sp, $imm, 3 # Restore return address
add $sp, $sp, $imm, 4 # Pop 4 items from stack
beq $ra, $zero, $zero # Return from subroutine
.word 0x100 10 # n = 10
.word 0x101 5 # k = 5
--------------------------------------------------
add $t2, $zero, $imm, 1 # $t2 = 1
out $t2, $zero, $imm, 2 # enable irq2
sll $sp, $t2, $imm, 11 # set $sp = 1 << 11 = 2048
add $t2, $zero, $imm, L3 # $t2 = address of L3
out $t2, $zero, $imm, 6 # set irqhandler as L3
lw $a0, $zero, $imm, 256 # get x from address 256
jal $ra, $imm, $zero, fib # calc $v0 = fib(x)
sw $v0, $zero, $imm, 257 # store fib(x) in 257
halt $zero, $zero, $zero, 0 # halt
fib:
add $sp, $sp, $imm, -3 # adjust stack for 3 items
sw $s0, $sp, $imm, 2 # save $s0
sw $ra, $sp, $imm, 1 # save return address
sw $a0, $sp, $imm, 0 # save argument
add $t2, $zero, $imm, 1 # $t2 = 1
bgt $imm, $a0, $t2, L1 # jump to L1 if x > 1
add $v0, $a0, $zero, 0 # otherwise, fib(x) = x, copy input
beq $imm, $zero, $zero, L2 # jump to L2
L1:
sub $a0, $a0, $imm, 1 # calculate x - 1
jal $ra, $imm, $zero, fib # calc $v0=fib(x-1)
add $s0, $v0, $zero, 0 # $s0 = fib(x-1)
lw $a0, $sp, $imm, 0 # restore $a0 = x
sub $a0, $a0, $imm, 2 # calculate x - 2
jal $ra, $imm, $zero, fib # calc fib(x-2)
add $v0, $v0, $s0, 0 # $v0 = fib(x-2) + fib(x-1)
lw $a0, $sp, $imm, 0 # restore $a0
lw $ra, $sp, $imm, 1 # restore $ra
lw $s0, $sp, $imm, 2 # restore $s0
L2:
add $sp, $sp, $imm, 3 # pop 3 items from stack
add $t0, $a0, $zero, 0 # $t0 = $a0
sll $t0, $t0, $imm, 16 # $t0 = $t0 << 16
add $t0, $t0, $v0, 0 # $t0 = $t0 + $v0
out $t0, $zero, $imm, 10 # write $t0 to display
beq $ra, $zero, $zero, 0 # and return
L3:
in $t1, $zero, $imm, 9 # read leds register into $t1
sll $t1, $t1, $imm, 1 # left shift led pattern to the
left
or $t1, $t1, $imm, 1 # lit up the rightmost led
out $t1, $zero, $imm, 9 # write the new led pattern
add $t1, $zero, $imm, 255 # $t1 = 255
out $t1, $zero, $imm, 21 # set pixel color to white
add $t1, $zero, $imm, 1 # $t1 = 1
out $t1, $zero, $imm, 22 # draw pixel
in $t1, $zero, $imm, 20 # read pixel address
add $t1, $t1, $imm, 257 # $t1 += 257
out $t1, $zero, $imm, 20 # update address
out $zero, $zero, $imm, 5 # clear irq2 status
reti $zero, $zero, $zero, 0 # return from interrupt
.word 256 7
------------------------------------------------

the register that you weel use is $v1 you have $a0 to $a3 and $t0 to $t2 and $s0 to
$s2 and $v0 $imm $zero $gp $sp $ra these are all the registers you well see dont
add any thing from you

You might also like