MIPS汇编问题

MIPS汇编问题,mips,Mips,我正在做作业,我有几个问题 我是否必须始终将参数/返回值寄存器推送到堆栈中?如果答案是肯定的,我在哪里做?在调用方或被调用方过程中 我正在努力优化我的教学。我想知道我是否可以从 slt $t0, $a0, a1 #check if a<b beq $t0,$zero, ELSE #if $a>b, $t0 = 0, go to else addi $v0, $zero,1 #a<b, return 1 j exit #

我正在做作业,我有几个问题

  • 我是否必须始终将参数/返回值寄存器推送到堆栈中?如果答案是肯定的,我在哪里做?在调用方或被调用方过程中

  • 我正在努力优化我的教学。我想知道我是否可以从

    slt $t0, $a0, a1    #check if a<b
    beq $t0,$zero, ELSE     #if $a>b, $t0 = 0, go to else
    addi $v0, $zero,1       #a<b, return 1
    j    exit               #end if, jump to exit
    ELSE: addi $v1, $zero, 0 #a>b, return 0
    exit: jr  $ra           #return to address
    
    slt$t0,$a0,a1#检查ab$t0=0,转到其他
    addi$v0$0,1#ab,返回0
    出口:jr$ra#返回地址
    

    slt$v0,$a0,a1#如果ab,$v0=0
    jr$ra#返回地址
    

  • MIPS将寄存器分为保留和非保留类别。保留的寄存器包括
    $s0–$s7
    (因此它们的名称已保存)。非保留寄存器包括
    $t0–$t9
    (因此它们的名称是临时的)。函数必须保存和恢复它希望使用的任何保留寄存器,但它可以自由更改非保留寄存器

    被调用方必须保存和恢复任何保留的 它希望使用的寄存器。被呼叫者可以更改任何非保留项 登记册。因此,如果调用方在非保留寄存器中保存活动数据, 调用方需要在进行函数调用之前保存该非保留寄存器,然后需要在调用后恢复该寄存器

    由于这些原因,我们保留了 寄存器也称为被叫保存,非保留寄存器称为保留寄存器
    呼叫方保存。

    1)取决于呼叫约定。2) 在您的优化中,
    $v1
    发生了什么?我没有使用$v1
    slt  $v0, $a0, a1    #if a<b, $v0 =1 and if a>b, $v0 = 0
    jr   $ra             #return to address