user2747719
user2747719

Reputation: 1

Can't print contents of array

I am doing my homework and it says that I have to ask user for how many members they want to be present in the array. Then the user should enter the number in their array and then the program prints the array. I cannot print contents from my array in the console window.

Here is my code:

    .data

max:        .word -9999
array:      .space 12
message1:   .asciiz "Enter an integer:\n"
message2:   .asciiz "Specify how many numbers should be stored in the array (atmost 8): \n"
message3:   .asciiz "The array content is: \n"
message4:   .asciiz "The maximum is: \n"
message5:   .asciiz "They have the same maximum.\n"
message6:   .asciiz "The first array has a larger maximum.\n"
message7:   .asciiz "The second array has a larger maximum.\n"

.text
        .globl main

main:
    lw  $s1, max
    la  $s3, array
    li  $s2, 3
    la  $a0, message2
    li  $v0, 4
    syscall
    li  $v0, 5
    syscall
    move    $t0, $v0
    blt $t0, $s2, Read

Read:
    la  $a0, message1
    li  $v0, 4
    syscall
    li  $v0, 5
    syscall
    move    $t1, $v0
    sw  $t1, 0($s3)
    addi    $s3, $s3, 4  
    addi    $t0, $t0, -1 
    bgt $t0, $zero, Read
    j   Print

    #blt    $t0, $s2, Print

Print:
    la  $a0, message3,
    li  $v0, 4
    syscall
    jr  $ra     

Thanks for the help.

Upvotes: 0

Views: 105

Answers (1)

Michael
Michael

Reputation: 58507

When you enter Print you've got the end of the array plus 4 in $s3, so you could do something like this:

$s2 = ADDRESSOF(array)
while ($s2 != $s3) do
    print_int($s2[0])      // syscall 1
    print_character(' ')   // syscall 11
    $s2 += 4
end while

This is pseudo-code to illustrate the logic; I'll leave the actual assembly implementation to you since it's your assignment.


(By the way, this: la $a0, message3, is a typo. There shouldn't be a comma at the end of that line)

Upvotes: 1

Related Questions