演習課題「二乗プログラム」
右の環境には、CASLで、二乗を計算するサブルーチンが作成してありますが、正常に動作しません。このファイルを修正して、正常に動作するようにしてください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、下記のコマンドを実行してください。
~$ pycasl squared.cas
~$ pycomet -d squared.com
~$ s
~$ s
……
#08:掛け算プログラムを実行しよう - その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