アセンブラで観光地巡り

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

CASL2の勉強で、いつも、
「う◎こ」とかを例題にしていますが、
たまには綺麗な景色を紹介するプログラムを紹介します。
この記事では関連の写真を載せますが、
プログラムを実行しても、写真は出てこないので、あしからず。

コロナの自粛で、不要不急の外出を控えているため、
どこにも写真撮影に行けないので、こういったプログラムを作ってみました。

switch文です。
今日は分岐の勉強をしました。
間に合うか~~~試験に。

で、プログラミングの話ですが、
例えば「1」を入力すると横浜

「2」は東京スカイツリー

「3」は御宿

「4」はお台場

と表示されるようにしました。

プログラムはこちらです。


SPOT START
RPUSH

IN BASHO,LEN
LD GR1,BASHO
CPA GR1,=’1′
JNZ L2
OUT BASHO1,LEN1
JUMP FIN

L2 CPA GR1,=’2′
JNZ L3
OUT BASHO2,LEN2
JUMP FIN

L3 CPA GR1,=’3′
JNZ L4
OUT BASHO3,LEN3
JUMP FIN

L4 OUT BASHO4,LEN4
FIN RPOP

RET

BASHO DS 256
LEN DC 1
BASHO1 DC ‘YOKOHAMA’
LEN1 DC 8
BASHO2 DC ‘SKY TREE’
LEN2 DC 8
BASHO3 DC ‘ONJYUKU’
LEN3 DC 7
BASHO4 DC ‘ODAIBA’
LEN4 DC 6

END

今日も、ありがとうございました(=^・^=)

CASL2のおススメ本です。

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

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

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

コロナ自粛期間中に引きこもりながら、
基本情報技術者試験の言語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のおススメ本です。

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

アセンブラ、配列でSTAYHOME!

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

今、(2020年令和2年5月8日現在)ここ東京では、
コロナの緊急事態宣言延長が出ています。

ひとりひとりが不要不急の外出をお控えして頂けるよう、
私に出来ることは何かあるのか、考えた所、
数日前にYouTubeで動画を作ったり、
今日、アセンブラ(CASL2)を使って、呼びかけの機械語命令を
作ったりしていました。

まずは、こちらの動画をご覧下さい。

あとは、今日作った機械語命令です。
配列を使って、「STAY HOME」と表示します。
下の配列MOJIから1文字置きに抽出するよう、
アドレスを指し示すのに使ったGR1は2つずつ加算、
表示用文字列DASUの格納用アドレスに使うGR2は
インクリメントしています。

最後までトレースすると、こうなります。

機械語命令は、こうなりました。

結果はこのようになります。

TEST START
RPUSH


LD GR1,=0 ;STAYHOMEのアドレス
LD GR2,=0 ;出力用アドレス

LOOP
LD GR3,MOJI,GR1 ;STAYHOMEの読み込み
ST GR3,DASU,GR2 ;出力用に格納
LAD GR2,1,GR2
CPA GR2,=9
JZE FIN

LAD GR1,2,GR1
JUMP LOOP

FIN
OUT DASU,LEN

RPOP
RET

MOJI DC ‘SITEANYI 3HIORMUE’
DASU DS 9
LEN DC 9

END

今日も、ありがとうございました。
あなたがこの記事をご覧の時には、コロナ終息していて欲しいです。

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