この理解のために必要な前提知識は 2 つあります:
LD は指定アドレスにある値をレジスタへ格納する.
= のついた数値はリテラル.
1 つ目, LD は 指定したアドレスにある値 をレジスタへ格納する命令です.
決して 指定した値 をレジスタへ格納する命令 ではありません. よって:
というコードの意味は「メモリ上のアドレス 1 番地にある値を, GR1 へ格納する」であり,
8000 という値は たまたま 1 番地に 8000 という値があった ため結果的にそう動いたに過ぎません.
2 つ目, = のついた数値はリテラルです. リテラルについては同シミュレータに付属の仕様にも記載があります.
http://www.chiba-fjb.ac.jp/fjb_labo/casl/CASL2spec.html#2-5
2.5 機械語命令
機械語命令のオペランドは、次の形式で記述する。
r,r1,r2 GRは、記号GR0〜GR7で指定する。
x 指標レジスタとして用いるGRは、記号GR1〜GR7で指定する。
adr アドレスは、10進定数、16進定数、アドレス定数又はリテラルで指定する。
リテラルは、ひとつの10進定数、16進定数又は文字定数の前に等号(=)を付けて 記述する。CASLⅡは、等号の後の定数をオペランドとするDC命令を生成し、 そのアドレスをadrの値とする。
つまり, =1 という記述があるので, CASL2 アセンブラは DC 命令を自動的に追加し,
CASL2
1 LD GR1, DATA0001 ; DATA0001 というのは説明用に仮に付けた名前です
2 (中略)
3 RET
4DATA0001 DC 1 ; =1 の本体
のようなコードとしてアセンブルします.
よって, LD に DC 1 のあるアドレスが渡されて GR1 に 1 が格納されるのです.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/29 02:21