皆さん、こんにちは。Mips を始めたばかりで、手順 (関数の宣言) を取得しましたが、その一部が理解できませんでした。理解を助ける人はいますか? 前もって感謝します。
mips の高級言語への移行。
int leaf_example (int g, int h, int i, int j) {
int f= (g+h)-(i+j); return f;}
Mips コード :
# g,h,i and j corresponds to $a0-$a3
# g,h,i and j corresponds to $a0-$a3
# adjust stack for 3 items # save register $t1,$t0 # and $s0 for # use afterwards
Sub $sp,$sp,-12
sw $t1,8($sp)
sw $t0,4($sp)
sw $s0,0($sp)
# Body of procedure
add $t0,$a0,$a1 # $t0=g+h
add $t1,$a2,$a3 # $t1=i+j
sub $s0,$t0,$t1 # $s0=(g+h)-(i+j)
# return the value of f, copy into value register
add $v0,$s0,$zero #$v0=$s0
# before returning, we need to restore values
lw $s0,0($sp) # restore register
lw $t0,4($sp) # $s0,$t0,$t1 for
lw $t1,8($sp) # caller.
add $sp,$sp,12 # release stack
jr $ra # jump back to calling routine
ここで、 「 # 3 つの項目のスタックを調整 # レジスタ $t1、$t0 # および $s0 を # 後で使用するために保存」の部分を行う必要があるのだろうかと思います 。それをせずに手順の本体から始めることはできますか?
第二に、なぜ私はしなければならないのadd $v0,$s0,$zero #$v0=$s0
ですか?結果を $s0 に既に挿入しましたか?
いくつかの答えが得られれば、私はとてもうれしいです。