- 2.9 32ビットの即値およびアドレスに対するMIPSのアドレシング方式
- そろそろ難しくなってくるような。。。
- 32ビット定数や32ビットアドレスを扱うのは、すべての命令を32ビットで扱うという原則をやぶるが、あると便利。
- まず、その一般的な対処方法。
- lui: load upper immediate : 指定したレジスタに、定数の上位16ビットを入れる。
- これに続き通常の命令を実施することによって、下位16ビットが設定されるとともに、処理が実施される。
- この分割ロード処理は、コンパイラまたはアセンブラが実施する。
- MIPSではアセンブラが実施する。
- lui: load upper immediate : 指定したレジスタに、定数の上位16ビットを入れる。
- beq,bneの分岐先アドレス領域は2^16しかない。これは小さい。
- 分岐先PC値 = とあるレジスタに格納したベース値 + beqなどの分岐先アドレス領域での指定値、とする。
- ベース値は、分岐する命令のPC値+4 (次の命令) とする。
- 命令は全てワード(4バイト)なので、分岐命令では語アドレス指定とする。これで4倍遠くまで分岐できる。
- このやり方を、PC相対アドレシング、という。
- なお分岐先アドレスが現在PC値から2^16以上遠い場合は、アセンブラがJ命令を使ったものに展開してくれる。
- アドレシングモード一覧
- レジスタ・アドレシング
- ベース相対アドレシング
- 即値アドレシング
- PC相対アドレシング
- 疑似直接アドレシング
- レジスタ・アドレシング
- そろそろ難しくなってくるような。。。
とりあえず、終了。。。
あとはまた今度。
0 件のコメント:
コメントを投稿