前回虹色ランタンに対し 「このように光ってね」というお願い事を文字で書きました。 このお願い事のことを普通「プログラム」と呼んでいます。 そこでこれからは普通にプログラムと表現することにします。
プログラムは一個一個の小さな命令が組み合わさって作られています。 その一個一個の命令を高速に実行していってるのです。
ここで前回と同じ
START: ledz 7 0 0 wait 25 ledz 0 7 0 wait 25 ledz 0 0 7 wait 25 jmp START |
というプログラムを考えます。
前回は START ボタンを押しましたが、今回は STEP ボタンを押してみましょう。
右上の小さな黒い表示が 4 つとも赤くなり、太く表示された行が一個下にずれました。
この太い行は「次に[STEP]が押されたら、この命令を実行する」という意味です。 さっきは ledz 7 0 0 が太かったので、それが実行されて次の行 wait 25 が太くなったのです。もう一度 STEP を押すと ledz 0 7 0 が太くなります。
このように STEP を押すことで一行ずつ実行されていく様子が分かるので、 プログラムがどのように動いているのか目で追っていくことができます。
以上のことを踏まえ、このプログラムがどのように動いているのか追ってみましょう。
この行は太くなることがありません。命令ではないためです。 ということでこの件については後回しにしましょう。
4 つの LED 全部を赤くしています。 ledz というのは「全部の LED の色を指定」という意味なのです。 そして 7 0 0 が赤を指しています。
しばらく待ってます。具体的には 0.5 秒ここで止まります。 現実では各命令は非常に速く実行されます。 wait が無いとせっかく LED を赤くしても、 人の目が「赤く光った」と認識する前に次の色が表示されてしまいます。 LED の色を変えたら人にそれを認識させるため適度な待ち時間が必要です。
4 つの LED 全部を緑にします。 0 7 0 は緑の意味です。
人の目に緑を焼き付けるために 0.5 秒止まります。
4 つの LED 全部を青にします。 0 0 7 は緑の意味です。
また 0.5 秒止まります。
二行目の ledz 7 0 0 にジャンプします。 通常プログラムは上から下に順番に実行されていきます。 その動きを変えるのが jmp という命令で、START と名付けた所に飛んでいきます。 一行目の START: とは「ここを START という名前にするね」という意味だったのです。
プログラムは電源が入っている間ずっと動いている必要があります。 この命令が無ければプログラムはこの次の行に書かれた命令を実行しようとします。 しかしそこには何も書かれていません。 以前書いた命令が残っているかもしれませんが、どんな命令か分かりません。 そのためプログラムがどう動くかは分かりません。 そのようなことにならないよう、プログラムはずっと動くように作らないといけません。 「終わり」という概念は無いのです。 一番最後に jmp START と書くとプログラムは常に 2〜7 行の間をぐるぐる回って止まることはありません。
この章で大事なことは以下の通りです