この記事では、アセンブラ言語で「基数変換」についての簡単な例題が学べます。
今回は、13を0と1の2進数に変換するサブルーチンの例を掲載しております。
また、アセンブラの本の紹介もしています。
この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。
13を「0000000000001101」と表示するサブルーチンの出力結果です。
左に1ビットシフト(2倍)をして、1だったらオーバーフローするので、
JOVで’1’を表示する処理に分岐します。
GR1に13を設定しました。
GR2に出力用の配列の先頭アドレスを設定しました。
GR3にループカウンタを設定しました。
GR4を使って、配列ARRAYのGR2が指し示すアドレス位置の中身を操作します。
そのイメージ図です。
サブルーチンのコードはコチラです。
TEST START
RPUSH
LAD GR1,13 ;2進数に変換したい数字をGR1に設定
LAD GR2,ARRAY ;出力用配列ARRAYの先頭アドレスをGR2に設定
LAD GR3,16 ;ループカウンタ
;<<配列に格納するループ>>
LOOP CPL GR3,=0 ;ループ終了条件。GR3と0を比較する
JZE FIN ;ループカウンタがゼロになったらFINへ分岐
SLL GR1,1 ;GR1に設定された数値を1ビット左へ(2倍した)
JOV ONE ;シフトされた数がオーバーフローしたら(1だったら)ラベルONEに分岐
LD GR4,='0' ;GR4に'0'を設定
ST GR4,0,GR2 ;'0'を配列ARRAYに格納
JUMP SKIP ;次の処理の為にラベルSKIPに分岐する
ONE LD GR4,='1' ¡GR4に'1'を設定
ST GR4,0,GR2 ;'1'を配列ARRAYに格納
SKIP LAD GR2,1,GR2 ;GR2のアドレスを1つ先に進める
LAD GR3,-1,GR3 ;ループカウンタにしているGR3をデクリメントする
JUMP LOOP ;ループの先頭に分岐する
;<<ループ ここまで。>>
FIN OUT ARRAY,LEN
RPOP
RET
ARRAY DS 16 ;配列ARRAYを用意
LEN DC 16 ;配列の出力文字数
END
お疲れ様でした。
勉強のリフレッシュに、写真で息抜きを致します。
ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。
上手く動いたら、値などを好きなように変えて動かして見て下さい。
この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!
CASL2のおススメ本です。
皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・
遊歩道の桜です。
最後までご精読、誠にありがとうございました!!
自己紹介
アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ
アセンブラ過去問プログラムへ
プログラミング未経験者はアセンブラと表計算どっち!?
基本情報技術者試験トップへ
午前免除試験
午後試験のオススメ本
スコアレポート