Отпечатване на масив от float числа в MIPS

Аз съм нов потребител на MIPS и имам проблеми с отпечатването на масив от числа с плаваща запетая, които вземам от потребителя, а също така имам проблеми с намирането на най-често повтарящото се число с плаваща запетая.

Ето кода, в който мога да приема въведеното от потребителя, но не мога да отпечатам масива.

    #data declarations: declare variable names used in program, storage allocated in RAM

                         .data
 max:            .word 12
 temp:           .word 1
 num:            .space 96
 input1:         .asciiz "Enter a number:\n" #prints the statement 
 output1:        .asciiz "The number that is repeated more often than any other is "
 output2:        .asciiz " with "
 output3:        .asciiz " repititions.\n"
 output4:        .asciiz "The array contains the following: \n"

                    .text 

                    .globl    main    

 main:
 lw     $t1, temp
 lw     $t2, max


 Loop:
 la     $a0, input1   # $a0 = address of input1
 li     $v0, 4          # $v0 = 4  --- this is to call print_string()
 syscall
 li     $v0, 6
 syscall
 la     $t0, num
 s.s    $f0, 0($t0)
 addi   $t0, $t0, 8
 addi   $t1, $t1, 1
 ble    $t1, $t2, Loop

 la         $a0, output4
 li     $v0, 4
 syscall
 l.s    $f12, 0($t0)
 li     $v0, 2
 syscall
 jr     $ra

person user2747719    schedule 05.12.2013    source източник
comment
Бихте ли изяснили определението за проблеми? Когато преминавате на една стъпка през кода си в емулатор като MARS, кой ред не прави това, което очаквате?   -  person RobertB    schedule 05.12.2013
comment
Моят код приема информация от потребителя перфектно, но се сблъсквам с проблеми, когато се опитвам да отпечатам масива, който съдържа плаващите числа.   -  person user2747719    schedule 05.12.2013
comment
Ето някои неща, които ме карат да се почеша по главата. temp и max са неинициализирана памет, така че когато заредите съдържанието на тази памет в $t1 и $t2, резултатите могат да бъдат произволни. Какво се опитваш да направиш? Освен това, това не изглежда като функция, която извиквате от някъде другаде, така че защо завършва с jr $ra вместо syscall 10 (крайна програма)?   -  person RobertB    schedule 05.12.2013
comment
Изправен съм пред проблеми всъщност не казва нищо. Какви проблеми точно имате?   -  person Michael    schedule 05.12.2013
comment
Нашият професор не ни е учил да използваме syscall 10 за прекратяване на програмата, но ние просто приключваме програмата с jr $ra. Използвам променливите temp и max, защото искаме от потребителя само 12 числа с плаваща запетая и това работи върху числата с плаваща запетая и също така използва тези променливи за въвеждане на числата с плаваща запетая в масива.   -  person user2747719    schedule 05.12.2013
comment
Наистина не знам как да отпечатам масив от числа с плаваща запетая?   -  person user2747719    schedule 05.12.2013
comment
Прочетете float от текущата позиция в масива в $f12. Изпълнете syscall 2, за да го отпечатате. Повторете.   -  person Michael    schedule 05.12.2013
comment
можете ли да ми покажете как да отпечатам масив от цели числа, като използвам регистрите, които вече съм дефинирал в моята програма, отколкото би било много полезно.   -  person user2747719    schedule 06.12.2013


Отговори (1)


.data
    max:            .word 3
    temp:           .word 1
    num:            .space 96
    input1:         .asciiz "Enter a number:\n" #prints the statement 
    output1:        .asciiz "The number that is repeated more often than any other is "
    output2:        .asciiz " with "
    output3:        .asciiz " repititions.\n"
    output4:        .asciiz "The array contains the following: \n"

.text

.globl    main    
 main:
    lw     $t1, temp # loop counter
    lw     $t2, max  # upper bound
    la     $t0, num  # address of array

 Loop:
    # print input prompt
    la     $a0, input1
    li     $v0, 4     
    syscall

    # get value from the user
    li     $v0, 6
    syscall

    # move user provided value from $f0 to array
    s.s    $f0, 0($t0)

    # move to the next position in the array, increment loop counter
    addi   $t0, $t0, 4
    addi   $t1, $t1, 1
    ble    $t1, $t2, Loop

    # restore loop counter, and array address for printing
    lw $t1, temp
    la $t0, num

    # print output prompt
    la $a0, output4
    li $v0, 4
    syscall
print_loop:
    # print number from the array
    l.s    $f12, 0($t0)
    li     $v0, 2
    syscall

    # print space
    la $a0, 32
    li $v0, 11
    syscall

    # increment loop counter and move to next value
    addi $t1, $t1, 1
    addi $t0, $t0, 4
    ble $t1, $t2, print_loop

Ето как работи:

Enter a number:
2.3
Enter a number:
3.14
Enter a number:
5.55
The array contains the following: 
2.3 3.14 5.55 
person Asterisk    schedule 07.12.2013