MIPS中两个数字的和

MIPS中两个数字的和,mips,Mips,我正在尝试在MIPS中练习我的编码技巧(这是我第一次学习汇编语言)。我在下面写这段代码是为了总结两个用户的输入,它是正确的。但是,代码很长。那么,有没有办法优化此代码,使其更短?我需要一些建议。谢谢 .data n1: .asciiz "enter your first number: " n2: .asciiz "enter your second number: " result: .asciiz "result is " .text #getting fi

我正在尝试在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
.data
str:.asciiz“输入一个数字:”
结果:.asciiz“结果是:”
.文本
洛杉矶$a0街
李$v0,4
系统调用
李$v0,5
系统调用
移动$s0,$v0#移动N到s0
li$s2,1#c=1
li$s1,1#事实=1
循环:
blt$s0,$s2,打印#如果(n
除了使用临时寄存器
$t0,$t9,
,程序看起来正常。在调用另一个函数或发出系统调用时,不能保证保留这些寄存器。
$s0,…$s7
寄存器在调用之间保留


您需要将:
移动$t0,$v0
替换为
移动$s0,$v0
<代码>使用
移动$t1、$v0
移动$s1、$v0和
添加$t3、$t0、$t1
使用
添加$s3、$s0、$s1

当需要临时变量时,在函数中使用$t寄存器。这样可以避免更改$s寄存器,如果函数更改这些寄存器,则必须保存和恢复这些寄存器。