See below.
Perhaps you added one to the base register, rather than four.
The base register $9 needs to be increased by the size of a full word, four.
Now work on getting the loop correct.
The beq
instruction
branches out of the loop if the count
has reached the end of the array.
## Registers: ## $8 --- count $12 -- sum of negative integers ## $9 --- pointer to the array entry $13 -- sum of positive integers ## $10 -- current array entry $14 -- pos. or neg. flag ## $11 -- sum of all integers $15 -- SIZE of the array main: ori $8,$0,0 # count = 0 ori $11,$0,0 # sum = 0 ori $12,$0,0 # neg = 0 ori $13,$0,0 # pos = 0 lui $9,0x1000 # point at SIZE lw $15,0($9) # get SIZE addiu $9,$9,4 # point to first array entry # while count < SIZE do loop: beq $____,$____,done sll $0,$0,0 # branch delay addiu $8,$8,____ # count++ addiu $9,$9,____ # point at next entry j loop sll $0,$0,0 # branch delay done: sll $0,$0,0 # target for branch .data size: .word 17 array: .word 12, -1, 8, 0, 6, 85, -74, 23, 99, -30, 30, 95, 4, 7, 10, 28, 14
At the bottom of the loop, the count is incremented and the base register is move to the next array entry.