Так что в настоящее время я хочу рассчитать время, затраченное на расчет. Я использую 30 в $ v0, но проблема заключается в том, что каждый раз печатается время, отображается огромное количество, которое не связано. так как я могу исправить эту проблему? любая помощь ценитсяКак получить время для расчета с использованием языка ассемблера MIPS?
Пример кода
.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
Вы можете объяснить часть «$ a0 = low order ...»? По-видимому, нет никаких объяснений этому в справочном листе. Спасибо – aspire29
Временная метка, возвращаемая syscall, представляет собой 64-битное значение, так как регистры MIPS имеют ширину всего 32 бита, вам нужно 2 для хранения текущего времени (возвращаемое значение равно миллисекундам). Приведем пример: Текущее время с эпохи - 1484002833406 миллисекунд, то есть в шестнадцатеричном формате 0x159857633FE. Итак, после syscall '$ a0' будет содержать 0x00000159 (4 байта | 32 разряда высокого порядка), а' $ a1' будет содержать 0x857633FE (младшие разряды 32 бит) – Omar
, если возможно, вы можете показать пример того, как получить время? Я все еще не могу заставить код работать. благодаря – aspire29