所以目前我想计算计算所需的时间。我在$ v0中使用30,但问题是每次打印所花费的时间,显示的数字很大,与之无关。那我怎么解决这个问题呢? 任何帮助表示赞赏
示例代码
.data
inputNumber: .asciiz "Input an integr: "
newLine: .asciiz "\n"
done1: .asciiz "loop completed\n"
.text
main:
#print inputNmber string
li $v0, 4
la $a0, inputNumber
syscall
#read integer
li $v0, 5
syscall
#move int to another register
move $t0, $v0
# get starting time
li $v0, 30
syscall
# store it in another place
move $a0, $v0
#while loop counter
addi $t1, $zero, 1
# while loop
while:
bgt $t1, $t0, done
#print inputNmber int
li $v0, 1
move $a0, $t0
syscall
#print new line
li $v0, 4
la $a0, newLine
syscall
addi $t1, $t1, 1
j while
#Exit the program
li $v0, 10
syscall
done:
# get finishing time
li $v0, 30
syscall
# store it in another place
move $a1, $v0
#printing done1
li $v0, 4
la $a0, done1
syscall
# Subtract time values
sub $t2, $a1, $a0
#print time taken
li $v0, 1
move $a0, $t2
syscall
# exit program
li $v0, 10
syscall
答案 0 :(得分:1)
首先,从给出系统时间的syscall
返回后,将结果存储在$a0
中。但是,在循环内部,您将删除$a0
:
#print inputNmber int
li $v0, 1
move $a0, $t0
此外,通过查看syscall表,您可以看到此系统调用将时间值设置为:
$a0 = low order 32 bits of system time
$a1 = high order 32 bits of system time
而不是$v0
。因此,您应该考虑到这一点来调整move
指令和减法
注意:如果您使用的是模拟器,此sycall 非与SPIM兼容,只有MARS
系统调用的来源:https://courses.missouristate.edu/KenVollmar/mars/Help/SyscallHelp.html