アセンブラ、スタックを使ってUNKO逆取り出し!

この記事ではアセンブラ言語で、スタックを利用して、文字列を逆に取り出すプログラムを作りました。「OKNU」を積み上げてスタックを利用して「UNKO」にします。

■ 関連記事 ■

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
令和2年度(令和3年1月)合格報告

2020年からの基本情報技術者試験は、言語とアルゴリズムの配点が高くなりました。
なので、プログラミング未経験の事務員の私は、非常に焦っていましたが、無事合格できました。
学習中のアウトプットを少し編集してお届けしております。

コロナ自粛期間中に引きこもりながら、
基本情報技術者試験の言語COMET2とかいう架空の
コンピュータのアセンブラ、CASL2のお勉強をしています。
また、変なプログラムを思いついたので、記事にします。


これ、逆から読むとUNKOになります。
スタックと言う、イメージ的に積み木みたいのを使って、
「OKNU」を「UNKO」にします。
(文字の処理が終わったかどうかの目印に、「0(ゼロ)」を使っています。)

では、積み木みたいなスタックに積まれて行く様子を図にします。

ところで、この記事をご覧のアナタ、そう、あなたです!!
こんな図を作って、ヒマじゃないか、って思ったでしょう。
自粛期間中なので、忙しくはないですけれど、
この記事を更新したら、基本情報技術者試験の午後対策をします。

では、話し戻します(=^・^=)

スタックには、このように、1文字ずつ積み上げていき、
一番上(最後の文字)から順に取り出します

すると、「OKNU」が「UNKO」になります。
元の文字列「OKNU」は配列MOJI[]に入っています。
スタックを使って出力用に格納する文字列は、DASU[]です。
どちらも、GR1を使ってアドレスを指し示します。
GR2は、文字列をスタックに積んだりします。
また、GR2は、出力用文字列に格納もします。


出力結果です。

機械語命令です。

TEST START
RPUSH


LAD GR2,0 ;GR2に目印の0を設定
PUSH 0,GR2 ;スタックにGR2の値を積む
LAD GR1,MOJI ;GR1に文字列の先頭アドレスを設定
OUT MOJI,LEN

MOJILOOP LD GR2,0,GR1 ;GR2にMOJIから1文字ずつ読み込む
CPA GR2,=0 ;文字の最後まで行ったか確認
JZE DASUYOMI ;最後まで行ったら、逆順に取り出す準備
PUSH 0,GR2 ;読み込んだ文字をスタックに積む
LAD GR1,1,GR1 ;MOJIのアドレスを1つ後に移動
JUMP MOJILOOP ;読み込みとスタック格納が終わるまで繰り返す

DASUYOMI LAD GR1,DASU ;GR1に出力用の配列の先頭アドレスを設定
DASULOOP POP GR2 ;スタックから1文字取り出してGR2に入れる
CPA GR2,=0 ;文字の取り出しは最後まで終わったか確認
JZE OWARI ;終わったらOWARIにジャンプ
ST GR2,0,GR1 ;処理中ならスタックからGR2に取り出した文字をDASUに格納
LAD GR1,1,GR1 ;出力用配列のアドレスを先に進める
JUMP DASULOOP ;出力用配列に格納が終わるまで繰り返す

OWARI OUT DASU,LEN
RPOP
RET

MOJI DC ‘OKNU’ ;う◎この逆さ文字配列
KETSU DC 0 ;おケツは末端の処理終了判別に使う文字
DASU DS 100 ;う◎この出力用文字列
LEN DC 4 ;文字数4文字
END

お疲れ様でした。
今日も快便!!
頑張って出すもの出しましょう!!

CASL2のおススメ本です。

基本情報技術者試験トップへ
アセンブラ自作サンプルへ
アセンブラ過去問プログラムへ
これからプログラミングを始める方へ