#07:掛け算プログラムを作ろう - その1
これまでのまとめとして、掛け算プログラムを作ります。まずは、簡単な方法で作ってみましょう。
$ pycasl multi.cas
$ pycomet multi.com
掛け算は、足し算の繰り返し
10進数:3 x 4 > 3 + 3 + 3 + 3
2進数:11 x 100 > 11 + 11 + 11 + 11
1. 計算結果を初期化
2. 掛けられる数を用意する
3. 掛ける数を用意する
4. 計算結果に、掛けられる数を足す
5. 掛ける数を1減らす
6. ゼロでなかったら、4にもどる
7. 終了
; 掛け算1
MAIN START
LAD GR0, 0
LD GR1, DATA1
LD GR2, DATA2
CALL MULTI
ST GR0, ANS
RET
DATA1 DC 03
DATA2 DC 04
ANS DS 1
END
MULTI START
RPUSH
LOOP ADDA GR0, GR1
SUBA GR2, =1
JNZ LOOP
RPOP
RET
END
数値の前に「=」を書くと、CASLⅡがDC命令を自動的に生成します。そして、この数値をデータ領域に配置します。リテラル表記で記述したコードでは、そのアドレスからデータを読み込みます。 SUBA GR2, =1
データ領域は、メインルーチンとサブルーチンで、それぞれ記述します。CASLⅡでは、自分のコードのデータ領域だけアクセスできます。つまり、メインルーチンで、DATA1やDATA2にアクセスできますが、サブルーチンからDATA1にアクセスできません。このおかげで、ルーチンでラベル名が重複できます。
CASLⅡ- 乗算の計算
http://masudahp.web.fc2.com/casl2/casl2210.html
アセンブリ言語CASLⅡでの乗算のやり方
https://arcanum.work/contents?id=21
CASLIIアセンブラ & シミュレータ PyCASL2 & PyCOMET2
http://www.image.med.osaka-u.ac.jp/member/nakamoto/pycasl2/index.html
CASL - Wikipedia
https://ja.wikipedia.org/wiki/CASL
アセンブラ言語CASL2の仕様
https://www.chiba-fjb.ac.jp/fjb_labo/casl/CASL2spec.html#2-3
システムCOMET2の仕様
https://www.chiba-fjb.ac.jp/fjb_labo/casl/COMET2spec.html
CPU - コンピュータの基礎知識 | ++C++; // 未確認飛行 C
https://ufcpp.net/study/computer/CPU.html