どのような2進数でどう動くかはコンピューターによって違います。
IchigoJamで使っているコンピューターは、16コの0か1のカタマリ(16bit/16ビット)で動きをコントロールします。
0011000000000001
これはR0レジスタというコンピューターの一時記憶の1番目に1を足すというマシン語です。
最初の5bitが足し算をしろという命令コード、次の3bitが使うレジスタの番号、後に続く8bitが足す数です。
00110 000 00000001
これをPOKE文を使ってメモリに書き込みます
POKE#700,`00000001,`00110000
#700はメモリの位置を表します。`は2進数で数値を表します。
下位の8bitを先に、上位の8bitを後に書くのがこのコンピューターのルールです。
動かすにはもう1つ命令が必要です。IchigoJamからの呼び出しから戻って来いという命令です。
(BASICのGOSUBに対して、RETURN的なもの)
0100011101110000
この呼び出し元に戻るマシン語も同じようにメモリに書き込みます。
POKE#702,`01110000,`01000111
準備ができたので実行してみます。
?USR(#700,1)
結果に正しく2と返って来ましたか?
マシン語は間違えると、IchigoJamのシステム自体が停止してしまいます。
安全策が無い分、コンピューターのフルパワーが出せるのがマシン語の最大のメリットです!
長いプログラムをつくった時は、保存してから動かしましょう。
USRコマンドは呼び出しメモリ位置と、渡す数を指定します。100を渡して結果を確認してみてください。
?USR(#700,100)
メモリを書き換えて5足すプログラムに変更してみましょう。
POKE#700,5 ?USR(#700,100)
足す数を変更できました。
このような計算命令や、計算した結果によって処理を変更する命令などのマシン語でコンピューターは動いているわけです。
- 連載、IchigoJamではじめる、ARMマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!