如何使用MIPS汇编语言计算时间?

时间:2017-01-09 20:15:33

标签: mips

所以目前我想计算计算所需的时间。我在$ 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

1 个答案:

答案 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