私はスタックの上にそれらを押し込むことによって4以外の引数を使用するように関数をプログラムしようとしています(私のバージョンのmipsは$ a0- $ a3しかサポートしません)。ここでは、メインの私のコード(抜粋)は次のとおりです。40の一時的な値を設定します複数のmips引数を使用する> 4
li $t0,40 #temp value for our 5th arg.
addi $sp, $sp, -4 #decrement stack pointer by 4
sw $t0, 0($sp) #save the value of $t0 on the stack.
jal printf
は、スタック上のスペースを与え、それを保存します。私の機能が呼び出されます。
lw $t0, 0($sp)
addi $sp, $sp, 4
move $a0,$t0
li $v0, 1
syscall
...それだけで出力します:これは働いていたかどうかを確認するための試験として、関数の内部で、私はその保存されたレジスタの対応にこれらの一時引数$ A0- $ A3を移動すると、私はこのコードを持っています0と40でないので、私は間違っている何かをしています。すべての支援を大幅に最も一般的な32ビットMIPS calling conventionで
レジスタにある引数のためにスタック上にスペースが予約されるのはなぜですか? Wikipediaのページによれば、引数5と4は1から4までではなく、スタックに渡されます。 – blackcompe
これは呼び出し規約がどのように定義されているかを示し、呼び出されたルーチンが引数をスタック上の既知の場所に保存できるようにします。 wikiページが不完全です。 http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdfを参照してください。 – markgz
私はあなたが意味するものを見て、あなたは正しいです。 – blackcompe