アセンブラCASL2で「2進数の乗算」を作ってみた

この記事では、駄菓子屋でチョコレートを買う例題を通して、「足し算とシフト」での掛け算が学べます。アセンブラの定番中の定番!!
基本情報技術者試験で頻出なので、実際の過去問のリンクも貼りました。
 平成29春アセンブラ過去問

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告

2020年からの基本情報技術者試験は、
言語とアルゴリズムの配点が高くなります。
なので、プログラミング未経験の事務員の私は、
非常に焦っています。

そこで、疑似言語によるアルゴリズムを
CASL2で再現してみたら、両方学べて
一石二鳥なのではと思い、今回は「2進数の乗算」を
作ってみました。

勉強するとお腹減って、甘いものが食べたくなることもあります。
私はチョコレートが好きで、特に期間限定で、
夏だったら「塩」とか「ミント」とか入っているチョコ、
冬だったらくちどけが粉雪みたいな感じの、
ふわふわした食感のチョコが好きです。

はい、そうです、デブです。

で、2進数の乗算でイメージするチョコレートですが、
上記のようなお高いチョコは、計算が複雑になるので、
駄菓子屋で売っている5円チョコをイメージします。

5円チョコを9個買うとします。
45円ですね。
それをCASL2の2進数の乗算で計算してみたいと思います。

GR1に5円チョコの「5」・・・かけられる数「0101」
GR2に9個の「9」・・・かける数「1001」
GR3に合計0円として、0で初期化します。

フローチャートはこんな感じです。


2進数の掛け算では、かける数(9個)の、
最後のビットが「1」だったら、合計のGR3にかけられる数(5円)を足します。
最後のビットが「0」だったら、合計のGR3は、何もしません。
その後、GR1を左シフトして、GR2を右シフトします。
これを、GR2が0になるまで繰り返します。

GR2は、
・下1桁が1かの確認
・GR1の左1ビットシフトのあとにGR2を右1ビットシフト

と、右1ビットシフトを2回もして、値が変わってしまうので、
スタックにPUSHで積んどきます。
それで、GR1、GR2、それぞれシフトする前にPOPでGR2へと値を取り出します。
では、トレースして見ます。

シミュレーターのレジスタの表示と、
スタックの表示をを2進数に切り替えます。

これはレジスタで、スタックも同じようにして切り替えます。

実行すると、まず、
GR1~GR3まで値が入りました。
GR1は5…「0101」
GR2は9…「1001」
GR3は0…「0000」
です。

GR2の最後のビットが0か1かを調べるのに、
1ビット右にシフトして、1が落っこちる、つまり、
オーバーフローするかどうかを調べます。
まず、一旦GR2の値をスタックに積みます。

右にシフトすると、OFフラグ赤くなっているので、
オーバーフローしています。
つまり、最後のビットが「1」でした。

GR3にGR1の値を加えます。
GR3は「0101」になりました。

スタックからGR2へ、POPで値を戻しました。

GR1を1ビット左へシフトします。

GR2を1ビット右へシフトします。

ループの先頭に戻ります。
また、GR2を一旦スタックへ退避させます。

GR2を右シフトしたら、OFが赤くなっていないので、
オーバーフローしていません。
最後のビットが0でした。

スタックからPOPして、値をGR2に戻します。

GR1を1ビット左へシフトしました。

GR2を1ビット右へシフトしました。

ループの先頭に戻ります。
また、一旦GR2をスタックへ積みました。

GR2の値を右に1ビットシフトしたら、
OFが赤くなっていないので、オーバーフローしていない、
つまり最後のビットが「0」でした。

スタックからGR2へPOPで戻します。

GR1を左へ1ビットシフトします。

GR2を右へ1ビットシフトします。

ループの先頭に戻ります。
また、GR2をスタックに退避させます。

GR2を右シフトして、最後のビットを調べると、
OFが赤くなっているので、最後のビットは「1」でした。

なので、GR1の値をGR3に足します。
この値が、101101で、2の5乗の【32】と、
2の3乗の【8】と、2の2乗の【4】と、2の0乗の【1】を足した、
45で、5円×9個=合計45円となります。

スタックからPOPで値をGR2へ戻します。

GR1を左へ1ビットシフトします。

GR2を右へ1ビットシフトします。

ループの先頭に戻ります。
GR2が0(ZFが赤い)となり、繰返しの条件が偽になるので、
ループを抜けます。

はい、駄菓子屋で、無事に5円チョコを9個買えました。
いっただっきまーす!!

だから太るんです( ;∀;)
基本情報技術者試験受かったらダイエットしようかな。
って、2018年に簿記3級受かったら、2019年に2級受かったら…って
言っていて、全然痩せる気無いかもです。

以下、プログラムになります。

TEST START
RPUSH


LAD GR1,5
LAD GR2,9
LAD GR3,0

LOOP CPA GR2,=0
JZE FIN
PUSH 0,GR2
SRL GR2,1
JOV TASU
JUMP IDOU
TASU ADDL GR3,GR1
IDOU
POP GR2
SLL GR1,1
SRL GR2,1
JUMP LOOP

FIN

RPOP
RET
END

読んで下さってありがとうございました。

この記事を書くのに勉強になった本を紹介します。
多分この記事を読んで面白かったと思われた方は、きっとハマると思います。

◆アルゴリズム問題がちゃんと解ける本
アルゴリズム学習の定番。
アルゴリズムが苦手で何とかしたい方におススメ

◆アルゴリズムはじめの一歩完全攻略
実際に作って学べます。
Javaを使っています。
私はJava初めてでしたが、
それでも、ハッシュ関数の所までは、
どうにかついていけました。
もっと頑張ります。

◆速習言語CASL2
CASL2、何それ、テーマパークの絶叫マシーン
みたいな名前だね、ぐらいだった私でも、入門書として楽しく読めた本です。

◆プログラミング入門CASL2
入門が卒業出来たら、ガシガシ例題解いて、
演習問題を解いて、力を付けたいという時に
読む本です。

<<関連記事>>

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年(令和3年1月)合格報告