Я пытаюсь применить свои навыки кодирования в MIPS (это мой первый раз когда-либо изучавший ассемблерный язык). Я написал этот код ниже, чтобы суммировать два входа пользователя, и это правильно. Тем не менее, код довольно длинный. Итак, есть ли способ оптимизировать этот код, чтобы он был короче? Мне нужны предложения. СпасибоСумма двух чисел в MIPS
.data
n1: .asciiz "enter your first number: "
n2: .asciiz "enter your second number: "
result: .asciiz "result is "
.text
#getting first input.
la $a0, n1
li $v0, 4
syscall
li $v0, 5
syscall
move $t0, $v0
#getting second input.
la $a0, n2
li $v0, 4
syscall
li $v0, 5
syscall
move $t1, $v0
#calculate and print out the result.
la $a0, result
li $v0, 4
syscall
add $t3, $t0, $t1
move $a0, $t3
li $v0, 1
syscall
#end program.
li $v0, 10
syscall
Я также написал программу для вычисления факториала. Есть ли лучшие способы сделать это?
.data
str: .asciiz "Enter a number: "
result: .asciiz "The result is: "
.text
la $a0, str
li $v0, 4
syscall
li $v0, 5
syscall
move $s0, $v0 # move N into s0
li $s2, 1 # c = 1
li $s1, 1 # fact = 1
LOOP:
blt $s0, $s2, PRINT # if (n < c) print the result
mul $s1, $s1, $s2 # fact = fact * c
add $s2, $s2, 1 # c = c + 1
j LOOP
PRINT:
la $a0, result
li $v0, 4
syscall
add $a0, $s1, $zero
li $v0, 1
syscall
li $v0, 10
syscall
Спасибо, когда пришло время использовать регистры $ t? – ln206
Используйте регистры $ t в функции, когда вам нужны временные переменные. Это позволяет избежать изменения регистров $ s, которые необходимо сохранить и восстановить, если функция изменит их. – markgz