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は・・・

遊歩道の桜です。

写真素材素材【写真AC】

 

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

自己紹介


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

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

12 CASL2アセンブラで二重ループを使って階段を作ってみた。

この記事では、アセンブラ言語で1から9までの階段を作りながら、「二重ループ」と、「数値を数字に変換」を使った例を掲載しております。
インクリメントも利用して、階段を作ってみました。

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

過去問に取り組むまでのウォーミングアップにして頂けたら幸いです。
最初にこのサブルーチンの実行結果を表示します。

空の配列に、1を1つ、2を2つ…最後に9を9つ入れます。
1から9までの数値をGR1に設定します。

出力する配列にDANという名前を付けて、配列の先頭をGR2で指し示しました。
そのイメージです。

配列に格納する際、数値を数字にするのに「文字コード’0’」を加えています。
具体的には「1」を出力するのに、文字コードを「0031」にするので、文字コードが「0030」である’0’を加えております。
文字コードについては、こちらの記事が分かりやすいです。

文字コードを加算するのに、GR3を使いました。
1を1回、2を2回…9を9回と数字の分だけ配列に挿入する処理を繰り返す、内ループのカウンタをGR4にしました。
外ループでは、GR1で、1~9までインクリメントしています。

では、プログラミングです。

TEST START
 RPUSH
 LAD GR1,1; GR1に1を設定

LOOP1 LD GR3,GR1; 外ループ:LOOP1 文字出力用にGR3にGR1の値を読み込む
 LD GR4,GR1; 配列格納用にGR4にGR1の値を読み込む
 ADDL GR3,='0'; 数字を出力するのに文字コード’0’を加算する
 LAD GR2,DAN; 出力用の配列DANの先頭のアドレスをGR2に設定する


LOOP2 ST GR3,0,GR2 ;内ループ:LOOP2 数字を配列DANに格納する
 LAD GR4,-1,GR4 ;配列に出力する回数をデクリメント
 CPL GR4,=0 ;配列に出力する回数がゼロと等しいか
 JZE PRINTOUT ;数字を配列に格納する処理が終わったらラベルPRINTOUTに分岐する
 LAD GR2,1,GR2 ;配列の位置を次に進める
 JUMP LOOP2;内ループの先頭に分岐する 


PRINTOUT ST GR1,LEN; 配列の長さをLENに格納する
 OUT DAN,LEN; 配列を出力する
 LAD GR1,1,GR1; 次の数字を出力するのでインクリメントする
 CPL GR1,=9; 出力回数が9よりも大きいか比較
 JPL FIN; ↑の場合はFINへ分岐
 JUMP LOOP1; そうでない場合は外ループの先頭へ 


FIN RPOP
 RET

DAN DS 10;出力する配列を用意
LEN DS 1;出力する文字数

 END

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

外ループに入る前に、GR1に1が入りました。

<<外ループ LOOP1に入りました。>>

数値「1」を数字「’1’」に変換するのに使うGR3に1が入りました。

配列に格納する回数に使うGR4に1が入りました。

数字を出力するのに、’0’(文字コード0030)をGR3に加算されました。

出力用の配列の先頭アドレスがGR2に設定されました。
(実行環境によってアドレスは異なります。)

<<内ループ LOOP2に入りました>>

GR3の数字’1’(文字コード0031)が配列DANのGR2が指し示すアドレス(ここでは先頭アドレス)に格納されました。

配列に格納する残り回数であるGR4がデクリメントされました。

GR4の値がCPLで0と比較され、等しいのでゼロフラグが立ちました。

JZEより内ループを抜けて出力処理のラベルPRINTOUTに分岐しました。
文字数LENにGR1の値1が格納されました。

配列DANに格納された、’1’を出力しました。

次は2を出力するので、GR1がインクリメントされて2が入りました。

GR1に入っている2とCPLで9が比較され、2は9より小さいのでSFが立ちました。

<<外ループ LOOP1>>

外ループLOOP1の先頭に分岐しました。

文字コードを加算して数字に変換するのに使うGR3に2が入りました。

2を配列に格納する回数、2回を入れるGR4に2が入りました。

GR3に’0’(文字コード0030)が加算されて、0032になりました。

GR2に配列DANの先頭アドレスが設定されました。

<<内ループ LOOP2>>

GR3の数字’2’を配列DANのGR2が指し示すアドレスの所(この場合は先頭アドレス)に格納されました。

配列に格納される回数のGR4がデクリメントされました。

CPLで配列に出力される回数の残りGR4が0と等しいか比較され、この場合はGR4=1なので、分岐はしないで次に進みます。

配列のアドレスを1つ先に進めるので、GR2がインクリメントされました。

内ループの先頭に分岐します。


GR3に入った’2’が、GR2が指し示す配列のアドレス(この場合は先頭+1)の位置に格納されました。

配列に格納される回数であるGR4がデクリメントされました。

CPLでGR4の値が0と比較され、等しかったのでゼロフラグが立ち、内ループを抜け出力ラベルPRINTOUTに分岐します。


文字数ラベルLENに、GR1の値2が格納されます。

配列DANの「22」が出力されました。

次は3を出力するので、GR1がインクリメントされました。

CPLでGR1の3と9が比較され、まだ9回まで行っていないので、SFが立ちました。

外ループの先頭に行って、次は3が出力される処理になります。

あとは繰り返しなので、’9’が9回出力された直後まで進めます。
レジスタの値は、この様になっています。

GR1がインクリメントされます。

CPLでGR1が9と比較され、A(16進数の10)は9より大きいので、JPLでFINに分岐して、このサブルーチンは終わりました。

お疲れ様でした。
勉強のリフレッシュに、写真で息抜きを致します。

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

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

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

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

TEST START
 RPUSH
; GR1に1を設定

; 外ループ:LOOP1 文字出力用にGR3にGR1の値を読み込む
; 配列格納用にGR4にGR1の値を読み込む
; 数字を出力するのに文字コード’0’を加算する
; 出力用の配列DANの先頭のアドレスをGR2に設定する


;内ループ:LOOP2 数字を配列DANに格納する
;配列に出力する回数をデクリメント
;配列に出力する回数がゼロと等しいか
;数字を配列に格納する処理が終わったらラベルPRINTOUTに分岐する
;配列の位置を次に進める
;内ループの先頭に分岐する 


; 出力ラベルPRINTOUT 配列の長さをLENに格納する
; 配列を出力する
; 次の数字を出力するのでインクリメントする
; 出力回数が9よりも大きいか比較
; ↑の場合はFINへ分岐
; そうでない場合は外ループの先頭へ 


FIN RPOP
 RET

CASL2のおススメ本です。

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


恵比寿ガーデンプレイスです。

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

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

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

写真素材素材【写真AC】

 

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

自己紹介


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

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

平成28年春

この記事では、基本情報技術者試験の過去問を解いて、午前の点数と午後の学習ノートを公開しています。
字はかなり下手(でも汚くはないと思う。)ですが、午前87%、午後90%の一発合格ですので、もしかしたらお役に立てるかもしれません。

■ 関連記事 ■

基本情報技術者試験トップへ戻る
令和2年FE合格報告

アルゴリズム攻略法
午後試験対策おすすめ参考書
CBT試験
午前免除

◆ 午前 2020年6月7日(日)
  64/80…80点

テクノロジ系…38/50…76%
マネジメント系…10/10…100%
ストラテジ系…16/20…80%

◆午後

●セキュリティ

●ソフトウェア

●データベース

●ネットワーク

●ソフトウェア設計

●アルゴリズム

●アセンブラ

資格トップへ
基本情報技術者試験トップへ
令和2年6月、午前免除を受けま
息抜きに、写真で癒し(=^・^=)

11 アセンブラCASL2ループでドット、市松模様をお絵かき(=^・^=)

この記事では、アセンブラ言語で「多重ループ」を使った簡単なドット絵(市松模様)のサブルーチンと、おすすめの本の紹介を掲載しております。

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

COMET2のアセンブラのCASL2で、簡単なドット絵を作ってみたくて、
市松模様を作りました。
「X」の文字が入った2つの配列を使って、こんな感じに出力しました。

GR1が奇数の時は、配列 ODDA「X X X」と出力して、GR1の値が偶数の時は、配列 EVENA「 X X 」と出力し、交互に出力することで、市松模様を書いています。

GR1の値で振り分けて、市松模様を描くイメージ的は、こんな感じです。

GR1の値をラベルEVEN(偶数)とODD(奇数)に処理を振り分けています。
偶数か奇数かの判定は、GR1をGR2にコピーして、GR2を右に1ビットシフトして、オーバーフローすれば奇数、しなければ偶数にしています。

プログラムはこんな感じです。

TEST START
 RPUSH
 LAD GR1,1;GR1に1を読み込む

;<<市松模様の描画ループ>>
LOOP LD GR2,GR1;GR2にGR1をコピー
 SRL GR2,1;GR2を右に1ビットシフト
 JOV ODD;オーバーフローしたら奇数なので、ODDに分岐する

EVEN OUT EVENA,LEN;偶数だったら「 X X 」を出力
 JUMP SKIP;奇数の出力をスキップする
ODD OUT ODDA,LEN;奇数だったら「X X X」を出力
SKIP LAD GR1,1,GR1;GR1をインクリメント
 CPL GR1,=5;GR1を5と比較
 JPL FIN;5を超えた場合はFINへ分岐
 JUMP LOOP;ループ先頭へ分岐 

FIN RPOP
 RET

EVENA DC ' X X '
ODDA DC 'X X X'
LEN DC 5

 END

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

GR1に1が入りました。

GR2にGR1の値がコピーされました。

GR2の値が右に1ビットシフトして、1は奇数なのでオーバーフローしました。

ラベルODDに分岐して、配列ODDAが出力されました。

GR1をインクリメントしました。

GR1=2は、5より小さいのでサインフラグが立ちました

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

GR1の値が、GR2にコピーされました。

GR2が右に1ビットシフトして、偶数でのでOFフラグは立ちません。

偶数なので、配列EVENAが出力出来ました。

GR1がインクリメントされて、3になりました。

GR1=3は5より小さいので、このままループを継続します。

この様に繰り返していって、市松模様が描画されました。

お疲れ様でした。
勉強のリフレッシュに、写真で息抜きを致します。

東京駅丸の内のシャンパンゴールドのイルミネーションです。

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

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

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

TEST START
 RPUSH
 LAD GR1,1;GR1に1を読み込む

;<<市松模様の描画ループ>>
;GR2にGR1をコピー
;GR2を右に1ビットシフト
;オーバーフローしたら奇数なので、ODDに分岐する

;偶数だったら「 X X 」を出力
;奇数の出力をスキップする
;奇数だったら「X X X」を出力
;GR1をインクリメント
;GR1を5と比較
;5を超えた場合はFINへ分岐
;ループ先頭へ分岐 

FIN RPOP
 RET

EVENA DC ' X X '
ODDA DC 'X X X'
LEN DC 5

 END

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

東京駅です。

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

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

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

写真素材素材【写真AC】

 

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

自己紹介


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

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

平成28年秋

この記事では、基本情報技術者試験の過去問を解いて、午前の点数と午後の学習ノートを公開しています。
字はかなり下手(でも汚くはないと思う。)ですが、午前87%、午後90%の一発合格ですので、もしかしたらお役に立てるかもしれません。

■ 関連記事 ■

基本情報技術者試験トップへ戻る
令和2年FE合格報告

アルゴリズム攻略法
午後試験対策おすすめ参考書
CBT試験
午前免除

合格報告

◆ 午前 2020年6月5日(金)
  63/80…78点

テクノロジ系…41/50…82%
マネジメント系…6/10…60%
ストラテジ系…16/20…80%

◆午後

●セキュリティ

●ソフトウェア

●データベース

●ネットワーク

●ソフトウェア設計

●アルゴリズム

●アセンブラ

資格トップへ
基本情報技術者試験トップへ
令和2年6月、午前免除を受けました
息抜きに、写真で癒し(=^・^=)

04 CASL2アセンブラ 番町皿屋敷で納涼ループ

この記事では、アセンブラ言語で簡単なループとインクリメントをして、番長皿屋敷のお皿の枚数を数える例題を掲載しております。

怪談話で有名な、「1ま〜い」、「2ま〜い」・・・と数えていくのは、プログラミングの基礎トレーニングになると思います。

世間では「地球沸騰化」、なんて言っていますね。
多分2023年のトレンドになるのではないでしょうか。

毎日暑いので、アセンブラの勉強では涼しくなりたいです。
そこで、怪談話を題材に、プログラミングをしてみようと思いつきました。
個人的には「番町皿屋敷」は、プログラミングの中でもループの勉強になると思います。

1ま~~~い、
2ま~~~い、

そう、ループとインクリメントです!
アセンブラCASL2を使って基本情報技術者試験対策も兼ねて
下記の結果になるプログラミングをしてみました。

LADとLDの違いについては、こちらの外部記事が分かりやすいです。

TEST START
 RPUSH

 LAD GR1,1;GR1に1を設定

;<< ここからループ >>
LOOP LD GR2,GR1;GR2にGR1の数を読み込む
 ADDL GR2,='0';GR2の値に文字コード「'0'」を加算
 ST GR2,SARA;GR2の値をSARAに格納
 OUT SARA,LEN;皿の枚数を出力
 LAD GR1,1,GR1;GR1をインクリメント
 CPL GR1,=10;GR1が10まで達したのか比較(ループを続けるか否かの判断)
 JMI LOOP;GR1が10未満であれば、ループは続行

 OUT MOJI,LEN2;「サラ割れた」のメッセージ出力

 RPOP
 RET

SARA DS 1;皿に文字数1枠を確保する
TANI DC 'MA-I';皿の単位の数え方は「枚(まーい)」
LEN DC 5;1枚は「1MA-I」と5文字で表示
MOJI DC 'SARA WARETA!';「皿割れた」の文字列
LEN2 DC 12;上記の皿の文字列の字数

 END

それでは、このサブルーチンを実行していきます。
まず、GR1に1を設定します。

GR1はループカウンタ用に使って、GR2は皿の枚数の出力用に使うので、GR1の値をGR2に写します。
GR2にGR1の値を読み込みます。

GR2の値を使って、「1まーい」と出力したいのですが、そのためには文字コードの理解が必要になります。

紛らわしいのですが、「’1’」の文字コードは「0001」ではなく、「0031」です。
つまり、OUT命令で「1」と出力したいのであれば、文字コードを踏まえて「+30」してから出力します。

そこで、ADDL命令でGR2に「’0’」を足しておりますが、CASL2での「’0’」の文字コードは「0030」です。

この辺りの説明が分かりにくい際には、CASL2の文字コードについてこちらの外部記事が分かりやすいです。

ST命令で文字列SARAにGR2の「+30」をした値を格納してOUT命令で右側のコンソールに出力しています。

STの文字数は1文字、単位の「MA-I」は4文字なので、LENには合わせて5文字分出力出来るように5と設定しています。

現在GR1は1枚なので、LADを使ってインクリメントして、GR1の値を「2」にします。


その、インクリメントの仕組みなのですが、

LAD GR1,1,GR1

で、GR1に「GR1の値+1番地」の値アドレス値を送ることによって、GR1自身に、1加算のインクリメントをしています。


この仕組みについては、先ほどのLDとLADの違いの外部記事が参考になり、ロードアドレス命令を用いた加算については、こちらの外部記事に掲載されています。

ちょっと面倒だな〜〜と思われた方は、ループでのインクリメントのテクニックなんだな、程度に軽く流してもらっても大丈夫です。

インクリメントによって、GR1の値は1から2に1つ増えました。
CPLで「10」と比較して、10よりも小さかったらJMIでLOOPに戻ります。

現在GR1の値は「2」であり、2は10より小さいので、フラグのSFがマイナスとなり、LOOPに戻ります。

このSFがマイナスになった仕組みですが、アセンブラでは比較の時に減算が行われます。

CPL GR1,=10;GR1が10まで達したのか比較(ループを続けるか否かの判断)

ここで、GR1が2なので、10と比較するために「2-10=マイナスの値」と計算されて、SFフラグがマイナスなので「1」になったという仕組みです。

それで、JMIでマイナスになったのでLOOPまで戻って、このループをGR1の値が10未満の間は繰り返されます。



あとは繰り返しなので、「9まーい」が出力される所まで進めます。
現在、「8まーい」まで出力されていて、コンソールの表示はこのようになっています。

レジスタの値は、このようになっています。
GR1が「9」なので、10未満の為SFフラグが1であり、LOOPまで戻ってきました。

GR2にGR1の値が読み込まれます。

GR2に「’0’」を加算することによって、文字コードが30足されます。
「0009」から「0039」になって、文字「9」が出力出来るようになりました。

ST命令で、文字「9」をSARAに格納します。

OUT命令でコンソールに「9まーい」が出力されました。

LAD命令でGR1がインクリメントされて、「9」から「A」になりました。
16進数では、Aは10です。

16進数が苦手な方は、こちらの外部記事が分かりやすいです。

CPLで10になったGR1と10が比較され、ここでも減算が用いられ、GR1-10=0なので、ゼロフラグが立って1になりました。

なので、JMIによる分岐は行われずにループを抜けました。

ループを抜けた所で、「皿割れた」のメッセージが出力されます。

最後の「SARA WARETA!」ですが、
これは、そのお皿が ”さらわれた”と、皿が割れたのダジャレです。

ちょっと怖かったですか(笑)

これで少しでも体感温度下がりましたら夏を乗り切れそうです。

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

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


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

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

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

TEST START
 RPUSH

;GR1に1を設定

;<< ここからループ >>
;GR2にGR1の数を読み込む
;GR2の値に文字コード「'0'」を加算
;GR2の値をSARAに格納
;皿の枚数を出力
;GR1をインクリメント
;GR1が10まで達したのか比較(ループを続けるか否かの判断)
;GR1が10未満であれば、ループは続行

;「サラ割れた」のメッセージ出力

 RPOP
 RET

SARA DS 1;皿に文字数1枠を確保する
TANI DC 'MA-I';皿の単位の数え方は「枚(まーい)」
LEN DC 5;1枚は「1MA-I」と5文字で表示
MOJI DC 'SARA WARETA!';「皿割れた」の文字列
LEN2 DC 12;上記の皿の文字列の字数

 END


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

江ノ島の岩場です。
片瀬江ノ島駅から徒歩数分のところで船に乗れましたので、岩場まで行って来ました。

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

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

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

写真素材素材【写真AC】

 

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

自己紹介


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

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート

平成29年春

この記事では、基本情報技術者試験の過去問を解いて、午前の点数と午後の学習ノートを公開しています。
字はかなり下手(でも汚くはないと思う。)ですが、午前87%、午後90%の一発合格ですので、もしかしたらお役に立てるかもしれません。

■ 関連記事 ■

基本情報技術者試験トップへ戻る
令和2年FE合格報告

アルゴリズム攻略法
午後試験対策おすすめ参考書
CBT試験
午前免除

◆ 午前 2020年6月1日(月)
  65/80…81点

テクノロジ系…37/50…74%
マネジメント系…9/10…90%
ストラテジ系…19/20…95%

◆午後 9月11日(金)から9月13日(日)の期間に分けて解きました。
※点数は、配点を問題数で割って正解数をかけて計算しました。
※令和2年10月18日受験→延期
合計51点(涙涙涙涙涙)

● セキュリティ…9/12


● ハードウェア…7/12


● データベース…7/12


● ネットワーク…3/12


● ソフトウェア設計…7/12


● アルゴリズム…8/20


● アセンブラCASL2…10/20

資格トップへ
基本情報技術者試験トップへ
令和2年6月、午前免除を受けました
息抜きに、写真で癒し(=^・^=)

平成29年秋

この記事では、基本情報技術者試験の過去問を解いて、午前の点数と午後の学習ノートを公開しています。
字はかなり下手(でも汚くはないと思う。)ですが、午前87%、午後90%の一発合格ですので、もしかしたらお役に立てるかもしれません。

■ 関連記事 ■

基本情報技術者試験トップへ戻る
令和2年FE合格報告

アルゴリズム攻略法
午後試験対策おすすめ参考書
CBT試験
午前免除

◆ 午前 2020年5月30日(土)
  66/80…82点

テクノロジ系…41/50…82%
マネジメント系…9/10…90%
ストラテジ系…15/20…75%

◆午後 9月4日(金)から9月6日(日)の期間に分けて解きました
※点数は、配点を問題数で割って正解数をかけて計算しました。
※令和2年10月18日受験
合計64点

セキュリティ…4/12
ハードウェア…12/12
データベース…9/12
ネットワーク…9/12
ソフトウェア設計…4/12
アルゴリズム…16/20
CASL2…10/20

◆午後のトレースなどのノート公開
過去問を解いて、解き方を自分が分かるようにまとめたノートを
出来る範囲で公開します。

●セキュリティ

●ソフトウェア

●データベース

●ネットワーク

●ソフトウェア設計

●アルゴリズム

●言語(アセンブラ)

メインメニューに戻る
資格トップへ
基本情報技術者試験トップへ
令和2年6月、午前免除を受けました
息抜きに、写真で癒し(=^・^=)

平成30年春

この記事では、基本情報技術者試験の過去問を解いて、午前の点数と午後の学習ノートを公開しています。
字はかなり下手(でも汚くはないと思う。)ですが、午前87%、午後90%の一発合格ですので、もしかしたらお役に立てるかもしれません。

■ 関連記事 ■

基本情報技術者試験トップへ戻る
令和2年FE合格報告

アルゴリズム攻略法
午後試験対策おすすめ参考書
CBT試験
午前免除

◆ 午前 2020年5月25日(月)
  61/80…76点

テクノロジ系…36/50…72%
マネジメント系…8/10…80%
ストラテジ系…17/20…85%

◆午後 8月28日(金)から8月30日(日)の期間に分けて解きました
※点数は、配点を問題数で割って正解数をかけて計算しました。
※令和2年10月18日受験
合計75点

セキュリティ…9/12
ハードウェア…12/12
データベース…9/12
ネットワーク…6/12
ソフトウェア設計…9/12
アルゴリズム…20/20
CASL2…10/20

◆午後のトレースなどのノート公開
過去問を解いて、解き方を自分が分かるようにまとめたノートを
出来る範囲で公開します。

●セキュリティ

●ハードウェア

●データベース

●アルゴリズム

●ソフトウェア設計

●ネットワーク

●アセンブラ

メインメニューに戻る
資格トップへ
基本情報技術者試験トップへ
令和2年6月、午前免除を受けました
息抜きに、写真で癒し(=^・^=)

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】

 

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

自己紹介


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

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


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



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

午前免除試験

午後試験のオススメ本

スコアレポート