13 CASL2アセンブラ、2進数に基数変換してみました。

この記事では、アセンブラ言語で「基数変換」についての簡単な例題が学べます。
今回は、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出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

投稿者: nekosiestr

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

モバイルバージョンを終了