08 アセンブラCASL2で関東地方の観光地巡り

この記事ではアセンブラ言語で、入力された数値によって処理を分岐させ、関東地方の有名な観光地の名称を出力するサブルーチンを作りました。

JNZなどの分岐命令では過去問でも見かけましたので、過去問に取り組む前の腕試し的に読んで頂けましたら幸いです。

この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。

実行して、

「1」を入力すると「YOKOHAMA(横浜)」
「2」を入力すると「SKYTREE(東京スカイツリー)」
「3」は「ONJYUKU(御宿おんじゅく・・・千葉県房総半島の外房の海辺の町)」
「4」は「ODAIBA(お台場)」

と出力されるように致しました。

場所をLOCATE、LENの後の番号はそれぞれの場所の文字数、場所2以降はL2などのラベルに分岐しております。

該当しない場合は、ラベルOTHERの所で1-4のキーの入力を促すメッセージを出力します。

コードはこちらです。

TEST START
 RPUSH

 IN LOCATE,LEN ;観光地の番号を入力する
 LD GR1,LOCATE ;GR1に入力した観光地の番号を読み込む
 CPL GR1,='1' ;GR1と番号'1'を比較
 JNZ L2 ;等しくなければL2に分岐する
 OUT LOCATE1,LEN1 ;1であれば「YOKOHAMA」と出力
 JUMP FIN ;ラベルFINに分岐

L2 CPL GR1,='2' ;ラベルL2ではGR1と'2'を比較する
 JNZ L3 ;等しくなければL3に分岐する
 OUT LOCATE2,LEN2 ;2であれば「SKYTREE」をと出力
 JUMP FIN ;ラベルFINに分岐

L3 CPL GR1,='3' ;ラベルL3ではGR1と'3'を比較する
 JNZ L4 ;等しくなければL4に分岐する
 OUT LOCATE3,LEN3 ;3であれば「ONJYUKU」と出力
 JUMP FIN ;ラベルFINに分岐

L4 CPL GR1,='4' ;ラベルL4ではGR1と'4'を比較する
 JNZ OTHER ;等しくなければOTHERに分岐する
 OUT LOCATE4,LEN4 ;4であれば「ODAIBA」と出力
 JUMP FIN ;ラベルFINに分岐

OTHER OUT NOTHING,LEN5 ;ラベルOTHERでは文字列NOTHINGと文字数LEN5で出力 

FIN  RPOP
 RET

LOCATE DS 256 ;場所の領域を確保
LEN DC 1 ;文字数1文字
LOCATE1 DC 'YOKOHAMA' ;最初の場所横浜
LEN1 DC 8 ;横浜の文字数
LOCATE2 DC 'SKYTREE' ;2番目の場所スカイツリー
LEN2 DC 7 ;スカイツリーの文字数
LOCATE3 DC 'ONJYUKU' ;3番目の場所御宿
LEN3 DC 7 ;御宿の文字数
LOCATE4 DC 'ODAIBA' ;4番目の場所お台場
LEN4 DC 6 ;お台場の文字数
NOTHING DC 'PREASE ENTER 1-4' ;1から4までを入力するようにメッセージ
LEN5 DC 16 ;その他の場合の文字数


 END

シミュレーターを動かして見ます。
インプットボックスで「1」と入力します。

このシミュレーターでは入力するとコンソールに表示されます。

‘1’、文字コード「0031」がGR1に入ります。
※ 1の文字コードは「0001」ではなく「0031」です。
文字コードについてはこちらの外部記事が分かりやすいです。

CPLでGR1が’1’と等しいか比較します。
等しいのでZE(ゼロフラグ)が立ちました。

JNZで等しくない場合はラベルL2に分岐します。
今回は等しいので分岐はせずに進みます。

OUT命令で、YOKOHAMAが出力されました。

その後FINラベルに分岐してプログラムが終了しました。

同様に、2,3,4も入出力して見ます。

では、次は1-4以外の、例えば’8’などを入力してその動きをトレース致します。

GR1に文字コード「0038」が入りました。

GR1は’1’と等しくないのでラベルL2に分岐します。

GR1は’2’とも等しくないのでL3に分岐します。

GR1は’3’とも等しくないのでL4に分岐します。

GR1は’4’とも等しくないので、ラベルOTHERに分岐します。

OUT命令で1-4までを入力するよう促すメッセージが出力されました。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

横浜みなとみらいの夜景です。
ランドマークタワーから撮影しました。

スカイツリーのライトアップと河津桜です。


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

関東以外の観光地や、あなたの行ってみたい場所など、好きなようにアレンジしてみて下さい!!

TEST START
 RPUSH

;観光地の番号を入力する
;GR1に入力した観光地の番号を読み込む
;GR1と番号'1'を比較
;等しくなければL2に分岐する
;1であれば「YOKOHAMA」と出力
;ラベルFINに分岐

;ラベルL2ではGR1と'2'を比較する
;等しくなければL3に分岐する
;2であれば「SKYTREE」をと出力
;ラベルFINに分岐

;ラベルL3ではGR1と'3'を比較する
;等しくなければL4に分岐する
;3であれば「ONJYUKU」と出力
;ラベルFINに分岐

;ラベルL4ではGR1と'4'を比較する
;等しくなければOTHERに分岐する
;4であれば「ODAIBA」と出力
;ラベルFINに分岐

;ラベルOTHERでは文字列NOTHINGと文字数LEN5で出力 

FIN  RPOP
 RET

LOCATE DS 256 ;場所の領域を確保
LEN DC 1 ;文字数1文字
LOCATE1 DC 'YOKOHAMA' ;最初の場所横浜
LEN1 DC 8 ;横浜の文字数
LOCATE2 DC 'SKYTREE' ;2番目の場所スカイツリー
LEN2 DC 7 ;スカイツリーの文字数
LOCATE3 DC 'ONJYUKU' ;3番目の場所御宿
LEN3 DC 7 ;御宿の文字数
LOCATE4 DC 'ODAIBA' ;4番目の場所お台場
LEN4 DC 6 ;お台場の文字数
NOTHING DC 'PREASE ENTER 1-4' ;1から4までを入力するようにメッセージ
LEN5 DC 16 ;その他の場合の文字数


 END

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

御宿海岸と

お台場です。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

アセンブラ過去問プログラムへ


プログラミング未経験者はアセンブラと表計算どっち!?



基本情報技術者試験トップへ

午前免除試験

午後試験のオススメ本

スコアレポート

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。