2015-01-20 2 views
1

Я пытаюсь применить свои навыки кодирования в 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 

ответ

1

программа выглядит хорошо, для использования временных регистров $t0,...,$t9 исключения. Эти регистры не гарантируются для сохранения при вызове другой функции или при выводе syscall. Регистры $s0,...,$s7 сохраняются во всех вызовах.

Необходимо заменить: на move $s0, $v0; move $t1, $v0 с move $s1, $v0 и add $t3, $t0, $t1 с add $s3, $s0, $s1.

+1

Спасибо, когда пришло время использовать регистры $ t? – ln206

+0

Используйте регистры $ t в функции, когда вам нужны временные переменные. Это позволяет избежать изменения регистров $ s, которые необходимо сохранить и восстановить, если функция изменит их. – markgz

Смежные вопросы