この記事では、アセンブラ言語で「多重ループ」を使った簡単なドット絵(市松模様)のサブルーチンと、おすすめの本の紹介を掲載しております。
この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。
COMET2のアセンブラのCASL2で、簡単なドット絵を作ってみたくて、
市松模様を作りました。
「X」の文字が入った2つの配列を使って、こんな感じに出力しました。
GR1が奇数の時は、配列 ODDA「X X X」と出力して、GR1の値が偶数の時は、配列 EVENA「 X X 」と出力し、交互に出力することで、市松模様を書いています。
GR1の値で振り分けて、市松模様を描くイメージ的は、こんな感じです。
GR1の値をラベルEVEN(偶数)とODD(奇数)に処理を振り分けています。
偶数か奇数かの判定は、GR1をGR2にコピーして、GR2を右に1ビットシフトして、オーバーフローすれば奇数、しなければ偶数にしています。
プログラムはこんな感じです。
TEST START
RPUSH
LAD GR1,1;GR1に1を読み込む
;<<市松模様の描画ループ>>
LOOP LD GR2,GR1;GR2にGR1をコピー
SRL GR2,1;GR2を右に1ビットシフト
JOV ODD;オーバーフローしたら奇数なので、ODDに分岐する
EVEN OUT EVENA,LEN;偶数だったら「 X X 」を出力
JUMP SKIP;奇数の出力をスキップする
ODD OUT ODDA,LEN;奇数だったら「X X X」を出力
SKIP LAD GR1,1,GR1;GR1をインクリメント
CPL GR1,=5;GR1を5と比較
JPL FIN;5を超えた場合はFINへ分岐
JUMP LOOP;ループ先頭へ分岐
FIN RPOP
RET
EVENA DC ' X X '
ODDA DC 'X X X'
LEN DC 5
END
それでは、実際にシミュレーターを使って動かしていきます。
GR1に1が入りました。
GR2にGR1の値がコピーされました。
GR2の値が右に1ビットシフトして、1は奇数なのでオーバーフローしました。
ラベルODDに分岐して、配列ODDAが出力されました。
GR1をインクリメントしました。
GR1=2は、5より小さいのでサインフラグが立ちました
ループの先頭に戻ります。
GR1の値が、GR2にコピーされました。
GR2が右に1ビットシフトして、偶数でのでOFフラグは立ちません。
偶数なので、配列EVENAが出力出来ました。
GR1がインクリメントされて、3になりました。
GR1=3は5より小さいので、このままループを継続します。
この様に繰り返していって、市松模様が描画されました。
お疲れ様でした。
勉強のリフレッシュに、写真で息抜きを致します。
東京駅丸の内のシャンパンゴールドのイルミネーションです。
ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。
上手く動いたら、値などを好きなように変えて動かして見て下さい。
この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!
TEST START
RPUSH
LAD GR1,1;GR1に1を読み込む
;<<市松模様の描画ループ>>
;GR2にGR1をコピー
;GR2を右に1ビットシフト
;オーバーフローしたら奇数なので、ODDに分岐する
;偶数だったら「 X X 」を出力
;奇数の出力をスキップする
;奇数だったら「X X X」を出力
;GR1をインクリメント
;GR1を5と比較
;5を超えた場合はFINへ分岐
;ループ先頭へ分岐
FIN RPOP
RET
EVENA DC ' X X '
ODDA DC 'X X X'
LEN DC 5
END
皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・
東京駅です。
仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!
こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。
※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪
最後までご精読、誠にありがとうございました!!
自己紹介
アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ
アセンブラ過去問プログラムへ
プログラミング未経験者はアセンブラと表計算どっち!?
基本情報技術者試験トップへ
午前免除試験
午後試験のオススメ本
スコアレポート