2012-04-25 29 views
3

私は一定量のメモリを割り当てており、プログラムの.dataセクションで宣言した変数にこのメモリの場所を割り当てたいと思います。私は変数にメモリの場所を割り当てる方法を知っていますが、いったんそれを行うと、その変数を使って割り当てられたメモリにアクセスする方法はありますか?MIPSのレジスタにアドレスを格納する

答えて

3

私が問題を正しく理解している場合は、la(ロードアドレス)命令を使用してアドレスをレジスタに取得することをお勧めします。その後、lw(ロード・ワード)とsw(ストア・ワード)命令を使用してデータを操作します。たとえば、だから、コードの内部ブロックで、あなたがメモリ位置として$t0(またはそのことについては、他のレジスタ)を扱うことが確認でき、適切それに取り組む

.data 
tmpval: .word 5 

__start: 
    sub $sp, $sp, 12 
    sw $ra, 0($sp) # Return addy 
    sw $t0, 4($sp) 
    sw $t1, 8($sp) 

    la $t0, tmpval 
    lw $t1, 0($t0) # $t1 == tmpval == 5 
    li $t1, $2  # $t1 == 2 
    sw $t1, 0($t0) # tmpval == 2 

    lw $ra, 0($sp) 
    lw $t0, 4($sp) 
    lw $t1, 8($sp) 
    add $sp, $sp, 12 
    jr $ra 

コード

次の作品を検討してください。

+0

あなたのスタックは、ラスト・イン・ファースト・アウト(LIFO)としてコンベンションに従うべきだと思います。 –

4

MIPSには、ロード・ワード(lw)、ロード・ハーフワード(lh)、ロード・バイト(lb)、ストア・ワード(sw)、ストア・ハーフ・ワード(sh)、およびストア・バイトsb)を挙げておきます。 $ tを登録するにはレジスタ$ sのプラスCで開催されたメモリ位置から単語をロードします

lw $t, C($s) 

:彼らはすべてのメモリ位置からロードから一例であるので、ここと同じ種類の構文を使用します。すなわち$ T = [$ S + C]格納するための同様

:$ SプラスC.すなわち[$ S + Cのメモリ位置にレジスタ$ Tのワードを格納する

sw $t, C($s) 

] = $ t

関連する問題