この理解のために必要な前提知識は 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