0

単一の関数で、beq または bne によって別の場所に移動すると、新しいスタックが作成されるか、同じ関数内にまだいるため、スタックが継続していることを知りたいですか? 私の質問を例で説明させてください。テスト部分の前に、$t3 の内容をスタックにストロードしました。テストを行った後、それに到達したいと考えています。可能ですか? 前もって感謝します

   main:
       addi $sp, $sp, -1
       sb $t3,($sp)       #t3 stores value 1 and I stored it into stack by this line
       beq $t1 $t2 test   #assume it holds


   test:
      lb $t7,($sp)        # now I want to take 1 into $t7 here.Is it possible ??
      addi $sp, $sp, 1
      la $t7,($a0)
      li $v0,4 
      syscall 
      li $v0,10
      syscall
4

1 に答える 1

0

まず、関数を呼び出す場合は、分岐ではなくジャンプを使用します。ブランチは通常、ifs、whiles などに使用されます。jalrこの目的のために特別に作成された (ジャンプおよびリンクレジスタ)などの特別なジャンプ命令があります。これは、(関数から戻る$raことができるように) 戻りアドレスを格納するためです。

ご質問のとおり、もちろんアクセスできます。スタックは単なるメモリ領域です。しかし、実際に行っているのは、関数にパラメーターを渡すことです。MIPS ABI では、これ$aXはスタックではなくレジスタを介して行う必要があると規定されています。

編集:スタックについて混乱しているようです。MIPS のスタックの詳細については、こちらを参照してください (他のアーキテクチャでも非常に似ています)。

于 2013-11-03T22:34:46.177 に答える