【发布时间】:2019-04-08 01:46:01
【问题描述】:
我正在尝试使用 MIPS 将浮点数列表存储在动态数组中。程序提示用户输入浮点数,然后在接收输入的同时循环。
对于整数,我知道如何做到这一点,但我很难让它与浮点数一起使用。这是我现在拥有的。
这将获取要输入的浮点数并相应地分配内存:
#get number of floats to be entered
li $v0, 5
syscall
move $t0, $v0 #t0 is number of floats
#allocate the memory required
sll $a0, $v0, 2
li $v0, 9
syscall
这是我收集花车的循环:
move $t1, $zero #idx for loop
move $t2, $v0 #t2 is address of dynamic memory
loop:
bge $t1, $t0, done #idx check
li $v0, 4
la $a0, prompt #prompt user input
syscall
# read in and store int
li $v0, 6
syscall
sw $v0, 0($t2)
addi $t1, $t1, 1 # ++idx
addi $t2, $t2, 4 #add four to move to next memory location
j loop
done:
对于输入的任何浮点数,此处的输出仅为 0.0,而它应该是用户输入的数字。我想我一定是把它们存储错了。有没有比这更好的方法来引入花车?
【问题讨论】:
-
v0是系统调用存放读取结果的寄存器吗?这是什么系统?如果你一读取就打印数字,输出是什么? -
v0 应该是系统调用放入结果的变量。这是 MIPS,在 MARS 模拟器上运行。在 MARS 中,您可以看到寄存器值,它似乎根本没有将浮点数存储在 v0 中。
-
MIPS 是指令集架构的名称。那只是“硬件”。它需要软件来做任何事情。 MARS 是一个模拟器,per its documentation 提供一些基本的类似操作系统的服务。因此,
syscall服务是 MARS 的一部分,而不是 MIPS。如答案所述,syscall#6 在f0中返回结果,而不是v0。 -
啊,明白了,谢谢!
标签: arrays floating-point mips