Печать массива чисел с плавающей запятой в 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 вместо системного вызова 10 (конец программы)?   -  person RobertB    schedule 05.12.2013
comment
У меня проблемы на самом деле ничего не говорит. Какие проблемы у вас возникли точно?   -  person Michael    schedule 05.12.2013
comment
Наш профессор не научил нас использовать системный вызов 10 для завершения программы, но мы просто завершаем программу с помощью jr $ra. Я использую переменную temp и max, потому что мы запрашиваем у пользователя только 12 чисел с плавающей запятой, и поэтому это работает с числами с плавающей запятой, а также использую эту переменную для ввода чисел с плавающей запятой в массив.   -  person user2747719    schedule 05.12.2013
comment
Я действительно не знаю, как напечатать массив чисел с плавающей запятой?   -  person user2747719    schedule 05.12.2013
comment
Считайте число с плавающей запятой из текущей позиции в массиве в $f12. Выполните системный вызов 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