この記事ではアセンブラ言語で、入力された数値によって処理を分岐させ、関東地方の有名な観光地の名称を出力するサブルーチンを作りました。
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アカウントを作成して頂くと、登録が ラク です♪
最後までご精読、誠にありがとうございました!!
自己紹介
アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ
アセンブラ過去問プログラムへ
プログラミング未経験者はアセンブラと表計算どっち!?
基本情報技術者試験トップへ
午前免除試験
午後試験のオススメ本
スコアレポート