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