アセンブラCASL2で「再帰呼び出し」を作ってみた

この記事ではアセンブラで、簡単な足し算を使った再帰呼び出しを学習します。
再帰呼び出しは基本情報技術者試験で午前午後問わず出題させる可能性が高いです。

<<関連記事>>

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

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

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

再帰呼び出しって、RPGで言うとダンジョンの中の迷路に迷って、
HPが0になったらゲームオーバーして魂が抜ける
みたいなイメージがあるのですが、皆さまどうですか??

HPをNとして、N=5(って、よわよわじゃん)だったら、
魂が抜ける前に5を宝箱に移動して、
魂が4になって、それを宝箱に入れて宝箱が
5+4=9になって、また魂が1つ減って3になって、
それを宝箱に入れて箱が5+4+3=12になって、
また魂が1つ減って2になって、宝箱に入れて、
箱が5+4+3+2=14になって、魂が1になって、
箱が5+4+3+2+1=15になって、魂が0になったら
ゲームオーバーで、身体は迷路の中、魂は天国に行って、
お姫様と幸せに暮らしましたとさ、って感じで、
F(N)=N+F(N-1)
の再帰呼び出しを行います。

全然ハッピーエンドじゃないのかな。
でも、天国で幸せならいいか。
話を再帰呼び出しに戻します。

N=5の時は、
F(5)=5+4+3+2+1=15
になり、16進数表記では「F」になります。
そのプログラムを作りました。

フローチャートです。


以下、トレースを行います。

レジスタは、
Nの値をGR1、F(5)を計算する合計をGR2、
出力ウィンドウに表示する文字コード用にGR3を使います。

GR1に「5」、GR2とGR3に「0」を設定します。

文字コード出力用にGR1の値をGR3にコピーします。

+30して文字コードにしました。
(この処理の説明は以下略します。)

「5+」
と表示されました。

GR2にGR1の値を加算します。

GR1の値を1つ減らして「4」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「4+」
と表示されました。

GR2の値が5から+4されて、9になりました。

GR1の値を1つ減らして「3」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「3+」と表示されました。

GR2の値が9から+3されて12になりました。
16進数では12は「C」です。

GR1の値を1つ減らして「2」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「2+」と表示されました。

GR2の値はC(12)から+2されてE(14)になりました。

GR1の値を1つ減らして「1」にします。

GR1>0なので、
サブルーチン、SAIKIの中で再帰呼び出しを行います。

「1+」と表示されました。

GR2の値はE(14)から+1されてF(15)になりました。

GR1の値を1つ減らして「0」にします。

GR1>0が偽になったので、
サブルーチン、SAIKIを抜けます。

メインに戻って、
「GR1=0になったので 抜けます にゃ!!」
と表示してプログラムを終了します。

プログラムはこちらです。

MAIN START
RPUSH


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

CALL SAIKI
OUT MOJI,LEN0
RPOP
RET

MOJI DC ‘GR1=0 NI NATTANODE NUKEMASU NYA!!’
LEN0 DC 33

SAIKI
LD GR3,GR1
ADDA GR3,=’0′
ST GR3,KAZU
OUT KAZU,LEN
ADDA GR2,GR1
SUBA GR1,=1
CPA GR1,=0
JZE FIN

CALL SAIKI

FIN
ADDA GR2,GR1

RET

KAZU DS 1
TASU DC ‘+’
LEN DC 2
END

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

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

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

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

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

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

<<関連記事>>

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

モバイルバージョンを終了