値が、USRコマンドの値となって、表示されます。アーキテクチャーのLPC1114の最大動作周波数は50MHz、IchigoJam標準の設定では48MHzで動かしています。1Hzは、1秒間に1回という単位、M(メガ)は、100万の意味。このマシン語をいい感じに生成するプログラムのことをコンパイラやランタイムと呼び、C言語をはじめ、いろいろな言語が動いている裏っ側となります。RISC-Vなど、CPUによってマシン語の違いはありますが、基本は同じです。マシン語遊んでみたい人は、こちら「はじめてのマシン語」をどうぞ!マシン語も分かったし、いろいろ作ってみたい人にオススメは、JavaScript。山と川と光ファイバーのまち、神山町。作ったり、使ってもらったりするこの楽しさ、病みつきになって早34年。飽きる兆候がありません。IchigoJam、なかなかの速さで計算しますね。IchigoJamのCPU、1秒間に5000万回だったはず?そうです、BASICという言語は自転車の補助輪のようにやさしく丁寧にまちがいがあったら教えるために、実はこれでもゆっくり動いています。背伸びして、コンピューターが分かる言葉「マシン語」を使ってみましょう。大丈夫、こちらを間違えないよう、ただ打つだけでOKです。LET[0],#2100,#1841,#3801,#D1FC,#4608,#4770:?USR(#800,100)でてくる答は同じですが、速さが全然違いますね!これが100円くんの真の力です。お互いのレーザーカッターや3Dプリンター用のデータを交換したり、Hana道場とのコラボできたらおもしろそう。こちらが噂の「神山まるごと高専」の校舎候補、大きい!部室でも何でも遊び放題!?鮎喰川(あくいがわ)を挟んだ向かい岸に寮が並ぶ予定とのこと山の中に秘密基地!?なんと手作りのサウナ!杉の木を切り開き、木材や薪にするリアルマイクラな世界!灰は撒いて新たな木への栄養にする循環型な遊び場。寄るステキなお店がたくさん!ご案内いただいたグリーンバレー大南さん、キネトスコープ廣瀬と!アメリカからの移住者によるブッガカフェ!おじいちゃんスペシャルという、ベトナムコーヒー風をいただく。近くでは集合住宅新築中!人が集まる熱い町!自然と人とコンピューターにがっつり触れ合うのが21世紀流の学び=遊び。#asmtankaかわいく思えるようになったx86マシン語、深みにハマって行き着いた「アセンブラ短歌」57577の5行、31byteで動くマシン語で、2byte以上の命令が行をまたいではいけないというストイックなルールが良い!一句詠んでみました。32bit)コンピューターの凄さを一番すぐに感じられるのは、繰り返し。人間では不可能な速さで正確無比に繰り返される様を見せつけ、それが自分の指示によるものだと体感したものを虜にしてしまう。10アセンブラ和歌アセンブラ和歌と繰り返しから誕生した、WakaAssembly、WebAssemblyっぽくて輸出しやすいかも。CatalinaにOSアップデートで動作しなくなってしまう、macOS最後の32bitアプリの記念に。出してちゃんと止まり、現代OSのありがたみを感じる。#x86マシン語秘伝の書を片手にx86マシン語入門が楽しい。Z80と8086のレジスタ対応表、根っこが同じと分かれば怖くない。ver.)」を片手に、x86の入門として、16bitのリアルモード向けのbootBASICをmacOSの32bitアプリへと移植。パスカルの三角形が動いた!bootBASICは、使える命令も最小限、マルチステートメントもなしのシンプルなBASIC。使う形にしてできあがり。よって瞬時にバイナリ化され、即動作。スピード感が気持ちいい。ver.)」1KBの半分、512byteにコンパクトに収めるためのマシン語の基本や、テクニックなど丁寧に解説された本がステキでした!32bit化でEが付き、64bit化してRが付きと拡張されはしてますが、8bitの名機Z80(1976年)や、16bitアーキテクチャーの王様8086(1978年)の面影、しっかり残ってます。iシリーズまで、脈々と続くx86アーキテクチャ。実は、誕生1978年と私と同い年。RISC-Vのシンプルさと合わせて引き合いに出される古の命令「AAA」を動かしてみました。CPUである8086向けに、変更、セグメントなどx86ならではの項目が追加されている。Z80同様、古典と思いきや、普通に現代のMacでも普通に使えてしまうことに驚きます。AAA命令もちゃんと載ってました!2進法/16進法が基本のコンピューターと、10進法が基本の人をつなぐ命令の一つ。0から15までの数を2byte2桁表現にしてくれる便利命令でした。0105こちら0から15までをAXレジスタにセットして、AAA命令を通した結果です。確かに2byteになってくれると表示しやすくて便利です。このような基本的な部分は一度作ってモジュール化してしまえば、再度作る必要はないので、専用の命令はリソースの無駄になります。macho32)でコンパイルしています。BX144倍=128倍+16倍であることを利用して、シフトと足し算命令を使って実現しています。8086には掛け算命令MULがあるにも関わらずなぜこのテクニックが必要だったか?秘伝の書記載の仕様によると、16bitの掛け算(MUL)にかかるクロック数はなんと118〜133。1bitシフト(SHL)も9クロックかかるとはいえ圧倒的に速いわけです。現代CPUは掛け算も足し算も1クロックで終了するので、このテクニック自体は不要です。BXと書けばもっと短く、高速です。実は、この元になったZ80マシン語秘伝の書でも同じ内容があって、Z80には1bitシフトしかないので、ベタ移植したままになってしまったと想像。(追記、・・・違いました。8086にはイミディエイトのシフトは1限定。上記は80186から加えられた命令でした。クロックと遅く、速度を取るなら秘伝書記載の通りが正解でした。#riscv人気のArmマシン語入門の「つぎのいっぽ」ハンドアセンブルをRISC-Vでやってみました。著者、デイビッド・パターソン氏は、RISC生みの親!せっかくなのでハンドアセンブルしやすく実行効率の良い、16bitの圧縮命令拡張RV32Cを使いたいので、以前使用したエミュレーターにC拡張を勉強ついでに追加実装。RETRISC-VのC言語呼び出し規約では、R10が第一引数で返り値となり、R11も一時レジスタとして使用可能なので、R10/R11を使用。C拡張の命令のみを使ってasm15r表記で作成。Cortex-M0用、asm15表記ですが、ほぼ同じですね。RETRISC-Vにはフラグがない代わりに分岐命令で比較が可能です(比較した結果を0か1かで代入する命令でキャリーフラグを代用できます)。足りない命令は、32bit命令を使えばOKなので、割り切ったコンパクトな設計が美しい。RISC-Vマシン語表」を見ながらハンドアセンブルします。GitHub)ArmのThmubと違って、C拡張はハードウェアで実装する別名的扱い。使われる命令に絞って実装されており、32bit命令と併用できるのが特徴。400ゲートで実装できると言うだけあって、C言語での実装も約200行とコンパクト。GitHub)16bit命令を使うことで30%ほど容量が削減できて、ArmのThumbとほぼ近いサイズくらいになります。レジスタを複数PUSHするなどの命令を削減したため、より小さくはなりませんが、ハードウェアコストや実行性能にメリットあり。後発優位でもありますが、この辺りのバランス感覚が気持ちいい。64bit時代にプログラムの容量削減に意味はあるのか?大有りなのです。メモリとのアクセスは時間がかかるので、何段ものキャッシュを使って実行効率を上げている現代CPU、命令がコンパクトになるとその分キャッシュヒット率が向上し、速く動作するわけです。実行時間=電力消費量=コストなので、省エネ化にもつながります。RISC-V原典、一番おもしろかったのはV(ベクトル)拡張。CPU+GPUの歴史が変わりそう!V実装のフィックスと実CPUの広まり、大いに楽しみです。#riscv理研のスパコンに使われたり、格安ハードが登場した2019年のRISC-V。今年もかなり伸びそうな予感のCPU、RISC-V(リスク・ファイブ)。RISC-V版Androidや、RISC-V版ノートパソコンの発売もあるかも?RISC-Vは、由緒正しいハーバード大生まれのRISCアーキテチャーの第五世代。ライセンスフリーで自由に利用できるオープンかつ時代に合わせたチューニングによるハイパフォーマンスが特徴です。Cortex-M0学習用のasm15をRISC-Vに対応させたasm15rを設計。そもそも、コンピューターとは何でしょう?コンピューターとは、膨大な数を記憶し、正確かつ超高速に計算するものです。記憶し、どう計算するかを指示する数、それがマシン語。CPUが違えばマシン語が違います。各メーカーによって系統があり、具体的なCPUによって使える命令が異なりますが、基本的はどれも一緒です。(asm15r)」こちらまとめたRISC-Vマシン語です(抜粋)RISC-Vのラインナップは、32bit/64bit/128bitの大きく三種類。今回は入門しやすい32bitで縮小命令、掛け算割り算命令対応版をセレクト。32bitコンピューターでの記憶は大きく2種類。数個から数十個ある32bit(4byte)のレジスタと呼ばれるものと、数KBから数GBまでのメモリ(RAMやROM)と呼ばれるもので記憶します。RISCアーキテクチャでは計算はレジスタを使って行い、メモリとレジスタとのやり取りは別の命令で行います。こちらがメモリとレジスタをやりとりする命令。32bitコンピューターを仮定します。アドレス0から始めるリセットボタンこの架空のRISC-Vコンピューターに1+1を計算させるプログラムを上記asm15rを使った組みます。[R11]=R10メモリアクセスにレジスタR8以降しか使えないので、計算もレジスタR10とR11を使うことにします。他にも、コンピューターにおいて大事な分岐や、複雑な計算の一時記憶に便利な機構スタックを実現する命令などが定義されています。計算が終わった後もどんどん次のメモリを命令として実行していってしまうので、GOTO命令を使ってはじめに戻してあげましょう。-4この5つ、20byteの命令を命令表を見ながらビット列に置き換える、ハンドアセンブルし、スイッチを設定。-4これでLEDの右から2つ目だけが光って、1+1の計算結果が2であることを出してくれるプログラム、完成です!スイッチをいじって、2+1の計算などにしてみましょう。BYのオープンデータ、自由に作って遊んだり売ったりして、OKです!Armは、スマホや、IchigoJam、開発中の日本のスパコン富岳など、世界で最も普及しているCPUアーキテクチャ。Armの一番シンプルなCortex-M0のマシン語と比較してみましょう。(asm15)」こちらも16bitが基本、似てますね。RISC-Vの縮小命令は32bitの標準命令と下位2bitで区別できるので混在できるのが特徴です。(RISC-Vの縮小命令には掛け算割り算がないので、32bit命令を使用)Cortex-M0はレジスタ16本(プログラムカウンター含む)、RISC-Vは32本(内R0は0固定、プログラムカウンターは別)など、細かな違いの理由に思いを馳せるのもまた一興。16bitが基本のThumb命令。年賀アプリ2020のマシン語版を動かしてみた様子。こちらArmマシン語入門から「画面をイチゴで埋め尽くす12の方法」これで実機でなくてもマシン語の世界に触れられます!ただ、圧倒的なスピードを感じられないので、引き続き実機で触れるのが一番です。作りがいい加減なので、実機と挙動が違うところが多々あるはずです。組み込み簡単、とってもシンプルなC言語ヘッダー1ファイル、わずか700行あまり。おかしな挙動のご報告(issues)や、テストコード寄稿も大歓迎です。一日一創、デザインをシンプルに見やすくプチリニューアル。viewportの幅指定。content="width=650">iPhoneからの見た目、いい感じになりました。あけましておめでとうございます!今年のプログラミング初めはマシン語で、7セグエミュレーション。BASICでもまぁまぁの速さですが、左から徐々に書き換わるところが目でも追えてしまう程度。対して、マシン語版は瞬時に切り替え、キビキビ動きます。今年18年目を迎える株式会社jig.jp、社名の由来は「軽快」を辞書で探して見つけた単語「軽快なテンポで踊るjigダンス」に、日本発の意気込み加えた「jig.jp」。原点は34年前から始めたプログラム、もっと快適に、もっと速く、もっと便利に。豊かな社会の実現への探求は続きます。FORI=0TO7:POKE#700+I+M*8,[I]:NEXTパラメータのセグメントを表すNと、書き換えるキャラクターを表すMをマシン語ルーティーンに渡す方法を決めます。マシン語はPCG領域の始めの方を空けて、#740からスタート。192byteまでのマシン語が入ります。終わる、Armマシン語の定石。できたアセンブリ言語のプログラムをハンドアセンブルか、asm15を使ってマシン語を生成して、プログラムへ組み込みます。#opendataCPUの世界にもオープンデータ。企業をメンバー企業に支えられて躍進前夜。Amazonが発表した自社開発CPU、Graviton2はArmベースでしたが、次世代がRISC-Vになっても不思議はありません。P130より)Instructionsとは、RISC-Vというコンピューターができること一覧、基本は32bit(4byte)、メモリに書かれた命令にしたがって、どんどん計算していきます。レジスタは基本32コ、そのうち0番レジスタX0は0固定。実行位置を表すプログラムカウンタ(PC)は別となっています。1+1をさせてみましょう。x10,x10,x11こちらをマシン語表を見て、二進法32桁の数値に変換します。順)ただ、これだけではプログラムの終わりがわからずどんどんよくわからない計算が進んでしまうので、戻す(RETURN)命令を加えます。RISC-Vでは、戻り先がレジスタ1番に入っているので、そちらへのジャンプ(GOTO)すればOK。上記同様に16進数に変換します。#00008067できました!実機で動かしてみたいところですが、今回は誰でも使えるエミュレーターを使います。WebAssemblyにも対応し、ブラウザ上でRISC-V版Linux(JSLinux)まで動かしてしまうTinyEMUをベースにしたコンパクトなエミュレーターrv32emuを使います。インクルードし、下記のように使います。結果、2が入っていますね!reg[10]やreg[11]の初期値を変えたり、他の命令をハンドアセンブルしてみたりと、いろいろ試してみましょう。4.0」の下に提供されています。