、データへのポインタのサイズは通常32ビット、.word
あります。さらに、MIPSでは、データそのもののタイプ(サイズ)に応じてdata is aligned to certain addressesが必要です。
まずあなたがあなたのプログラムの.data
セクションで宣言ポインタとデータを見てみましょう:
msg: .word msg_data ; Declare a pointer: use the address of msg_data as value for msg
msg_data: .asciiz "Hello world" ; Declare a zero-terminated string in memory
msg
とmsg_data
はラベルまたはシンボリック名あなたのデータのための考えることができ、あなたが使用することができますこれらのラベルはコード内でデータを参照します。
あなたの文字列にポインタをロードする2つの異なる方法があります。最初の方法は間接である:またlui/ori
命令対のために、la
pseudo-instructionでマクロを見てとることが
la $a0, msg_data ; Load the address of 'msg_data' into $a0
:
la $t0, msg ; Load address of .word 'msg' into $t0
lw $a0, 0($t0) ; Load pointer from address in $t0+0, this loads the pointer stored in 'msg' which is the address of 'msg_data'
第二の方法は、直接文字列のアドレスをロードすることです32ビットの即値をレジスタにロードするために使用されます。その即値は住所ラベルの住所で、la
となります。つまり、の住所はです。
最初のポインタはメモリからポインタをロードします。ポインタはどこにでも置くことができ、変更可能です。2番目のポインタは文字列のアドレスを直接受け取ります。 – Jester