03アセンブラCASL2右シフトで、偶数は「北海道」、奇数は「沖縄」旅行!!

この記事ではアセンブラ言語で、偶数と奇数の判別について掲載しております。
ある数を右にシフトすると、偶数の場合はオーバーフローせず、奇数だったらオーバーフローするので、分岐により出力メッセージを分けます。
オーバーフローについては、

このシフトやオーバーフローについて、後ほど具体例を用いて詳しく説明致しますが、オーバーフローって何!?と気になった方は、こちらの外部記事が分かりやすいのでオススメです。(基本情報技術者試験では勿論、ITパスポート受験の際にもお世話になったサイトです。)

さて、行動制限も無くなって東京に住んでいる私は、アセンブラで偶数でしたら北海道に、奇数でしたら沖縄に旅行したい気分です♪

そんな、旅行気分が味わえるサブルーチンを作って見ました。

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

具体的には、GR1に設定された数が、
偶数の場合は「HOKKAIDO」
奇数の場合は「OKINAWA」
と出力します。

偶数は英語でEVEN、奇数はODDですので、それらをラベル名に使います。

偶数の例として、10進数の「4」は、2進数で(0100)、
奇数の例として、10進数の「7」は、2進数で(0111)を挙げます。

偶数を右にシフトすると、4でしたら「0100」→「0010」になって、
右に落っこちるのは、「0100」の一番下の桁である「0」ですよね。
つまり、オーバーフローしないです。

奇数を右にシフトすると、7でしたら「0111」→「0011」になって、
右に落っこちるのは、「0111」の一番下の桁である「1」ですよね。
つまり、オーバーフローします。

オーバーフローした時のジャンプ命令「JOV」を使って、出力する文字を分岐します。

まずは、偶数の例。

TEST START
 RPUSH

 LAD GR1,4;←GR1に数を指定

 SRL GR1,1;1ビット右へシフト
 JOV OVER;オーバーフローした場合はラベルOVERへジャンプ

 OUT EVEN,LEN;偶数の旅先「北海道」を出力
 JUMP FIN;ラベルFINへジャンプ

OVER OUT ODD,LEN2;奇数の旅先「沖縄」を出力

FIN RPOP;終了のFINラベル
 RET

EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数

ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数

 END

4行目のところで、GR1に偶数の例として「4」を設定しています。

実行すると、GR1に4が入りました。


SRLで右シフトすると、GR1が2になりました。

10進数の「4」は2進数では「0100」なので、右に1ビットシフトすると「0010」になり、右に落っこちたのは「0」なのでオーバーフローせず、OFフラグは0です。

右側のコンソールでは、「HOKKAIDO」と出力されました。

シフトについての上記の説明が分かりにくかった場合、こちらの外部記事ではYouTubeによる動画の解説もありますので、気になった方はご覧下さい。

次にGR1に、奇数である7を設定した場合の例です。
4行目のGR1の値を偶数から奇数の「7」に設定した所以外は、同じコードです。

TEST START
 RPUSH

 LAD GR1,7;←GR1に数を指定

 SRL GR1,1;1ビット右へシフト
 JOV OVER;オーバーフローした場合はラベルOVERへジャンプ

 OUT EVEN,LEN;偶数の旅先「北海道」を出力
 JUMP FIN;ラベルFINへジャンプ

OVER OUT ODD,LEN2;奇数の旅先「沖縄」を出力

FIN RPOP;終了のFINラベル
 RET

EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数

ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数

 END

実行すると、GR1に7が入りました。

右シフトすると、GR1が3になりました。
10進数「7」は2進数「0111」で、右シフトすると「0011」になって10進数の「3」になりました。

この時に、「0111」の一番下の桁の「1」が落っこちましたので、オーバーフローのフラフOFが1になりました。

オーバーフローをしたので、7行目のJOVの分岐で、12行目のラベルOVERにジャンプしました。

右側のコンソールには、「OKINAWA」が出力されました。

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


ここは、東京都立川市と日野市の境目の立日橋付近の多摩川土手で撮影した中央線です。

多摩川土手は、ランニングされている方も結構いらっしゃいました。

ここでは、通勤で良く見る電車と、特急や貨物列車も撮れました。
(2023年GWに撮影)


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

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

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

TEST START
 RPUSH

 ;←GR1に数を指定

 ;1ビット右へシフト
 ;オーバーフローした場合はラベルOVERへジャンプ

 ;偶数の旅先「北海道」を出力
 ;ラベルFINへジャンプ

;奇数の旅先「沖縄」を出力

FIN RPOP;終了のFINラベル
 RET

EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数

ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数

 END

CASL2にはJOVやJUMP以外にも分岐命令があり、こちらの外部サイトがサンプル付きで分かりやすいです。

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

多摩モノレールです。
JR立川から立川南まで徒歩で行き、柴崎体育館で下車。
日野方面に南下して撮影しました。

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

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

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

写真素材素材【写真AC】

 

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

自己紹介


アセンブラ自作サンプルへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

02アセンブラCASL2で「好きな食べ物」を入出力!

この記事では、アセンブラ言語であなたの好きな食べ物の文字列を使いながら、入出力命令のINとOUTが理解出来る自作サンプルを掲載しております。

例えば、「焼肉」と「食べたい」を入出力することによって、アセンブラに慣れて行きます。

DCとDSについてはこちらの外部記事が分かり易かったです。

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

早速、コードを見て行きます。

TEST START
 RPUSH

 IN FOOD,NUM ;好きな食べ物を入力

 OUT FOOD,NUM ;その食べ物を出力

 OUT MOJI,LEN ;文字列「食べたい」を出力



 RPOP
 RET

FOOD DS 30;食べ物FOODの格納場所を確保しておく
NUM DS 1;インプットボックスに入力した、文字数NUMの格納場所を確保しておく

MOJI DC 'TABETAI!!';文字列に「食べたい」を格納しておく
LEN DC 9;「食べたい!!」の文字数を格納しておく

 END

アセンブルして、実行して見ます。
今私は、ガッツリと焼肉が食べたい気分ですので、「YAKINIKU」と入力してEnterを押します。

OKを押します。

右側のコンソールに入力した内容が反映されます。
(このシミュレーターでは、INで入力した文字が反映される仕様になっている様です。
勿論後にOUT命令で出力します。)

更に実行を押していくと、OUT命令で出力されます。

最後に「食べたい!!」という文字列が出力されます。

焼肉、焼肉って、なんだかお腹が空いているみたいですね(笑)

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

いたばし花火大会2023


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

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

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

TEST START
 RPUSH

;好きな食べ物を入力

;その食べ物を出力

;文字列「食べたい」を出力



 RPOP
 RET

;食べ物FOODの格納場所を確保しておく
;INPUTBOXに入力した文字数NUMの格納場所を確保しておく

;文字列に「食べたい(TABETAI!!)」を格納しておく
;「食べたい」の文字数を格納しておく


 END

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

今年2023年、4年ぶりの花火大会に行ってきました、いたばし花火大会の写真です。
高島平駅から北上して新河岸から撮影しました。

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

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

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

写真素材素材【写真AC】

 

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

自己紹介


アセンブラ自作サンプルへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート