10アセンブラCASL2で「ソーシャルディスタンス」を大文字に変換

この記事ではアセンブラ言語で、「Social Distance(ソーシャルディスタンス)」の文字列を、文字コードの演算を使って、小文字から大文字に変換する処理を学べます。

また、少しでも伝わりやすくなればと思い、シンプルな図解を掲載させて頂きました。

この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。

ソーシャルディスタンスは、英語で書くと「Social Distance」です。
大文字と小文字が交じっておりますが、この文字列を全部大文字に変換する
サブルーチンを作りました。

イメージはこちらです。

配列MOJIがあって、緑色の所が大文字に変換した所です。
この配列は、添え字が0番目から14番目まであります。


レジスタはGR1~GR3まで使い、それぞれの役割は、

GR1が「Social Distance」が格納されている配列の先頭アドレスから最後尾のアドレスまで、処理中の文字のアドレスを指し示し、

GR2は文字数の15で、ループカウンタとして使います。

GR3は、GR1が指し示すアドレスの中身、つまり処理中の文字そのものを指します。

大文字の文字コードは、小文字の文字コードよりも20小さいです。
例えば、’A’ は「0041」で、’a’は「0061」です。

そこで、文字コードが小文字の’a’の「0061」より小さい場合は大文字として判断します。

最初の文字の ‘S’ は大文字なのでそのままです。
大文字のSの文字コードは「0053」です。

文字コードが小文字の’a’の「0061」より小さい場合は大文字として判断するので、この場合は、変換の処理を飛ばします。

‘a’以上で、’z’の「007A」以下の場合は大文字変換の対象になりますので、文字コードを20マイナスします。

文字コードについてはこちらの外部記事が分かりやすいです。

出力結果です。

プログラムはこちらです。
少しでも「密」を避けて、早くコロナが収まりますように、という願いを込めて作ってみました。

TEST START
 RPUSH
 OUT MOJI,LEN
 LAD GR1,MOJI ;GR1にMOJIの先頭アドレスを指定
 LD GR2,LEN   ;GR2に文字数を格納
 CALL UPPER   ;大文字に変換するサブルーチンUPPERを呼び出す
 OUT MOJI,LEN
 RPOP
 RET
MOJI DC 'Social Distance'
LEN DC 15

;大文字に変換するサブルーチンUPPER
UPPER RPUSH

;<<大文字判定ループ>>
LOOP LD GR3,0,GR1  ;GR3に配列MOJIの文字を読み込む
 CPL GR3,='a'      ;その文字の文字コードを小文字の「a」と比較
 JMI SKIP          ;文字コードがaより小さかったらSKIPへ分岐
 CPL GR3,='z'      ;小文字の「z」と比較
 JPL SKIP
 SUBL GR3,=#20     ;文字コードを20引いて「小文字 → 大文字」に変換
 ST GR3,0,GR1      ;上で大文字にした文字を配列MOJIに格納
SKIP LAD GR1,1,GR1     ;配列MOJIを1つ先に進める
 SUBL GR2,=1       ;ループカウンタにしているGR2から1を引く
 JPL LOOP          ;ループカウンタがプラスであればLOOPへ

 RPOP
 RET

 END

では、実際に動かしてみます。

サブルーチンの中で、更にサブルーチンUPPER(大文字に変換するサブルーチン)を呼び出して、戻ってきたら大文字に変換した文字列を出力します。

最初のOUT命令で、元の文字列が出力されます。

GR1に、配列MOJIの先頭アドレスが入ります(実行環境によって異なります。)

GR2に、文字数15(16進数でF)が入ります。

GR3に、最初の文字の大文字のS(文字コード0053)が入ります。

小文字の’a’(文字コード0061)と比較して、小さかったのでSFのフラグが立ちました。

文字列を次に進めます。

ループカウンタをデクリメントします。

ループの先頭に戻ります。

次の文字、小文字の’o’(文字コード006F)を読み込みます。

小文字の’z’より小さいのでフラグが立ちました。
つまり、小文字の’o’は、’a’以上’z’以下ですので、小文字だと判定され、大文字に変換する処理の対象となります。

大文字に変換するのに、文字コードを20マイナスしました。
大文字に変換した’O’ を配列に格納します。

配列を1つ先に進めます。

ループカウンタを1つデクリメントしました。

ループの先頭に戻ります。
これを、「Social Distance」の最後の文字「e」まで進めます。

「c」の処理が終わり、ループカウンタがデクリメントされ、ループの先頭に戻った所のレジスタの値です。

GR3に、最後の文字「e(文字コード65)」が入りました。

a以上z以下なので、大文字に変換対象です。
文字コードがマイナス20されました。

GR2のループカウンタがデクリメントされて、ゼロフラグが立って、ループを抜けます。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

瀬戸内しまなみ海道の海です。
撮影したのは平成15年(2003年)で、写ルンですで撮影した写真を復刻しました。


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

TEST START
 RPUSH
 OUT MOJI,LEN
;GR1にMOJIの先頭アドレスを指定
;GR2に文字数を格納
;大文字に変換するサブルーチンUPPERを呼び出す
 OUT MOJI,LEN
 RPOP
 RET
MOJI DC 'Social Distance'
LEN DC 15

;大文字に変換するサブルーチンUPPER
UPPER RPUSH

;<<大文字判定ループ>>
;GR3に配列MOJIの文字を読み込む
;その文字の文字コードを小文字の「a」と比較
;文字コードがaより小さかったらSKIPへ分岐
;小文字の「z」と比較
;文字コードがzより大きかったらSKIPへ分岐
;文字コードを20引いて「小文字 → 大文字」に変換
;上で大文字にした文字を配列MOJIに格納
;配列MOJIを1つ先に進める
;ループカウンタにしているGR2から1を引く
;ループカウンタがプラスであればLOOPへ

 RPOP
 RET

 END

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

しまなみ海道の夕暮れです。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

フォトストック写真ACさんのプロフィールページ

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

09 アセンブラCASL2で推しのライブまでの日数をカウントダウン!!

この記事ではアセンブラ言語で、単純なループとデクリメントを通してカウントダウンの処理が学べます。

過去問でも分岐命令JPL(比較対象の数よりも大きい場合に分岐)なども出てきましたので、過去問前の腕試しに読んで頂けたら嬉しいです。

推しのライブまで後何日かといったことを求めるサブルーチンを作ってみました。

この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。


まず、OUT命令で「Enter your favorite name(推しの名前を入力)」と出力します。
その後、INとOUT命令で、あなたの推しの名前を入出力します。


推しのライブまでの日数を5days、4days、3days、2daysまでカウントダウンして、
その後「1-DAY!! TOMORROW」、「DAISUKI!!」と出力します。

日数が5,4,3,2,とカウントされ行き2日までは、day”s”ですよね、複数形で。
「days.」という日数の単位も含めて出力しております。

ここから、プログラムの一部である、ループの部分を抜粋をします。
GR1を日数の5から1までのループカウンタに使います。

ループに入る前に、ループカウンタGR1に5を読み込みます。

日数をDAYSに格納して出力する際、5を出力する場合は、’5’の文字コードは「0035」です。

GR2に’0’(文字コード0030)を読み込んで、GR1の5とGR2の「0030」を加算して、GR2を「0035」にすることによって出力しています。

出力の際、ST命令でDAYSに格納してOUT命令で出力しています。

文字コードについてはこちらの外部記事が分かりやすいです。

;<<ここからループ>>

LOOP LD GR2,='0' ;GR2に'0'を読み込む
 ADDL GR2,GR1 ;出力する為、文字コード'0'(0030)が入っているGR2にGR1を加算
 ST GR2,DAYS ;ST命令でGR2の日数をDAYSに格納する
 OUT DAYS,LEND ;OUT命令でDAYSに入っている日数を出力
 SUBL GR1,=1 ;GR1をデクリメント
 CPL GR1,=1 ;GR1の値と1を比較 ココ注目!!
 JPL LOOP ;GR1が1より大きい間はループを繰り返す ココ注目!!

;<<ループここまで>>

上記のコードの抜粋部分の下から2つ目と1番下の、ココ注目!! と書いてある箇所をご覧下さい。

日数5、4、3、2までは、日数(GR1)>1ですよね。

そこで、CPL命令を使ってGR1のカウンタの値と1を比較し、ライブまでの日数>1、つまり2日まででしたら、ループを繰り返すという命令にしました。

JPLで、1と比べてPLUSでしたらLOOPへジャンプして分岐しています。

分岐命令についてはこちらの外部記事が分かりやすいです。

カウントダウンして、ライブ前日である日数が1日になったらループを抜けます。
ループを抜けた後は、「明日」の出力と、推しへの愛を込めて「DAISUKI!!」と出力します。

では、プログラム全てです。

TEST START
 RPUSH

 OUT NAME,LEN ;OUT命令で「Enter your favorite name(推しの名前を入力)」を出力
 IN OSHI,LENO ;IN命令で推しの名前を入力
 OUT OSHI,LENO ;入力した名前を出力

 LAD GR1,5 ;GR1に5を読み込む(GR1をループカウンタに使用)

;<<ここからループ>>

LOOP LD GR2,='0' ;GR2に'0'を読み込む
 ADDL GR2,GR1 ;出力する為、文字コード'0'(0030)が入っているGR2にGR1を加算
 ST GR2,DAYS ;ST命令でGR2の日数をDAYSに格納する
 OUT DAYS,LEND ;OUT命令でDAYSに入っている日数を出力
 SUBL GR1,=1 ;GR1をデクリメント
 CPL GR1,=1 ;GR1の値と1を比較
 JPL LOOP ;GR1が1より大きい間はループを繰り返す

;<<ループここまで>>

 OUT DAY1,LEND1 ;OUT命令であと1日と出力
 OUT MSG,LENM ;OUT命令で推しに「DAISUKI!!」と出力


 RPOP
 RET

NAME DC 'Enter your favorite name!';文字列「Enter your favorite name!」
LEN DC 25 ;その文字数
OSHI DS 256 ;推しの名前の領域を確保
LENO DS 256 ;推しの名前の文字数の領域を確保
DAYS DS 1 ;日数の領域を確保
LEND DC 7 ;日数の文字数
DAYCOUNT DC 'days.' ;出力する日数の単位
DAY1 DC '1-DAY!! TOMORROW!!' ;あと1日の文字列
LEND1 DC 18 ;あと1日の文字数
MSG DC 'DAISUKI!!' ;文字列「DAISUKI!!」
LENM DC 9 ;その文字数

 END

では、実際に動かしてみます。
推しの名前は「山田太郎(TARO.YAMADA)」とします。

「推しの名前を入力して下さい」と英文で出力します。

早速、「TARO.YAMADA」と入力します。

(このシミュレーターでは、入力とともにコンソールに表示されます。)

推しの名前を出力します。

GR1にループカウンタの5が入りました。

<<ここからループです。>>

GR2に文字コードの’0’である「0030」が読み込まれました。

GR2に「0030」とGR1の「0005」が加算され、「0035」になりました。

ST命令で「0035」である’5’がDAYSに格納されました。

コンソールに「あと5日」の出力をしました。

GR1をデクリメントして4が入りました。

GR1の値(現在4)と1を比較します。

1より大きいので、ループの先頭に戻ります。

———-

GR2に文字コードの’0’である「0030」が読み込まれました。

GR2に「0030」とGR1の「0004」が加算され、「0034」になりました。

ST命令で「0034」である’4’がDAYSに格納されました。

コンソールに「あと4日」の出力をしました。

GR1をデクリメントして3が入りました。

GR1の値(現在3)と1を比較します。

1より大きいので、ループの先頭に戻ります。

———-

GR2に文字コードの’0’である「0030」が読み込まれました。

GR2に「0030」とGR1の「0003」が加算され、「0033」になりました。

ST命令で「0033」である’3’がDAYSに格納されました。

コンソールに「あと3日」の出力をしました。

GR1をデクリメントして2が入りました。

GR1の値(現在2)と1を比較します。

1より大きいので、ループの先頭に戻ります。

———-

GR2に文字コードの’0’である「0030」が読み込まれました。

GR2に「0030」とGR1の「0002」が加算され、「0032」になりました。

ST命令で「0032」である’2’がDAYSに格納されました。

コンソールに「あと2日」の出力をしました。

GR1をデクリメントして1が入りました。

GR1の値(現在2)と1を比較します。

1と等しいので、ZF(ゼロフラグ)が立ちました。

<<ループはここまで>>

ループを抜けました。

「あと1日、ついに明日」と出力されました。

「大好き!!」、と出力されました。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

日暮里駅から徒歩数分の、「夕やけだんだん」です。
東京下町の観光地、谷根千、谷中銀座付近の観光スポットです。


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

TEST START
 RPUSH

;OUT命令で「Enter your favorite name(推しの名前を入力)」を出力
;IN命令で推しの名前を入力
;入力した名前を出力

;GR1に5を読み込む(GR1をループカウンタに使用)

;<<ここからループ>>

;GR2に'0'を読み込む
;出力する為、文字コード'0'(0030)が入っているGR2にGR1を加算
;ST命令でGR2の日数をDAYSに格納する
;OUT命令でDAYSに入っている日数を出力
;GR1をデクリメント
;GR1の値と1を比較
;GR1が1より大きい間はループを繰り返す

;<<ループここまで>>

;OUT命令であと1日と出力
;OUT命令で推しに「DAISUKI!!」と出力


 RPOP
 RET

NAME DC 'Enter your favorite name!';文字列「Enter your favorite name!」
LEN DC 25 ;その文字数
OSHI DS 256 ;推しの名前の領域を確保
LENO DS 256 ;推しの名前の文字数の領域を確保
DAYS DS 1 ;日数の領域を確保
LEND DC 7 ;日数の文字数
DAYCOUNT DC 'days.' ;出力する日数の単位
DAY1 DC '1-DAY!! TOMORROW!!' ;あと1日の文字列
LEND1 DC 18 ;あと1日の文字数
MSG DC 'DAISUKI!!' ;文字列「DAISUKI!!」
LENM DC 9 ;その文字数

 END

アセンブラCASL2のおススメ本です。

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

谷根千の招き猫です。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

フォトストック写真ACさんのプロフィールページ

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

08 アセンブラCASL2で関東地方の観光地巡り

この記事ではアセンブラ言語で、入力された数値によって処理を分岐させ、関東地方の有名な観光地の名称を出力するサブルーチンを作りました。

JNZなどの分岐命令では過去問でも見かけましたので、過去問に取り組む前の腕試し的に読んで頂けましたら幸いです。

この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。

実行して、

「1」を入力すると「YOKOHAMA(横浜)」
「2」を入力すると「SKYTREE(東京スカイツリー)」
「3」は「ONJYUKU(御宿おんじゅく・・・千葉県房総半島の外房の海辺の町)」
「4」は「ODAIBA(お台場)」

と出力されるように致しました。

場所をLOCATE、LENの後の番号はそれぞれの場所の文字数、場所2以降はL2などのラベルに分岐しております。

該当しない場合は、ラベルOTHERの所で1-4のキーの入力を促すメッセージを出力します。

コードはこちらです。

TEST START
 RPUSH

 IN LOCATE,LEN ;観光地の番号を入力する
 LD GR1,LOCATE ;GR1に入力した観光地の番号を読み込む
 CPL GR1,='1' ;GR1と番号'1'を比較
 JNZ L2 ;等しくなければL2に分岐する
 OUT LOCATE1,LEN1 ;1であれば「YOKOHAMA」と出力
 JUMP FIN ;ラベルFINに分岐

L2 CPL GR1,='2' ;ラベルL2ではGR1と'2'を比較する
 JNZ L3 ;等しくなければL3に分岐する
 OUT LOCATE2,LEN2 ;2であれば「SKYTREE」をと出力
 JUMP FIN ;ラベルFINに分岐

L3 CPL GR1,='3' ;ラベルL3ではGR1と'3'を比較する
 JNZ L4 ;等しくなければL4に分岐する
 OUT LOCATE3,LEN3 ;3であれば「ONJYUKU」と出力
 JUMP FIN ;ラベルFINに分岐

L4 CPL GR1,='4' ;ラベルL4ではGR1と'4'を比較する
 JNZ OTHER ;等しくなければOTHERに分岐する
 OUT LOCATE4,LEN4 ;4であれば「ODAIBA」と出力
 JUMP FIN ;ラベルFINに分岐

OTHER OUT NOTHING,LEN5 ;ラベルOTHERでは文字列NOTHINGと文字数LEN5で出力 

FIN  RPOP
 RET

LOCATE DS 256 ;場所の領域を確保
LEN DC 1 ;文字数1文字
LOCATE1 DC 'YOKOHAMA' ;最初の場所横浜
LEN1 DC 8 ;横浜の文字数
LOCATE2 DC 'SKYTREE' ;2番目の場所スカイツリー
LEN2 DC 7 ;スカイツリーの文字数
LOCATE3 DC 'ONJYUKU' ;3番目の場所御宿
LEN3 DC 7 ;御宿の文字数
LOCATE4 DC 'ODAIBA' ;4番目の場所お台場
LEN4 DC 6 ;お台場の文字数
NOTHING DC 'PREASE ENTER 1-4' ;1から4までを入力するようにメッセージ
LEN5 DC 16 ;その他の場合の文字数


 END

シミュレーターを動かして見ます。
インプットボックスで「1」と入力します。

このシミュレーターでは入力するとコンソールに表示されます。

‘1’、文字コード「0031」がGR1に入ります。
※ 1の文字コードは「0001」ではなく「0031」です。
文字コードについてはこちらの外部記事が分かりやすいです。

CPLでGR1が’1’と等しいか比較します。
等しいのでZE(ゼロフラグ)が立ちました。

JNZで等しくない場合はラベルL2に分岐します。
今回は等しいので分岐はせずに進みます。

OUT命令で、YOKOHAMAが出力されました。

その後FINラベルに分岐してプログラムが終了しました。

同様に、2,3,4も入出力して見ます。

では、次は1-4以外の、例えば’8’などを入力してその動きをトレース致します。

GR1に文字コード「0038」が入りました。

GR1は’1’と等しくないのでラベルL2に分岐します。

GR1は’2’とも等しくないのでL3に分岐します。

GR1は’3’とも等しくないのでL4に分岐します。

GR1は’4’とも等しくないので、ラベルOTHERに分岐します。

OUT命令で1-4までを入力するよう促すメッセージが出力されました。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

横浜みなとみらいの夜景です。
ランドマークタワーから撮影しました。

スカイツリーのライトアップと河津桜です。


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

関東以外の観光地や、あなたの行ってみたい場所など、好きなようにアレンジしてみて下さい!!

TEST START
 RPUSH

;観光地の番号を入力する
;GR1に入力した観光地の番号を読み込む
;GR1と番号'1'を比較
;等しくなければL2に分岐する
;1であれば「YOKOHAMA」と出力
;ラベルFINに分岐

;ラベルL2ではGR1と'2'を比較する
;等しくなければL3に分岐する
;2であれば「SKYTREE」をと出力
;ラベルFINに分岐

;ラベルL3ではGR1と'3'を比較する
;等しくなければL4に分岐する
;3であれば「ONJYUKU」と出力
;ラベルFINに分岐

;ラベルL4ではGR1と'4'を比較する
;等しくなければOTHERに分岐する
;4であれば「ODAIBA」と出力
;ラベルFINに分岐

;ラベルOTHERでは文字列NOTHINGと文字数LEN5で出力 

FIN  RPOP
 RET

LOCATE DS 256 ;場所の領域を確保
LEN DC 1 ;文字数1文字
LOCATE1 DC 'YOKOHAMA' ;最初の場所横浜
LEN1 DC 8 ;横浜の文字数
LOCATE2 DC 'SKYTREE' ;2番目の場所スカイツリー
LEN2 DC 7 ;スカイツリーの文字数
LOCATE3 DC 'ONJYUKU' ;3番目の場所御宿
LEN3 DC 7 ;御宿の文字数
LOCATE4 DC 'ODAIBA' ;4番目の場所お台場
LEN4 DC 6 ;お台場の文字数
NOTHING DC 'PREASE ENTER 1-4' ;1から4までを入力するようにメッセージ
LEN5 DC 16 ;その他の場合の文字数


 END

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

御宿海岸と

お台場です。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

フォトストック写真ACさんのプロフィールページ

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

07 アセンブラCASL2、スタックを使って「CMYK」を逆さ取り出し!

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

取り出す文字列は、インクジェットプリンターのインクで使われる「CMYK」です。
その「CMYK」の文字の並びを逆にした、「KYMC」をスタックに積み上げて、スタックの仕組みを利用して「CMYK」にして出力します。

この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。

CMYKについて基本情報技術者試験(FE)を受けられる方は既にご存知だと思いますが、簡単にお話しすると、インクジェットプリンターで使われているインクです。

C(シアン)、M(マゼンタ)、Y(イエロー)、K(ブラック)のことで、もう少し詳しく知りたい方は、こちらの外部記事が分かりやすいです。

この配列BEFOREは、逆から読むとCMYKになります。
スタックと言う、イメージ的に積み木みたいな仕組みを使って、
配列BEFOREの「KYMC」を配列AFTERに「CMYK」と出力されるように格納します。

配列BEFOREのすぐ後にあるのは、目印に使う配列ENDでゼロが格納されています。

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

文字の処理が終わったかどうかの目印に、「0(ゼロ)」を使いますので、最初に0をスタックに積みます。

スタックにはPUSH命令で、このように1文字ずつ積み上げていき、取り出す時には
POP命令を使って、一番上(最後に積み上げた文字)から順に取り出します。
取り出した文字を出力用の配列AFTERに格納します。

すると、「KYMC」が「CMYK」になって出力されます。

元の文字列「KYMC」は配列BEFORE[]に入っています。
スタックを使って出力用に格納する配列はAFTER[]です。
どちらも、GR1を使ってアドレスを指し示します。

GR2は、文字列をスタックに積んだり取り出したりする時に使います。
また、GR2は、出力用文字列に格納する時にも使います。

CMYKの文字コードはこちらになります。
‘K’…「004B」
‘Y’…「0059」
‘M’…「004D」
‘C’…「0043」

文字コードについてはこちらの外部記事が分かりやすいです。

それでは、プログラムを掲載致します。

TEST START

 RPUSH

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

;<<スタックに積むループPUSH>>
LOOPPUSH LD GR2,0,GR1 ;GR2に配列BEFOREのGR1が指し示す文字を読み込む
 CPL GR2,=0 ;目印の0まで到達したか、GR2の文字と目印0を比較する
 JZE PREPOP ;目印0まで到達したら配列AFTERの準備でPREPOPまで分岐する
 PUSH 0,GR2 ;処理中の場合は読み込んだ文字をスタックに積む
 LAD GR1,1,GR1 ;配列BEFOREの位置を1つ先に進めるのでGR1をインクリメントする
 JUMP LOOPPUSH ;読み込みとスタックに積む処理が完了するまでLOOPPUSHを繰り返す

;配列AFTERの出力準備
PREPOP LAD GR1,AFTER ;GR1に配列AFTERのアドレスを設定

;<<スタックから取り出すループPOP>>
LOOPPOP POP GR2 ;スタックから1文字取り出してGR2に格納
 CPL GR2,=0 ;文字の取り出しが最後の目印まで到達したか確認
 JZE FIN ;等しい(取り出し処理が終了)場合はFINラベルへ
 ST GR2,0,GR1 ;処理中ならGR2で取り出した文字をGR1を使って配列AFTERに格納
 LAD GR1,1,GR1 ;配列AFTERの位置を1つ先に進めるのでGR1をインクリメントする
 JUMP LOOPPOP ;出力処理が終わるまでLOOPPOPを繰り返す


FIN OUT AFTER,LEN ;配列AFTERを出力する


 RPOP
 RET

BEFORE DC 'KYMC'
END DC 0
AFTER DS 100
LEN DC 4


 END

ここから、実際にシミュレーターを動かして見て行きます。

GR2に目印となる0を設定し、スタックにその0を積みます。

GR1に配列BEFOREの先頭アドレスを設定します。

OUT命令で元の文字の配列BEFOREをコンソールに出力します。

スタックにPUSHするループ、LOOPPUSHに入り、配列BEFOREの先頭文字の‘K’…「004B」をGR2に読み込みます。

GR2のKと目印の0を比較します。
等しくないのでループを続行します。

スタックに‘K’…「004B」を積みます。

配列BEFOREの位置を1つ進めるのでGR1をインクリメントします。

ループLOOPPUSHを繰り返します。

GR2に‘Y’…「0059」を読み込みます。

Yと目印の0を比較します。
等しくないのでループを続けます。

スタックに‘Y’…「0059」を積みます。

配列BEFOREを1つ先に進めるので、GR1をインクリメントします。

ループLOOPPUSHを繰り返します。

GR2にM’…「004D」を読み込みます。

Mと目印の0を比較します。
等しくないのでループを続けます。

スタックにM’…「004D」を積みます。

配列BEFOREを1つ先に進めるので、GR1をインクリメントします。

ループLOOPPUSHを繰り返します。

GR2に‘C’…「0043」を読み込みます。

Cと目印の0を比較します。

等しくないのでループを続けます。

スタックに‘C’…「0043」を積みます。

配列BEFOREを1つ先に進めるので、GR1をインクリメントします。

ループLOOPPUSHを繰り返します。

GR2に‘目印’、配列ENDの「0」を読み込みます。

GR2と目印の0を比較します。
等しいので、ゼロフラグが立ちました。

分岐命令JZEで、ループを抜けて配列AFTERの出力準備のPREPOPに分岐して、GR1に配列AFTERの先頭アドレスを設定します。

今度は取り出しループのLOOPPOPに入り、スタックから一番上に積まれた‘C’…「0043」をPOP命令で取り出します。

スタックからGR2に取り出された‘C’…「0043」と目印の0を比較します。
等しくないのでループを続けます。

GR2に取り出された‘C’…「0043」を配列AFTERに格納します。

配列AFTERを1つ先に進めるのでGR1をインクリメントします。

ループLOOPPOPに戻ります。

GR2にスタックから一番上に積まれているM’…「004D」をPOP命令で取り出します。

スタックからGR2に取り出されたM’…「004D」と目印の0を比較します。
等しくないのでループを続けます。

GR2に取り出されたM’…「004D」を配列AFTERに格納します。

配列AFTERを1つ先に進めるのでGR1をインクリメントします。

ループLOOPPOPに戻ります。

スタックから一番上に積まれている‘Y’…「0059」をPOP命令で取り出します。

スタックからGR2に取り出された‘Y’…「0059」と目印の0を比較します。
等しくないのでループを続けます。

GR2に取り出された‘Y’…「0059」を配列AFTERに格納します。

配列AFTERを1つ先に進めるのでGR1をインクリメントします。

ループLOOPPOPに戻ります。

スタックから一番上に積まれている‘K’…「004B」をPOP命令で取り出します。

スタックからGR2に取り出された‘K’…「004B」と目印の0を比較します。
等しくないのでループを続けます。

GR2に取り出された‘K’…「004B」を配列AFTERに格納します。

配列AFTERを1つ先に進めるのでGR1をインクリメントします。

ループLOOPPOPに戻ります。

スタックから最後に残った目印の「0」をPOP命令で取り出します。

スタックからGR2に取り出された0と目印の0を比較します。
等しいのでJZE命令でFINラベルに分岐します。

コンソールに配列AFTERを出力します。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。


目白庭園という日本庭園の紅葉ライトアップです。


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

このコードでも、推しがいる方はあなたの推しの名前をスタックを使って取り出してみると面白いと思います。

TEST START

 RPUSH

;GR2に目印の0を設定
;スタックにGR2の値を積む
;GR1に配列BEFOREの先頭アドレスを設定
;配列BEFOREを出力

;<<スタックに積むループPUSH>>
;GR2に配列BEFOREのGR1が指し示す文字を読み込む
;目印の0まで到達したか、GR2の文字と目印0を比較する
;目印0まで到達したら配列AFTERの準備でPREPOPまで分岐する
;処理中の場合は読み込んだ文字をスタックに積む
;配列BEFOREの位置を1つ先に進めるのでGR1をインクリメントする
;読み込みとスタックに積む処理が完了するまでLOOPPUSHを繰り返す

;配列AFTERの出力準備
;GR1に配列AFTERのアドレスを設定

;<<スタックから取り出すループPOP>>
;スタックから1文字取り出してGR2に格納
;文字の取り出しが最後の目印まで到達したか確認
;等しい(取り出し処理が終了)場合はFINラベルへ
;処理中ならGR2で取り出した文字をGR1を使って配列AFTERに格納
;配列AFTERの位置を1つ先に進めるのでGR1をインクリメントする
;出力処理が終わるまでLOOPPOPを繰り返す


;配列AFTERを出力する


 RPOP
 RET

BEFORE DC 'KYMC'
END DC 0
AFTER DS 100
LEN DC 4


 END

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

フォトストック写真ACさんのプロフィールページ

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

06アセンブラCASL2、配列で合格(GOUKAKU)を出力!

この記事ではアセンブラ言語で、配列と添字についてのサンプルプログラムを掲載しております。

恐らく、基本情報技術者試験の合格を目指していらっしゃる方がこの記事を読まれていると思いますので、文字列を1文字置きに取り出して「GOUKAKU」の文字を出力するサブルーチンを作りました。


下の配列BEFOREの黄色いセルが、取り出すべき文字の「GOUKAKU」です。
1文字置きに抽出するよう、アドレスを指し示すのに使うGR1は2つずつ加算して、それに対して出力用の配列AFTERの格納用アドレスに使うGR2は1つずつインクリメントして行きます。

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

配列は添え字が0から始まりますので、GR1とGR2に0を読み込んでいます。
GR3は、元の文字列BEFOREの文字を読み込むのに使います。

文字コードは、

‘G’…「0047」
‘O’…「004F」
‘U’…「0055」
‘K’…「004B」
‘A’…「0041」
‘K’…「004B」
‘U’…「0055」

です。
文字コードはこちらの外部サイトが分かりやすいです。

では、コードを掲載致します。

TEST START

 RPUSH
 LAD GR1,0 ;GR1に配列BEFOREの先頭の添え字0を読み込む
 LAD GR2,0 ;GR2に配列AFTERの先頭の添え字0を読み込む

;<<ここからループ>>
LOOP CPL GR2,=7 ;GR2とAFTER(GOUKAKU)の文字数7文字を比較
 JZE FIN ;等しかったらFINへ分岐
 LD GR3,BEFORE,GR1 ;GR3に配列BEFOREの文字を1つずつ読み込む
 ST GR3,AFTER,GR2 ;GR3の文字を配列AFTERに格納

 LAD GR2,1,GR2 ;AFTERのGR2をインクリメント
 

 LAD GR1,2,GR1 ;BEFOREのGR1を2つ増やす
 JUMP LOOP ;LOOPへ分岐
;<<ここまでループ>>


FIN OUT AFTER,ALEN ;配列AFTERを出力

 RPOP
 RET

BEFORE DC 'GROGUBKCAMKYU' ;配列BEFOREを用意
AFTER DS 7 ;配列AFTERに領域7つ分を確保
ALEN DC 7 ;AFTERの文字数ALENを7文字とする

 END

それでは、実際にシミュレーターを動かして行きます。

GR1に配列BEFOREの添え字0が入ります。

GR2に配列AFTERの添え字0が入ります。

ループに入ります。

GR2(現在0)と文字数の7を比較して、GR2の方が小さいのでSFにフラグが立ちます。
SF(サインフラグ)は比べて小さかった時に「1」が立ちます。
比較する際に減算を用いていて、GR2の0から7を引くとマイナスになるので、SFが立ちました。

GR2と7は等しくないので分岐せずにループを続けます。

GR3にBEFOREの最初の文字’G’(文字コード0047)が入ります。

‘G’を配列AFTERの先頭に格納します。

配列AFTERの添え字を指すGR2をインクリメントします。

配列BEFOREの添え字を指すGR1を2つ増やします。

ループの先頭にジャンプします。

GR2(現在1)とAFTERの文字数7を比較して、GR2の方が小さいので、SFが立ち、分岐をせずにループを続行します。

GR3に’O’…「004F」が読み込まれます。

配列AFTERの添え字1に’O’が格納されます。

GR2をインクリメントします。

GR1を2つ増やします。

この繰り返しで、G,Oと順番に配列AFTERを格納していき、最後の’U’…「0055」を格納する所まで進めます。

(GOUKAKUの、後ろの方の’K’…「004B」を格納した所まで進めます。)

現在シミュレーターは、配列AFTERの添え字であるGR2が6になっていて、格納された文字のGR3が’K’…「004B」となっている所まで進めました。

GR2(現在6)と7を比較して、SFが立ちましたので、ループを続行します。

GR3に’U’…「0055」が入りました。

‘U’を配列AFTERに格納します。

GR2をインクリメントします。

GR1を2つ増やします。

ループの先頭に戻ります。

GR2の現在の値7が比較する7と等しかったので、ZFが立ってFINに分岐します。

FINラベルの所のOUT命令でコンソールに出力されました。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

お台場のレインボーブリッジです。
東京タワーがレインボーブリッジの中央より少し右側に写っています。


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

TEST START

 RPUSH
;GR1に配列BEFOREの先頭の添え字0を読み込む
;GR2に配列AFTERの先頭の添え字0を読み込む

;<<ここからループ>>
;GR2とAFTER(GOUKAKU)の文字数7文字を比較
;等しかったらFINへ分岐
;GR3に配列BEFOREの文字を1つずつ読み込む
;GR3の文字を配列AFTERに格納

;AFTERのGR2をインクリメント
 

;BEFOREのGR1を2つ増やす
;LOOPへ分岐
;<<ここまでループ>>


;配列AFTERを出力

 RPOP
 RET

BEFORE DC 'GROGUBKCAMKYU' ;配列BEFOREを用意
AFTER DS 7 ;配列AFTERに領域7つ分を確保
ALEN DC 7 ;AFTERの文字数ALENを7文字とする

 END

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

お台場レインボーブリッジと自由の女神です。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

フォトストック写真ACさんのプロフィールページ

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

ブラウザだけでMySQLを即学習【サザエさんの例 その4】|合計と平均|最大値と最小値|COUNT |LIMIT |GROUP BY

この記事では、ブラウザだけでMySQLを「サザエさんの例」を通してサンプルのコードを書きながら学習する内容になっております。

途中からでもなるべく学習可能な様に書いております。

使用ブラウザはmyCompilerのMySQLを使っています。

今回学習するテーブルのイメージです。

現在、ブラウザのMySQLの左側の画面はこの様なコードが入っています。

-- create a table
CREATE TABLE sazaefamily (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  gender TEXT NOT NULL,
  age INTEGER NOT NULL
);
-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性',54);
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性',24);
INSERT INTO sazaefamily VALUES (3, '磯野カツオ', '男性',11);
INSERT INTO sazaefamily VALUES (4, '磯野ワカメ', '女性',9);
INSERT INTO sazaefamily VALUES (5, '穴子さん', '男性',27);
-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';
SELECT * FROM sazaefamily;
SELECT * FROM sazaefamily WHERE age>=25;
SELECT name FROM sazaefamily WHERE id=4;
SELECT name FROM sazaefamily WHERE name LIKE '%野%';
SELECT name,age FROM sazaefamily WHERE age<15;
SELECT name,age FROM sazaefamily ORDER BY age DESC;

テーブルを年齢順に並び替えて、この様なイメージになっています。


今日は、サザエさんのキャラクターの年齢の、平均や最大値、件数のカウントなどを求めて行きます。

まず、年齢の合計と平均を求めて見ます。

SELECT SUM(age),AVG(age) FROM sazaefamily;

実行結果です。

年齢の合計を求めるというのは、あまり実用的ではありませんね。
平均年齢については、小数点以下を表示させないようにROUND関数でAVG関数を囲いネストします。

SELECT SUM(age), ROUND(AVG(age)) FROM sazaefamily;

次に年齢の最大値と最小値を求めます。
年齢順に並べた表のイメージです。

SELECT MAX(age),MIN(age) FROM sazaefamily;

実行結果です。

年齢が高い順に3名抽出します。

SELECT * FROM sazaefamily ORDER BY age DESC LIMIT 3;

実行結果です。

この表の件数を求めます。

SELECT COUNT(*) FROM sazaefamily;

実行結果です。

年齢が平均以上のキャラクターの名前と年齢を求めます。

SELECT name,age FROM sazaefamily WHERE age >= (SELECT AVG(age) FROM sazaefamily);

実行結果です。

最後にGROUP BY を使って、男女別の平均年齢を求めます。

SELECT gender, ROUND(AVG(age)) FROM sazaefamily GROUP BY gender;

実行結果です。

ここまでのコードのまとめです。

-- create a table
CREATE TABLE sazaefamily (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  gender TEXT NOT NULL,
  age INTEGER NOT NULL
);
-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性',54);
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性',24);
INSERT INTO sazaefamily VALUES (3, '磯野カツオ', '男性',11);
INSERT INTO sazaefamily VALUES (4, '磯野ワカメ', '女性',9);
INSERT INTO sazaefamily VALUES (5, '穴子さん', '男性',27);
-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';
SELECT * FROM sazaefamily;
SELECT * FROM sazaefamily WHERE age >= 25;
SELECT name FROM sazaefamily WHERE id = 4;
SELECT name FROM sazaefamily WHERE name LIKE '%野%';
SELECT name, age FROM sazaefamily WHERE age < 15;
SELECT name, age FROM sazaefamily ORDER BY age DESC;
SELECT SUM(age), ROUND(AVG(age)) FROM sazaefamily;
SELECT MAX(age), MIN(age) FROM sazaefamily;
SELECT * FROM sazaefamily ORDER BY age DESC LIMIT 3;
SELECT COUNT(*) FROM sazaefamily;
SELECT age, name FROM sazaefamily WHERE age >= (SELECT AVG(age) FROM sazaefamily);
SELECT gender, ROUND(AVG(age)) FROM sazaefamily GROUP BY gender;


お疲れ様でした。ブレイクタイムPhotoは、

隅田公園の梅の花です。

→ブラウザだけでMySQLを即学習【サザエさん】その5へ

ご精読誠にありがとうございました。

【オススメ入門書】
3ステップでしっかり学ぶ My SQL入門

MySQL自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

ブラウザだけでMySQLを即学習【サザエさんの例 その3】|LIKEでワイルドカード|ORDER BYで年齢順に並び替え

この記事では、ブラウザだけでMySQLを「サザエさんの例」を通してサンプルのコードを書きながら学習する内容になっております。

途中からでもなるべく学習可能な様に書いております。

使用ブラウザはmyCompilerのMySQLを使っています。

このレッスンで使用するテーブルのイメージです。

現在(前回まで)、ブラウザのMySQLの左側の画面はこの様なコードが入っています。

-- create a table
CREATE TABLE sazaefamily (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  gender TEXT NOT NULL,
  age INTEGER NOT NULL
);
-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性',54);
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性',24);
INSERT INTO sazaefamily VALUES (3, '磯野カツオ', '男性',11);
INSERT INTO sazaefamily VALUES (4, '磯野ワカメ', '女性',9);
INSERT INTO sazaefamily VALUES (5, '穴子さん', '男性',27);
-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';
SELECT * FROM sazaefamily;
SELECT * FROM sazaefamily WHERE age>=25;

この表から25歳以上を抽出致します。

SELECT * FROM sazaefamily WHERE age>=25;

を追記して実行すると、テーブルイメージでは

という抽出がされて、右側の実行画面では、

の様になっております。
前回までの復習はここまでです。


今回は、主キーのidが「4」のワカメちゃんの名前の列のみを抽出してみます。

SELECT name FROM sazaefamily WHERE id=4;

イメージと実行結果です。

次に、名前に「野」が付くキャラクターを抽出致します。

SELECT name FROM sazaefamily WHERE name LIKE '%野%';

「%」はワイルドカードと言って、「ある文字を含む名前」を抽出出来ます。

イメージと結果です。

次に、名前と年齢の列のみで15歳未満のキャラクターを抽出致します。

SELECT name,age FROM sazaefamily WHERE age<15;

イメージと結果です。

最後に、年齢が高い順に並べます。

SELECT name,age FROM sazaefamily ORDER BY age DESC;

イメージと実行結果です。

ここまでのコードをまとめます。

-- create a table
CREATE TABLE sazaefamily (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  gender TEXT NOT NULL,
  age INTEGER NOT NULL
);
-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性',54);
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性',24);
INSERT INTO sazaefamily VALUES (3, '磯野カツオ', '男性',11);
INSERT INTO sazaefamily VALUES (4, '磯野ワカメ', '女性',9);
INSERT INTO sazaefamily VALUES (5, '穴子さん', '男性',27);
-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';
SELECT * FROM sazaefamily;
SELECT * FROM sazaefamily WHERE age>=25;
SELECT name FROM sazaefamily WHERE id=4;
SELECT name FROM sazaefamily WHERE name LIKE '%野%';
SELECT name,age FROM sazaefamily WHERE age<15;
SELECT name,age FROM sazaefamily ORDER BY age DESC;

お疲れ様でした。ブレイクタイムPhotoは、

千葉県 房総半島 外房 御宿の海です。

→ブラウザだけでMySQLを即学習【サザエさん】その4へ


ご精読誠にありがとうございました。

【オススメ入門書】
3ステップでしっかり学ぶ My SQL入門

MySQL自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

ブラウザだけでMySQLを即学習【サザエさんの例 その2】|キャラクターの追加と年齢の列追加|WHEREで25歳以上を抽出

この記事では、ブラウザだけでMySQLを「サザエさんの例」を通してサンプルのコードを書きながら学習する内容になっております。

途中からでもなるべく学習可能な様に書いております。

使用ブラウザはmyCompilerのMySQLを使っています。


前回までの表のイメージです。

現在、ブラウザのMySQLの左側の画面はこの様なコードが入っています。

-- create a table
CREATE TABLE sazaefamily (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  gender TEXT NOT NULL
);
-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性');
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性');
-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';

右側の実行を押したイメージと実行結果です。

上の表から「女性」のみを抽出して、

この様な抽出結果のイメージになり、右側の実行を押すと、

この様に実行されました。
前回までの復習は以上です。



キャラクターが2人だけなので、INSERT INTO sazaefamily で表にキャラクターを足して行きます。

ここで便利なショートカットキーは、既にあるキャラクターの行にカーソルがある状態で、[Alt]+[Shift]+[↓]を押すと複製出来て他のキャラクターを追加出来ます。

Macの方は[Alt]の代わりに[option]を押してみて下さい。

また、[Shift]を押さないと、移動になります。

完成形は、この様なイメージの表を作ります。
(穴子さんは私の推しです (笑) )

データ追加部分のコードです。

-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性');
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性');
INSERT INTO sazaefamily VALUES (3, '磯野カツオ', '男性');
INSERT INTO sazaefamily VALUES (4, '磯野ワカメ', '女性');
INSERT INTO sazaefamily VALUES (5, '穴子さん', '男性');

この状態で実行を押してみます。
実行結果のイメージと結果です。

ここで、表全体を表示してみます。
SELECTと入力するとき、大文字で「SE」ぐらいまで入力して[Enter]を押すと入力がスムーズです。

-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';
SELECT * FROM sazaefamily;

実行結果です。
追加したキャラクターも表示されました。

次に、年齢の列を作ります。
まず、表の完成イメージです。

まずは、列「age」を加える、テーブル作成部分のコードです。
6行目に列を追加のコードを掲載しました。
INTEGERも大文字で「IN」ぐらいまで入力して、[Enter]を押すとスムーズに入力出来ます。

-- create a table
CREATE TABLE sazaefamily (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  gender TEXT NOT NULL,
  age INTEGER NOT NULL
);

注意!5行目の「gender」の行の最後に「,(カンマ)」を入力して下さい。

また、年齢を入力するコードです。

-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性',54);
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性',24);
INSERT INTO sazaefamily VALUES (3, '磯野カツオ', '男性',11);
INSERT INTO sazaefamily VALUES (4, '磯野ワカメ', '女性',9);
INSERT INTO sazaefamily VALUES (5, '穴子さん', '男性',27);

実行して、表が作れたことを確認します。

それでは最後に、25歳以上のキャラクターを表示してみます。

-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';
SELECT * FROM sazaefamily;
SELECT * FROM sazaefamily WHERE age>=25;

実行結果のイメージと画面です。

ここまでのコードはこちらになります。

-- create a table
CREATE TABLE sazaefamily (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  gender TEXT NOT NULL,
  age INTEGER NOT NULL
);
-- insert some values
INSERT INTO sazaefamily VALUES (1, '磯野波平', '男性',54);
INSERT INTO sazaefamily VALUES (2, 'フグ田サザエ', '女性',24);
INSERT INTO sazaefamily VALUES (3, '磯野カツオ', '男性',11);
INSERT INTO sazaefamily VALUES (4, '磯野ワカメ', '女性',9);
INSERT INTO sazaefamily VALUES (5, '穴子さん', '男性',27);
-- fetch some values
SELECT * FROM sazaefamily WHERE gender = '女性';
SELECT * FROM sazaefamily;
SELECT * FROM sazaefamily WHERE age>=25;

お疲れ様でした。ブレイクタイムPhotoは、

清瀬ひまわりフェスティバルのひまわりです。

→ブラウザだけでMySQLを即学習【サザエさん】その3へ


ご精読誠にありがとうございました。

【オススメ入門書】
3ステップでしっかり学ぶ My SQL入門

MySQL自作サンプル集へ戻る

写真クリエイターとしての活動
自己紹介

05 アセンブラCASL2「LOVE」をループと条件判断で取り出す

この記事ではアセンブラ言語で、文字コードの比較を使って文字列の中から大文字の英字である、「LOVE」を取り出すことを学べます。

単調な勉強ではありますが、「推し」がいる方は推しの方への思いを込めて手を動かして頂けたらと思います。

この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。

上記ような、英字と数字が混在した文字列の中から、文字コードを比較して、英字のみを取り出します。

コードを掲載する前に、各汎用レジスタがどのような動きをするのか、図解で掲載致します。

数字の文字コードは、’1’が「0031」、’2’が「0032」・・・’9’が「0039」です。
それに対して英語の大文字は、’A’が「0041」、’B’が「0042」・・・’Z’が「005A」になります。

今回抽出する文字列の、LOVEは、
‘L’…「004C」
‘O’…「004F」
‘V’…「0056」
‘E’…「0045」
になります。

元の文字列(BEFORE)の「9L23OV6E81」の中から、英文字である「L,O,V,E」を取り出します。
どのようにして取り出すのかというその仕組みを簡単に書くと、

・文字コードの比較を行い、数字や記号の場合はスキップする
・英字の場合は出力文字列(AFTER)に格納する

と言った仕組みです。

比較を使って、文字コードが数字の’9’以下の文字の場合は処理をスキップ致します。
前述の通り英文字の文字コードは、数字よりも大きいで、その文字コードの大きさで、英文字か数字かを判断しています。

文字コードについて不安な方は、こちらの外部記事が分かりやすいです。

文字列の位置が分かるような図を掲載致します。

(下の図を見ても分かりづらい場合でも、プログラムを動かしながら1つずつトレースをして行きますので、安心して下さい。)

元の文字列「BEFORE」は、0号室、1号室…9号室まであります。
全部で10文字分なので、BEFOREの文字数BLENにはDCで10を入れます。

出力用の文字列「AFTER」は、0号室、1号室…3号室まであります。


GR1は、元の文字列BEFOREの先頭アドレス「0号室」を指します。

GR2は、出力用文字列AFTERの先頭アドレス「0号室」を指します。

GR4は、GR1が指す「元の文字列BEFOREの0号室の住人」の「’9’」さんを安否確認するように見つめています。

GR3は処理した文字数のカウントに使います。

元の文字列BEFOREの文字数が10文字ですので、処理した文字数をカウントするGR3が10と等しくなった時に、FINラベルに分岐してループを抜けた後に出力処理に移ります。


最初は処理した文字数のカウントのGR3の値は0でBEFOREの文字の長さ(BLEN)の10文字より小さいので、ループの処理を行います。

ループの中で、 GR4が見ている「’9’」さんが「’0’(ゼロ)」さんより小さいか
どうかの判断します。(小さい場合は、「’!’」や「スペース」などの記号です。)
小さくは無いので、このまま進めます。

「’9’」さんは「’9’」と等しいかを判断します。
当てはまったので、英文字ではないことが分かります。
つまり、出力すべき「L,O,V,E」ではないので、処理せずにSKIPへ行きます。

SKIPしたところでは、GR1を0号室から1号室に進めます。

処理した文字数を1つ増やすので、カウントに使うGR3の値が0から1になります。

JUMP命令で、LOOPに戻ります。


ループを続けるのかの判断で、先ほどの図の通り処理した文字数のカウントに使っているGR3が1で、BEFOREの文字の長さBLENの10文字よりも小さいので、ループの処理を行います。

GR1の値が先頭アドレスの0号室から、1つ移動したので、GR1が1号室を指し示します。
今度はGR4は、「’9’」さんの隣にいる「’L’」さんを、安否確認する様に見ています。


GR4が安否確認する様に見ている、 「’L’」さんが英大文字かどうか判断します。
‘L’さんの文字コードは「004C」で、’9’の「0039」よりも大きいので、出力用の文字列のAFTERに格納する処理を行います。


出力用の文字列AFTERのGR2が指し示す0号室に、「’L’」さんを入室許可します。


出力用の文字列AFTERを1つ進めて、GR2は1号室を指します。

元の文字列BEFOREも1つ進めて、GR1は2号室を指します。

処理した文字を1つ増やすので、 GR3が2になります。

その後、またループに戻ります。

ということを繰り返して、「L,O,V,E」と取り出していきます。

それではソースを掲載して、実際にシミュレーターで動かして行きます。


上記の図を見て分かりにくいと思われても、1つ1つトレースをしてシミュレーターの図でレジスタの値の変化が分かるようにスクショしましたので、安心して下さい。

TEST START

 RPUSH
 LAD GR1,BEFORE ;GR1に元の文字列BEFOREの先頭アドレスを格納する
 LAD GR2,AFTER ;GR2に出力用の文字列AFTERの先頭アドレスを格納する
 LAD GR3,0 ;GR3に処理した文字数をカウントする

;<<ここからループ>>
LOOP CPL GR3,BLEN;GR3のカウント数と元の文字列の長さBLENを比較する
 JZE FIN;GR3のカウントが元の文字列の長さと等しかったらFINに分岐する
 LD GR4,0,GR1;GR4に元の文字列からGR1が指し示すアドレスに入っている文字を取得する
 CPL GR4,='0';GR4の文字と'0'(ゼロ)を比較する
 JMI SKIP;'0'より小さかったらSKIPへ分岐する
 CPL GR4,='9';GR4の文字と'9'を比較する
 JMI SKIP;'9'より小さかったらSKIPへ分岐する
 JZE SKIP;'9'と等しかったらSKIPへ分岐する

;出力すべき英字なので出力用の配列に格納する
 ST GR4,0,GR2;GR4の文字を出力用の文字列AFTERに格納する
 LAD GR2,1,GR2;出力用の文字列AFTERを指し示すGR2を1つ先に進める


;数字・英字共通のSKIPラベル
SKIP LAD GR1,1,GR1;元の文字列BEFOREを1つ先に進める
 LAD GR3,1,GR3;処理した文字数のカウント用のGR3をインクリメント
 JUMP LOOP;ループへ戻る


;<<ループはここまで。>>

;ループを抜けた後の出力処理
FIN OUT BEFORE,BLEN;元の文字列を出力する
 LAD GR1,AFTER;GR1に出力用文字列AFTERの先頭アドレスを読み込む
 SUBL GR2,GR1;出力用文字列AFTERの現在のアドレスGR2から先頭アドレスのGR1を引く
 ST GR2,ALEN;上で求めた文字数を出力用文字列の文字数ALENに格納する
 OUT AFTER,ALEN;出力用の文字列AFTERを出力する

BEFORE DC '9L23OV6E81';元の文字列BEFORE
BLEN DC 10 ;元の文字列の文字数BLENを10文字とする
AFTER DS 20;出力用文字列AFTERの領域を20確保
ALEN DS 1;出力用の文字数AFTERの領域を1確保


 RPOP
 RET

 END

それでは実行して、シミュレーターを動かして1つずつトレースをしていきます。

GR1に、元の文字列BEFOREの先頭のアドレスが入ります。
(GR1とGR2の値は、実行環境によって異なりますので、増加の状態以外は気にしないで下さい)

GR2に出力する文字列AFTERの先頭のアドレスが入ります。

GR3に文字処理のカウント数ゼロが入ります。

GR3の0と元の配列の長さBLEN(=10)を比較し、GR3の方が小さいので、サインフラグSFがマイナスになります。

GR3はBLENと等しくないので、分岐はしません。

GR4に元の文字列BEFOREの最初の文字である’9’が入ります。
‘9’の文字コードは「0039」です。

GR4の文字’9’と’0’を比較します。
小さくないので、サインフラグはSFはそのままです。

そのため、分岐はしません。

次に、GR4の文字’9’と’9’が等しいか比較します。
等しいのでゼロフラグZFが立ちます。

JMIで9より小さい、JZEで9と等しい場合はSKIPに分岐します。
アセンブラでは他の言語みたいに「<=」で以下という表記はできない為、
以下ということは、「より小さい」と「等しい」の2つの処理に分割して記述しています。

この場合、’9’「以下」なのでJZEでSKIPに分岐して、出力するLOVEではないので、出力に関する処理を飛ばしています。

SKIPでは、元の文字列BEFOREを1つ先に進めます。

処理した文字数のGR3をインクリメントします。

ループに戻ります。

ループの先頭では、処理した文字数GR3の1と文字列BEFOREの長さBLENの10を比較します。

GR3の方が小さいので、SFのフラグが立ちました。
BLENと等しくないので、このままループを続けます。

GR4に、BEFOREの文字列 ‘L’ を取得します。
‘L’ の文字コードは「004C」です。

‘L’が’0’や’9’以下かどうか比較します。
小さくないのでSKIPに分岐せずに出力用文字列AFTERへの格納処理を行います。

GR4の文字’L’をAFTERに格納します。

AFTERを1つ先へ進めます。

と繰り返して行き、文字列処理カウントのGR3が9になる所まで飛ばして、そこからトレースします。



シミュレーターの値はこの様になっています。

GR4にBEFOREの最後の文字 ‘1’ が入りました。
‘1’ の文字コードは「0031」です。

GR4の’1’は’0’より大きいですが’9’より小さいので、SFフラグが立ってSKIPに分岐します。

元の文字列BEFOREを1つ進めます。

処理した文字数のGR3をインクリメントします。

ループに戻ります。

処理した文字数のGR3と文字数BLENの10を比較し、等しいのでゼロフラグZFが立ちます。

JZEよりFINに分岐して文字列を出力します。

元の文字列BEFOERを出力します。

出力用の文字列AFTERの先頭アドレスをGR1に入れます。

出力用の文字列の現在のアドレスGR2から先頭のアドレスGR1を引きます。
GR2にAFTERの文字数が4文字であることが求まります。

GR2の求めた文字数をAFTERの文字数ALENに格納します。

AFTERを出力します。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。

恵比寿ガーデンプレイスのシャンデリアです。
クリスマスイルミネーションで、フランスのクリスタルメーカー、バカラのものです。


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

このコードですと、出力する文字列をあなたの推しの名前にしてみたら、きっと楽しいですし、理解も深まると思います!

TEST START

 RPUSH
;GR1に元の文字列BEFOREの先頭アドレスを格納する
;GR2に出力用の文字列AFTERの先頭アドレスを格納する
;GR3に処理した文字数をカウントする

;<<ここからループ>>
;GR3のカウント数と元の文字列の長さBLENを比較する
;GR3のカウントが元の文字列の長さと等しかったらFINに分岐する
;GR4に元の文字列からGR1が指し示すアドレスに入っている文字を取得する
;GR4の文字と'0'(ゼロ)を比較する
;'0'より小さかったらSKIPへ分岐する
;GR4の文字と'9'を比較する
;'9'より小さかったらSKIPへ分岐する
;'9'と等しかったらSKIPへ分岐する

;出力すべき英字なので出力用の配列に格納する
;GR4の文字を出力用の文字列AFTERに格納する
;出力用の文字列AFTERを指し示すGR2を1つ先に進める


;数字・英字共通のSKIPラベル
;元の文字列BEFOREを1つ先に進める
;処理した文字数のカウント用のGR3をインクリメント
;ループへ戻る


;<<ループはここまで。>>

;ループを抜けた後の出力処理
;元の文字列を出力する
;GR1に出力用文字列AFTERの先頭アドレスを読み込む
;出力用文字列AFTERの現在のアドレスGR2から先頭アドレスのGR1を引く
;上で求めた文字数を出力用文字列の文字数ALENに格納する
;出力用の文字列AFTERを出力する

BEFORE DC '9L23OV6E81';元の文字列BEFORE
BLEN DC 10 ;元の文字列の文字数BLENを10文字とする
AFTER DS 20;出力用文字列AFTERの領域を20確保
ALEN DS 1;出力用の文字数AFTERの領域を1確保


 RPOP
 RET

 END

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

恵比寿ガーデンプレイスのクリスマスイルミネーションです。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

フォトストック写真ACさんのプロフィールページ

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

03アセンブラCASL2右シフトで、偶数は「北海道」、奇数は「沖縄」旅行!!

この記事ではアセンブラ言語で、偶数と奇数の判別について掲載しております。
ある数を右にシフトすると、偶数の場合はオーバーフローせず、奇数だったらオーバーフローするので、分岐により出力メッセージを分けます。
オーバーフローについては、

このシフトやオーバーフローについて、後ほど具体例を用いて詳しく説明致しますが、オーバーフローって何!?と気になった方は、こちらの外部記事が分かりやすいのでオススメです。(基本情報技術者試験では勿論、ITパスポート受験の際にもお世話になったサイトです。)

さて、行動制限も無くなって東京に住んでいる私は、アセンブラで偶数でしたら北海道に、奇数でしたら沖縄に旅行したい気分です♪

そんな、旅行気分が味わえるサブルーチンを作って見ました。

この記事では、こちらのWebのシミュレーターを使っています。
ダウンロードすることなく、素早くアセンブラの勉強が出来る、私が使った中で1番便利なシミュレーターです。

具体的には、GR1に設定された数が、
偶数の場合は「HOKKAIDO」
奇数の場合は「OKINAWA」
と出力します。

偶数は英語でEVEN、奇数はODDですので、それらをラベル名に使います。

偶数の例として、10進数の「4」は、2進数で(0100)、
奇数の例として、10進数の「7」は、2進数で(0111)を挙げます。

偶数を右にシフトすると、4でしたら「0100」→「0010」になって、
右に落っこちるのは、「0100」の一番下の桁である「0」ですよね。
つまり、オーバーフローしないです。

奇数を右にシフトすると、7でしたら「0111」→「0011」になって、
右に落っこちるのは、「0111」の一番下の桁である「1」ですよね。
つまり、オーバーフローします。

オーバーフローした時のジャンプ命令「JOV」を使って、出力する文字を分岐します。

まずは、偶数の例。

TEST START
 RPUSH

 LAD GR1,4;←GR1に数を指定

 SRL GR1,1;1ビット右へシフト
 JOV OVER;オーバーフローした場合はラベルOVERへジャンプ

 OUT EVEN,LEN;偶数の旅先「北海道」を出力
 JUMP FIN;ラベルFINへジャンプ

OVER OUT ODD,LEN2;奇数の旅先「沖縄」を出力

FIN RPOP;終了のFINラベル
 RET

EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数

ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数

 END

4行目のところで、GR1に偶数の例として「4」を設定しています。

実行すると、GR1に4が入りました。


SRLで右シフトすると、GR1が2になりました。

10進数の「4」は2進数では「0100」なので、右に1ビットシフトすると「0010」になり、右に落っこちたのは「0」なのでオーバーフローせず、OFフラグは0です。

右側のコンソールでは、「HOKKAIDO」と出力されました。

シフトについての上記の説明が分かりにくかった場合、こちらの外部記事ではYouTubeによる動画の解説もありますので、気になった方はご覧下さい。

次にGR1に、奇数である7を設定した場合の例です。
4行目のGR1の値を偶数から奇数の「7」に設定した所以外は、同じコードです。

TEST START
 RPUSH

 LAD GR1,7;←GR1に数を指定

 SRL GR1,1;1ビット右へシフト
 JOV OVER;オーバーフローした場合はラベルOVERへジャンプ

 OUT EVEN,LEN;偶数の旅先「北海道」を出力
 JUMP FIN;ラベルFINへジャンプ

OVER OUT ODD,LEN2;奇数の旅先「沖縄」を出力

FIN RPOP;終了のFINラベル
 RET

EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数

ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数

 END

実行すると、GR1に7が入りました。

右シフトすると、GR1が3になりました。
10進数「7」は2進数「0111」で、右シフトすると「0011」になって10進数の「3」になりました。

この時に、「0111」の一番下の桁の「1」が落っこちましたので、オーバーフローのフラフOFが1になりました。

オーバーフローをしたので、7行目のJOVの分岐で、12行目のラベルOVERにジャンプしました。

右側のコンソールには、「OKINAWA」が出力されました。

お疲れ様でした。
ここで一旦、写真で休憩を挟みます。


ここは、東京都立川市と日野市の境目の立日橋付近の多摩川土手で撮影した中央線です。

多摩川土手は、ランニングされている方も結構いらっしゃいました。

ここでは、通勤で良く見る電車と、特急や貨物列車も撮れました。
(2023年GWに撮影)


ここから、復習&アウトプットタイムです!!
下記のコードをシミュレーターにコピペして、コメントを頼りに先ほどのコードを覚えているか入力して見て下さい。

上手く動いたら、値などを好きなように変えて動かして見て下さい。

この復習は学習直後は勿論、明日など少し日を開けて行うと、更に効果的です!!

TEST START
 RPUSH

 ;←GR1に数を指定

 ;1ビット右へシフト
 ;オーバーフローした場合はラベルOVERへジャンプ

 ;偶数の旅先「北海道」を出力
 ;ラベルFINへジャンプ

;奇数の旅先「沖縄」を出力

FIN RPOP;終了のFINラベル
 RET

EVEN DC 'HOKKAIDO';偶数ラベル
LEN DC 8;文字数

ODD DC 'OKINAWA';奇数ラベル
LEN2 DC 7;文字数

 END

CASL2にはJOVやJUMP以外にも分岐命令があり、こちらの外部サイトがサンプル付きで分かりやすいです。

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

多摩モノレールです。
JR立川から立川南まで徒歩で行き、柴崎体育館で下車。
日野方面に南下して撮影しました。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

フォトストック写真ACさんのプロフィールページ

自己紹介


アセンブラ自作サンプルとFE出題範囲のアリゴリズムへ

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート