簡単そうで面倒な文字や数字の表示
Printf ("STRING");
画面に STRING と表示する。
LDA# 'S'
JSR PUT_CHR
LDA# 'T'
JSR PUT_CHR
LDA# 'R'
JSR PUT_CHR
LDA# 'I'
JSR PUT_CHR
LDA# 'N'
JSR PUT_CHR
LDA# 'G'
JSR PUT_CHR
実行結果 |
STRING > |
以上で終わり。簡単ですね。次、
int a=10;
Printf ("SUM=%d",a);
%dにはaの値が代入されて表示されます。
LDA# 10
STA a
LDA# 'S'
JSR PUT_CHR
LDA# 'U'
JSR PUT_CHR
LDA# 'M'
JSR PUT_CHR
LDA# '='
JSR PUT_CHR
LDA a
JSR PUT_NUM2
以上です。ここでJSR PUT_NUMにしてしまうと
改行されてしまうので注意。
実行結果 |
SUM=10 > |
間違ってJSR PUT_NUMにすると |
SUM=10 > |
となります。
最後に組み合わせてみます。
int a=5,b=7;
printf ("RES\na=%d b=%d\nEND."a,b)
LDA# 5
STA a
LDA# 7
STA b
LDA# 'R'
JSR PUT_CHR
LDA# 'E'
JSR PUT_CHR
LDA# 'S'
JSR PUT_CHR
JSR PUT_NL
LDA# 'a'
JSR PUT_CHR
LDA# '='
JSR PUT_CHR
LDA a
JSR PUT_NUM2
LDA# 'b'
JSR PUT_CHR
LDA# '='
JSR PUT_CHR
LDA b
JSR PUT_NUM
LDA# 'E'
JSR PUT_CHR
LDA# 'N'
JSR PUT_CHR
LDA# 'D'
JSR PUT_CHR
実行すると |
RES a=5 b=7 END > |
PUT_NUMとPUT_NUM2文字と変数の
表示の違いが分かれば終わり。
結構引っかかるのがこのFORループです。
ここは、多重ループをマスターするのが目的です。
早速Cから
for (int a=0; a<10; a++){
}
まずこの命令の解説です。
for文は3つのパートに分けて考えます。
for (初期化; 繰り返す条件; 戻るときにする処理){
}
for文の有効範囲は{}でくくられているところ、もしくはfor文の
一行下の命令までです。
色分けするとこんな感じ。
main ()
{
for (int a=0; a<2; a++)
for (int b=0; b<5; B++){
printf ("a");
}
printf ("\nEND.");
}
この部分は最初のfor文の有効範囲、
この部分は2個目のfor文の有効範囲です。
実行すると |
aaaaaaaaaa END. |
という具合になります。
ここから一々考えるのは面倒なのでForループテンプレでも用意しましょう。
for (int a=0;
a<10;
a++){
}
FORループテンプレ | |
LDA# 0 STA a for: LDA a CMA# 10 JGE next FORループの内容 INC a JMP for next: |
0を読み込む 変数 a にACCの値(0)をセット ACCに変数 a の値を読み込む 10と比べる 10と等しいか大きければ終わり 内容を書く 変数 a に1を足す ラベル for にジャンプ ループ終了 |
以上がテンプレです。
ちなみにa<10などの変換が分からないというときは
< | JGE |
> | JLE |
<= | JGT |
>= | JLT |
この変換表を使いましょう。
もちろんFORループの内容にこのテンプレを入れる事も出来ます。
二重ループですね
二重テンプレ | |
LDA# 0 STA a for1: LDA a CMA# 10 JGE next1 FORループ1の内容 LDA# 0 STA b for2: LDA b CMA# 10 JGE next2 FORループ2の内容 INC b JMP for next2: INC a JMP for next1: |
0を読み込む 変数 a にACCの値(0)をセット ACCに変数 a の値を読み込む 10と比べる 10と等しいか大きければ終わり 内容を書く 0を読み込む 変数 b にACCの値(0)をセット ACCに変数 b の値を読み込む 10と比べる 10と等しいか大きければ終わり 内容を書く 変数 b に1を足す ラベル for にジャンプ ループ2終了 変数 a に1を足す ラベル for にジャンプ ループ1終了 |
ちなみにこれはCで書くと
for (int a=0; a<10; a++)
for (int b=0; b<10; B++){
}
となります。
同じ事を何回も繰り返していけば多重ループは完成です。