a25_kharc01
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* kharc #01
-(by [[K]], 2025.05.30)
** (0) これはなに?
-buntan-pcで遊んでいるうちに思い付いたもの。もはや言葉で...
-だから短期間で作って、こういうのあったらいいよね?と見せ...
-なんて読めばいいの?「カーク」・・・ KH-Architecture が...
-仮想マシン(VM)なの?・・・そうとも言えるけど、そうではな...
-Cコンパイラなの?・・・ある意味ではそう。
-トランスパイラじゃないかな?・・・そうかもしれない。でも...
-何ができるの?・・・CPUに依存しないデバッグ機能の提供。
-たぶんものができれば、「ああなるほどこういうことがやりた...
** 2025.05.30 Fri #0
-とりあえずの方針:
--不便でも何でもいいので、とにかく動くものを作る。便利に...
--詳しく考えるのがめんどくさいので、x86っぽい構成にする。...
-設計:
--レジスタマシン。整数レジスタ4本(R)。アドレスレジスタ4本...
--なんか不安になってきたので、アドレスレジスタだけは8本に...
--RxとAxはこのバージョンでは32bitということにする。
-まずはアセンブラを作る。
--MovRR(Rx,Rx); MovAA(Ax,Ax); MovFF(Fx,Fx); // レジスタ間...
--MovRI(Rx,imm32);
--AddRI(Rx,imm32); SubRI(Rx,imm32);
-関数呼び出し規則としては、基本的にどのレジスタも破壊可能...
-ただ123を返すだけの関数。
MovRI(R0,123); Ret();
-1から10までの和を計算する関数。
MovRI(R0,0); MovRI(R1,1);
LbI(0); AddRR(R0,R1); AddRI(R1,1); CmpJneRII(R1,11,0);
Ret(); // == JmpA(A2);
-再帰でフィボナッチ数を計算する関数。スタックトップに引数...
LbI(0);
LodRMd(R0,A0,0); // R0=[A0+0];
CmpJgRII(R0,1,1); // if (R0>1) goto 1;
Ret();
LbI(1);
SubAI(A0,16);
StoAMd(A2,A0,8); // [A0+8]=A2;
SubRI(R0,1);
StoRMd(R0,A0,0);
CalII(0,2); // == MovAI(A2,2); JmpI(0); LbI(2);
StoRMd(R0,A0,12);
LodRMd(R0,A0,16);
SubRI(R0,2);
StoRMd(R0,A0,0);
CalII(0,3);
LodRMd(R1,SP,12);
AddRR(R0,R1);
LodAMd(A2,A0,8);
AddAI(A0,16);
Ret();
-kharcのアセンブラは、機械語ではなくC言語のソースコードを...
** 2025.06.02 Mon #0
-もしかしたら説明できるかもしれないので、ちょっと説明して...
-[1]何かプログラムを書いたとして、そのプログラムがある関...
--俗にいうprintfデバッグです。これのいいところは、ある条...
-ではこのプログラムがどういうタイミングでメモリアクセスし...
-でもそこで気づくのです。メモリアクセスなんてコード内にあ...
-ほかにもいろいろありえます。すべての加算命令が怪しくて意...
-[2]こういうとき、私には必殺技があります。それはエミュレ...
-なぜエミュレータが必殺技なのかと言えば、私はもともとエミ...
-エミュレータ教の信者、いや教祖かもしれません。大学生の時...
-[3]ということで、x86エミュレータを適当に入手して改造すれ...
-私はただデバッグ支援のために気軽に改造したいだけなのに、...
-[4]そうやって何回も心を折ってきたわけですが、さすがにこ...
-もちろんx86やARMなどとの互換性はないです。エミュレータが...
-名前がないと説明しにくいので、これをkharcアーキテクチャ...
-アセンブラしかないっていうのは不便すぎるので、kharc用のC...
-[5]普通にエミュレータを作ると大変だし、その割に速度が出...
-Cコンパイラは最適化をやってくれるので、この方法ならそこ...
-アセンブラからC言語に変換の際には変換ルールみたいなもの...
** 2025.06.02 Mon #1
-整数レジスタ R0~R7 : R7はデバッグ用のレジスタで、今ソー...
-アドレスレジスタ A0~A7 : A7はPC, A6はSP, A5はリターンア...
-浮動小数点レジスタ F0~F7 : 特に規定なし
** 2025.06.04 Wed #0
-kharc向けにCコンパイラを書いていますが、私はこの手段がす...
-つまり、CコンパイラはいきなりそれぞれのCPUに向けたアセン...
-ってそれがLLVM-IRってことか。うーん、それにしてはLLVMは...
** 2025.06.04 Wed #1
-完全なCコンパイラを作るのではなく、簡易な(=手抜き満載...
-今回の開発ポリシーは [[a25_kharcs1]] みたいに、手早く雑...
-ちゃんとしたものは誰でも作れる。「簡単に作れるのにそこそ...
** 2025.06.04 Wed #2
-Cコンパイラを強引に作ればまあ作れそうだけど、できれば楽...
** 2025.06.06 Fri #0
-kharc用のCコンパイラを、とりあえず「kcc」と呼ぶことにし...
-kccは関数が宣言できて、変数宣言もできて、インラインアセ...
-kccの中では番号じゃなくて名前でラベルも使えます。
-ということで、現状では高級なアセンブラでしかないけど、今...
-月曜になったら、フィボナッチ数計算プログラムをkccのイン...
** 2025.06.08 Sun #0
-[2025.04.11 金] buntan-pc用のアセンブラkuasを作り始める。
-[2025.04.16 水] kuasの主要な部分が完成。
-[2025.04.25 金] kuasがほぼ完成。
-[2025.04.25 金] MS-DOS用のアセンブラをC言語に移植する方...
-[2025.05.07 水] C言語のプリプロセッサの自作を始める。
-[2025.05.23 金] プリプロセッサが完成。kcpp0.c:371行(12.2...
-[2025.05.30 金] kharcの開発が始まる。まずはVM仕様の検討...
-[2025.06.04 水] kharc用のCコンパイラの開発が始まる。
-[Q]なんか最近開発が速くないですか?
-[A]速いと思います。まあ今までが遅かったということもある...
-自分が作ったもので自分の開発力を上げる。作れば作るほど自...
-また私は今まで何度も言語を作ってきたということもあって、...
-それと、私はそもそもそんなにたくさん書いてないのです。だ...
** 2025.06.13 Fri #0
-今の野心としては、kharcバイナリをいろんなアーキテクチャ...
-もう一つの野心として、x86とかx64とかARMとかAArch64とかRI...
-エミュレータOSの野望が再開する??
** 2025.06.22 Sun #0
-kccでうまくやれば、persistent-Cと同じようなことができそ...
-あとacl3ライブラリにtek5用の関数を付けたら、OSASKアプリ...
-今のkharcバイナリをhh4でエンコードしたら、それってOSECPU...
-こうして私の今までのいろいろがkccに統合されたら、なんか...
** 2025.06.24 Tue #0
-kharcはbuntan-pcのようなスタックマシン向けのアセンブラに...
-そのためには、できるだけ単純変数(配列でもなく構造体でも...
-これがうまくできたら、kccで書いてgccで最適化する方法で、...
-普段の開発時はkccで実行してデバッグして、スピードが欲し...
終了行:
* kharc #01
-(by [[K]], 2025.05.30)
** (0) これはなに?
-buntan-pcで遊んでいるうちに思い付いたもの。もはや言葉で...
-だから短期間で作って、こういうのあったらいいよね?と見せ...
-なんて読めばいいの?「カーク」・・・ KH-Architecture が...
-仮想マシン(VM)なの?・・・そうとも言えるけど、そうではな...
-Cコンパイラなの?・・・ある意味ではそう。
-トランスパイラじゃないかな?・・・そうかもしれない。でも...
-何ができるの?・・・CPUに依存しないデバッグ機能の提供。
-たぶんものができれば、「ああなるほどこういうことがやりた...
** 2025.05.30 Fri #0
-とりあえずの方針:
--不便でも何でもいいので、とにかく動くものを作る。便利に...
--詳しく考えるのがめんどくさいので、x86っぽい構成にする。...
-設計:
--レジスタマシン。整数レジスタ4本(R)。アドレスレジスタ4本...
--なんか不安になってきたので、アドレスレジスタだけは8本に...
--RxとAxはこのバージョンでは32bitということにする。
-まずはアセンブラを作る。
--MovRR(Rx,Rx); MovAA(Ax,Ax); MovFF(Fx,Fx); // レジスタ間...
--MovRI(Rx,imm32);
--AddRI(Rx,imm32); SubRI(Rx,imm32);
-関数呼び出し規則としては、基本的にどのレジスタも破壊可能...
-ただ123を返すだけの関数。
MovRI(R0,123); Ret();
-1から10までの和を計算する関数。
MovRI(R0,0); MovRI(R1,1);
LbI(0); AddRR(R0,R1); AddRI(R1,1); CmpJneRII(R1,11,0);
Ret(); // == JmpA(A2);
-再帰でフィボナッチ数を計算する関数。スタックトップに引数...
LbI(0);
LodRMd(R0,A0,0); // R0=[A0+0];
CmpJgRII(R0,1,1); // if (R0>1) goto 1;
Ret();
LbI(1);
SubAI(A0,16);
StoAMd(A2,A0,8); // [A0+8]=A2;
SubRI(R0,1);
StoRMd(R0,A0,0);
CalII(0,2); // == MovAI(A2,2); JmpI(0); LbI(2);
StoRMd(R0,A0,12);
LodRMd(R0,A0,16);
SubRI(R0,2);
StoRMd(R0,A0,0);
CalII(0,3);
LodRMd(R1,SP,12);
AddRR(R0,R1);
LodAMd(A2,A0,8);
AddAI(A0,16);
Ret();
-kharcのアセンブラは、機械語ではなくC言語のソースコードを...
** 2025.06.02 Mon #0
-もしかしたら説明できるかもしれないので、ちょっと説明して...
-[1]何かプログラムを書いたとして、そのプログラムがある関...
--俗にいうprintfデバッグです。これのいいところは、ある条...
-ではこのプログラムがどういうタイミングでメモリアクセスし...
-でもそこで気づくのです。メモリアクセスなんてコード内にあ...
-ほかにもいろいろありえます。すべての加算命令が怪しくて意...
-[2]こういうとき、私には必殺技があります。それはエミュレ...
-なぜエミュレータが必殺技なのかと言えば、私はもともとエミ...
-エミュレータ教の信者、いや教祖かもしれません。大学生の時...
-[3]ということで、x86エミュレータを適当に入手して改造すれ...
-私はただデバッグ支援のために気軽に改造したいだけなのに、...
-[4]そうやって何回も心を折ってきたわけですが、さすがにこ...
-もちろんx86やARMなどとの互換性はないです。エミュレータが...
-名前がないと説明しにくいので、これをkharcアーキテクチャ...
-アセンブラしかないっていうのは不便すぎるので、kharc用のC...
-[5]普通にエミュレータを作ると大変だし、その割に速度が出...
-Cコンパイラは最適化をやってくれるので、この方法ならそこ...
-アセンブラからC言語に変換の際には変換ルールみたいなもの...
** 2025.06.02 Mon #1
-整数レジスタ R0~R7 : R7はデバッグ用のレジスタで、今ソー...
-アドレスレジスタ A0~A7 : A7はPC, A6はSP, A5はリターンア...
-浮動小数点レジスタ F0~F7 : 特に規定なし
** 2025.06.04 Wed #0
-kharc向けにCコンパイラを書いていますが、私はこの手段がす...
-つまり、CコンパイラはいきなりそれぞれのCPUに向けたアセン...
-ってそれがLLVM-IRってことか。うーん、それにしてはLLVMは...
** 2025.06.04 Wed #1
-完全なCコンパイラを作るのではなく、簡易な(=手抜き満載...
-今回の開発ポリシーは [[a25_kharcs1]] みたいに、手早く雑...
-ちゃんとしたものは誰でも作れる。「簡単に作れるのにそこそ...
** 2025.06.04 Wed #2
-Cコンパイラを強引に作ればまあ作れそうだけど、できれば楽...
** 2025.06.06 Fri #0
-kharc用のCコンパイラを、とりあえず「kcc」と呼ぶことにし...
-kccは関数が宣言できて、変数宣言もできて、インラインアセ...
-kccの中では番号じゃなくて名前でラベルも使えます。
-ということで、現状では高級なアセンブラでしかないけど、今...
-月曜になったら、フィボナッチ数計算プログラムをkccのイン...
** 2025.06.08 Sun #0
-[2025.04.11 金] buntan-pc用のアセンブラkuasを作り始める。
-[2025.04.16 水] kuasの主要な部分が完成。
-[2025.04.25 金] kuasがほぼ完成。
-[2025.04.25 金] MS-DOS用のアセンブラをC言語に移植する方...
-[2025.05.07 水] C言語のプリプロセッサの自作を始める。
-[2025.05.23 金] プリプロセッサが完成。kcpp0.c:371行(12.2...
-[2025.05.30 金] kharcの開発が始まる。まずはVM仕様の検討...
-[2025.06.04 水] kharc用のCコンパイラの開発が始まる。
-[Q]なんか最近開発が速くないですか?
-[A]速いと思います。まあ今までが遅かったということもある...
-自分が作ったもので自分の開発力を上げる。作れば作るほど自...
-また私は今まで何度も言語を作ってきたということもあって、...
-それと、私はそもそもそんなにたくさん書いてないのです。だ...
** 2025.06.13 Fri #0
-今の野心としては、kharcバイナリをいろんなアーキテクチャ...
-もう一つの野心として、x86とかx64とかARMとかAArch64とかRI...
-エミュレータOSの野望が再開する??
** 2025.06.22 Sun #0
-kccでうまくやれば、persistent-Cと同じようなことができそ...
-あとacl3ライブラリにtek5用の関数を付けたら、OSASKアプリ...
-今のkharcバイナリをhh4でエンコードしたら、それってOSECPU...
-こうして私の今までのいろいろがkccに統合されたら、なんか...
** 2025.06.24 Tue #0
-kharcはbuntan-pcのようなスタックマシン向けのアセンブラに...
-そのためには、できるだけ単純変数(配列でもなく構造体でも...
-これがうまくできたら、kccで書いてgccで最適化する方法で、...
-普段の開発時はkccで実行してデバッグして、スピードが欲し...
ページ名: