Nessya Nakache
Nessya Nakache

Reputation: 11

How to count the number of words and print the result in mips?

So I am fairly new to mips and am trying to do a hmwk. The exercise is to create a block of words with 0 as the last word , to count them knowing we don't consider the last element 0 and print out the result. Here is my code for the moment

.data
blockOfWords: .word 12,43,549,7,60,0

.text
la $a0, blockOfWords      #putting address of blockOfWords in $a0
loopStart: sll $t1, $s3,2 #iterates thru blockOfWords by jumping by 4 bytes, $t1=4*i
add $t1,$t1,$a0           #we increment the address by four so as to advance in the array after every iteration
lw $a1, 0($t1)            #$a1=blockOfWOrds[i]
beq $a1,$zero, Exit       #if the value in $a1[i]==0, exit the loop
addi $s0,$s0,1            #else, increment by one the cnt=$s0
j loopStart               #and continue looping thru blockOfWords 
Exit:
#how do i print the result?

Upvotes: 0

Views: 453

Answers (1)

ConnerWithAnE
ConnerWithAnE

Reputation: 1158

So instead of doing a shift left logical it is a lot easier to up the memory address in the array

In this way the lw $a1, 0($a0) is just grabbing the beginning of the word it is then incremented by 4 after a check for the 0. This makes the function much simpler and easier to read.

.data
    blockOfWords: .word 12,43,549,7,60,0

.text
    main:
        la $a0, blockOfWords    # Load beginning address into $a0  
    loopStart:           
          
        lw $a1, 0($a0)          # load the value at the beginning of $a0 into $a1
        beq $a1,$zero, exit     # Check if $a1 is 0, if so jump to exit
        addi $s0,$s0,1          # Add one to the count
        addi $a0, $a0, 4        # Up the intial index of the array by 4, up one word
        j loopStart             # Re-loop
    exit:
        li $v0, 1               # Load the value of 1 into the $v0 register
        la $a0, ($s0)           # Load the counter into the $a0 address
        syscall
    
        li $v0, 10              # A value 10 syscall to indicate end of program
        syscall

Upvotes: 1

Related Questions