どのような2進法表現でどう動くかはコンピューターによって違います。
IchigoJamで使っているコンピューターは、16コの0か1のカタマリ(16bit/16ビット)で動きをコントロールします。
0011000000000001
これはR0レジスタというコンピューターの一時記憶の1番目に1を足すというマシン語です。
最初の5bitが足し算をしろという命令コード、次の3bitが使うレジスタの番号、後に続く8bitが足す数です。
00110 000 00000001
これをPOKE文を使ってメモリに書き込みます。(IchigoJam web でも試せます)
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を光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法
12. レジスタ不足に上位レジスタとスタック操作
13. コンパイラはじめのいっぽ、EVAL実現法とマシン語生成
14. サイズを取るかスピードを取るか、割り算のアルゴリズムとマシン語実装
15. マシン語化で1万倍速!? セットで学ぶアルゴリズムとコンピューター
- 参考リンク
命令一覧「Cortex-M0 テクニカルリファレンス マニュアル - Arm」
マシン語の仕様「Armv6-M アーキテクチャ リファレンス マニュアル - Arm」 - 登録するとダウンロードできます
マシン語の仕様(日本語)「Armv5 Architecture Reference Manual Japanese - Arm」 - バージョン違いですが、日本語です
Arm Cortex-M0 1,500円 BASICパソコン 「IchigoJam」
福野ツイート「プログラミングをC言語からはじめるのは、免許取っていきなりランボルギーニ乗るようなもの」