Matthew Faltys
5 years ago
commit
5fe8381c1f
1 changed files with 63 additions and 0 deletions
@ -0,0 +1,63 @@
|
||||
# Declare main as a global function |
||||
.globl main |
||||
|
||||
# All program code is placed after the |
||||
# .text assembler directive |
||||
.text |
||||
|
||||
# The label 'main' represents the starting point |
||||
main: |
||||
la $a0, arr # $a0 based address of array |
||||
li $a1, 1 # $a1 number to be found (checked) - change the value (7) to test |
||||
li $a2, 6 # $a2 max array index to be checked - change the value (3) to test |
||||
li $s0, 0 # set counter to 0 |
||||
jal lookup # hop to lookup function |
||||
# print out result |
||||
li $v0, 1 # print_int syscall code = 1 |
||||
move $a0, $s0 # load integer into $ao |
||||
syscall |
||||
j exit # exit out of program |
||||
|
||||
# lookup (int arr[], int num, int cnt). |
||||
# arr[] = 5 2 1 4 6 3 |
||||
# 1. lookup (arr, 5, 3) -> 0 (the index of ‘5’ in the array) |
||||
# 2. lookup (arr, 1, 3) -> 2 (the index of ‘1’ in the array) |
||||
# 3. lookup (arr, 7, 6) -> -1 (‘7’ is not found in the array) |
||||
# 4. lookup (arr, 4, 3) -> -1 (the last parameter indicates to check only first 3 values in the |
||||
lookup: |
||||
addi $t0, $a2, 1 # store one higher value |
||||
|
||||
# loop to find index |
||||
beq $s0, $t0, setoob # jump to oob function if we overrun array |
||||
|
||||
# find current array value |
||||
addi $t1, $s0, 0 # load index into $t1 |
||||
sll $t1, $t1, 2 # multiply the offset |
||||
add $t1, $t1, $a0 # add the offset to the base address |
||||
lw $t2, 0($t1) # get current array value: aka arr[$s0] |
||||
|
||||
beq $a1, $t2, setval # check if this is the value we are looking for |
||||
addi $s0, $s0, 1 # incriment counter |
||||
j lookup # back to beginning of loop |
||||
|
||||
# set value function |
||||
setval: |
||||
jr $ra |
||||
|
||||
# set out of bounds function |
||||
setoob: |
||||
li $s0, -1 # index is oob, set to -1 |
||||
jr $ra # jump back to ra in main |
||||
|
||||
exit: |
||||
|
||||
|
||||
|
||||
# All memory structures are placed after the |
||||
# .data assembler directive |
||||
.data |
||||
arr: .word 5, 2, 1, 4, 6, 3 # change array to test |
||||
#arr: .word 5, 2, 1, 4, 6, 3 # change array to test |
||||
str_found: .asciiz "found" |
||||
str_not_found: .asciiz "not_found" |
||||
nl: .asciiz "\n" |
Loading…
Reference in new issue