a4_p0006
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* acl4のプログラムのページ0006
-(by [[K]], 2026.02.17)
** (1) C言語に変換したい
-[[a4_p0005]]で実行は簡単にできました。
-今度は実行するのではなく、「C言語に変換する」っていうの...
-C言語に変換できれば、高速に実行することもできます(きっ...
** (2) p0006a.c [16行] : 即興で作ったトランスパイラ
#define a_Version 1
#include <acl4.c>
int main(int argc, const char **argv)
{
if (argc < 2) return 1;
Preprocessor pp[1]; Preprocessor_ini(pp); ...
Preprocessor_SourceFiles_addFile(pp->sfs, argv[1], s...
Preprocessor_SourceFiles_addFile(pp->sfs, "a4vm-asm-...
VecChr vc[1]; VecChr_ini(vc); pp->put0->dst = vc; ...
Preprocessor_main(pp); Preprocessor_din(pp); ...
printf("%.*s}\n", (int) vc->n, vc->p);
VecChr_din(vc);
a_malloc_debugList(_arg);
return 0;
}
-適当に作った定義ファイル: a4vm-asm-p0006a.h (内容は仮...
#include <stdio.h>
int main()
{
int R00, R01, R02, R03;
#define Lod_RI(r,i) r = (i);
#define Lbl_T(t) t:
#define Add_RR(r,s) r += s;
#define Add_RI(r,i) r += (i);
#define Jle_RIT(r,i,t) if (r <= (i)) goto t;
#define Jlt_RIT(r,i,t) if (r < (i)) goto t;
#define Dbg_Ret_R(r) return r;
#define Dbg_Ret_I(i) return i;
#define Dbg_Putc_R(r) putchar(r);
#define Dbg_Putc_I(i) putchar(i);
#define Dbg_PutDec_R(r) printf("%d", r);
** (3) 実行結果
-p0004a0.txt:
#define c R00 // 整数レジスタ
#define lp L0000 // ラベル
Lod_RI(c, 0x20)
Lbl_T(lp)
Dbg_Putc_R(c)
Add_RI(c, 1)
Jlt_RIT(c, 0x7f, lp)
Dbg_Putc_I('\n')
Dbg_Ret_I(0)
>p0006a p0004a0.txt
#line 1 "a4vm-asm-p0006a.h"
#include <stdio.h>
int main()
{
int R00, R01, R02, R03;
#line 3 "p0004a0.txt"
R00 = (0x20);
L0000:
putchar(R00);
R00 += (1);
if (R00 < (0x7f)) goto L0000;
putchar('\n');
return 0;
}
--こんな感じでちゃんと動いています。これをリダイレクトし...
-p0005a0.txt:
#define i R00 // 整数レジスタ
#define s R01
#define lp L0000 // ラベル
Lod_RI(s, 0)
Lod_RI(i, 0)
Lbl_T(lp)
Add_RR(s, i)
Add_RI(i, 1)
Jle_RIT(i, 1000, lp)
Dbg_PutDec_R(s)
Dbg_Putc_I('\n')
Dbg_Ret_I(0)
>p0006a p0005a0.txt
#line 1 "a4vm-asm-p0006a.h"
#include <stdio.h>
int main()
{
int R00, R01, R02, R03;
#line 4 "p0005a0.txt"
R01 = (0);
R00 = (0);
L0000:
R01 += R00;
R00 += (1);
if (R00 <= (1000)) goto L0000;
printf("%d", R01);
putchar('\n');
return 0;
}
--これも問題なく動きました。
** (4) 考察
-アセンブラの構文体系を xxx(...) の形式で作っておけば、ア...
-低級言語はこれが一番いいんじゃないかと思います。
** (99) 更新履歴
-2026.02.17(火) 初版
終了行:
* acl4のプログラムのページ0006
-(by [[K]], 2026.02.17)
** (1) C言語に変換したい
-[[a4_p0005]]で実行は簡単にできました。
-今度は実行するのではなく、「C言語に変換する」っていうの...
-C言語に変換できれば、高速に実行することもできます(きっ...
** (2) p0006a.c [16行] : 即興で作ったトランスパイラ
#define a_Version 1
#include <acl4.c>
int main(int argc, const char **argv)
{
if (argc < 2) return 1;
Preprocessor pp[1]; Preprocessor_ini(pp); ...
Preprocessor_SourceFiles_addFile(pp->sfs, argv[1], s...
Preprocessor_SourceFiles_addFile(pp->sfs, "a4vm-asm-...
VecChr vc[1]; VecChr_ini(vc); pp->put0->dst = vc; ...
Preprocessor_main(pp); Preprocessor_din(pp); ...
printf("%.*s}\n", (int) vc->n, vc->p);
VecChr_din(vc);
a_malloc_debugList(_arg);
return 0;
}
-適当に作った定義ファイル: a4vm-asm-p0006a.h (内容は仮...
#include <stdio.h>
int main()
{
int R00, R01, R02, R03;
#define Lod_RI(r,i) r = (i);
#define Lbl_T(t) t:
#define Add_RR(r,s) r += s;
#define Add_RI(r,i) r += (i);
#define Jle_RIT(r,i,t) if (r <= (i)) goto t;
#define Jlt_RIT(r,i,t) if (r < (i)) goto t;
#define Dbg_Ret_R(r) return r;
#define Dbg_Ret_I(i) return i;
#define Dbg_Putc_R(r) putchar(r);
#define Dbg_Putc_I(i) putchar(i);
#define Dbg_PutDec_R(r) printf("%d", r);
** (3) 実行結果
-p0004a0.txt:
#define c R00 // 整数レジスタ
#define lp L0000 // ラベル
Lod_RI(c, 0x20)
Lbl_T(lp)
Dbg_Putc_R(c)
Add_RI(c, 1)
Jlt_RIT(c, 0x7f, lp)
Dbg_Putc_I('\n')
Dbg_Ret_I(0)
>p0006a p0004a0.txt
#line 1 "a4vm-asm-p0006a.h"
#include <stdio.h>
int main()
{
int R00, R01, R02, R03;
#line 3 "p0004a0.txt"
R00 = (0x20);
L0000:
putchar(R00);
R00 += (1);
if (R00 < (0x7f)) goto L0000;
putchar('\n');
return 0;
}
--こんな感じでちゃんと動いています。これをリダイレクトし...
-p0005a0.txt:
#define i R00 // 整数レジスタ
#define s R01
#define lp L0000 // ラベル
Lod_RI(s, 0)
Lod_RI(i, 0)
Lbl_T(lp)
Add_RR(s, i)
Add_RI(i, 1)
Jle_RIT(i, 1000, lp)
Dbg_PutDec_R(s)
Dbg_Putc_I('\n')
Dbg_Ret_I(0)
>p0006a p0005a0.txt
#line 1 "a4vm-asm-p0006a.h"
#include <stdio.h>
int main()
{
int R00, R01, R02, R03;
#line 4 "p0005a0.txt"
R01 = (0);
R00 = (0);
L0000:
R01 += R00;
R00 += (1);
if (R00 <= (1000)) goto L0000;
printf("%d", R01);
putchar('\n');
return 0;
}
--これも問題なく動きました。
** (4) 考察
-アセンブラの構文体系を xxx(...) の形式で作っておけば、ア...
-低級言語はこれが一番いいんじゃないかと思います。
** (99) 更新履歴
-2026.02.17(火) 初版
ページ名: