| | 36 | = 単純な代入文 = |
| | 37 | 定数の代入文はor immediate命令とstore word命令の組み合わせで実現できます。 |
| | 38 | |
| | 39 | 例えばC言語のコード |
| | 40 | {{{ |
| | 41 | A = 15; |
| | 42 | }}} |
| | 43 | |
| | 44 | は、擬似的なアセンブリプログラム |
| | 45 | {{{ |
| | 46 | $8 = 15; |
| | 47 | A = $8 |
| | 48 | }}} |
| | 49 | に置き換えることができます。 |
| | 50 | |
| | 51 | 各行を実行可能な命令に置き換えると: |
| | 52 | {{{ |
| | 53 | ori $8, $0, 15 |
| | 54 | sw $8, A |
| | 55 | }}} |
| | 56 | のようなプログラムに置き換えることができます. |
| | 57 | |
| | 58 | == 考察事項 == |
| | 59 | * この2つのアセンブラ命令でA=15が正しく実現できているか考えなさい。 |
| | 60 | * なぜ$0が使われるのか? |
| | 61 | * この方法で扱える代入文の右辺の定数の範囲を考えなさい。 |
| | 62 | * 符号付き32bitの範囲の定数の代入文を実装する方法を考えなさい。 |
| | 63 | |
| | 64 | == メモリの初期化 == |
| | 65 | 代入文「A = 15;」は、Aへの代入としてプログラム開始から最初に実行され、一度しか実行されない場合 |
| | 66 | {{{ |
| | 67 | .data |
| | 68 | A: .word 15 |
| | 69 | }}} |
| | 70 | とすることで、アセンブリプログラムによるメモリ領域の初期化によっても実現できます。 |
| | 71 | しかし、この初期化を含んだプログラムをサブルーチンに用いる場合、一回目の実行でAの値が変更されてしまうと、 |
| | 72 | 2回目以降の呼び出しにおいてAは15以外の値を持つ可能性があります。 |
| | 73 | この様な場合、上記のようにori命令とsw命令の組み合わせで代入文を実現します。 |
| | 74 | |
| | 75 | = 例題1 = |
| | 76 | |