Printf ("String"); をマスターする。

簡単そうで面倒な文字や数字の表示

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文字と変数の
表示の違いが分かれば終わり。

CUSPアセンブラに戻る

 


FORループをマスターする。

結構引っかかるのがこの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終了

これはforループ1
こっちがforループ2
を示しています。

ちなみにこれはCで書くと

for (int a=0; a<10; a++)
    for (int b=0; b<10; B++){
    }


となります。

同じ事を何回も繰り返していけば多重ループは完成です。

CUSPアセンブラに戻る