a24_buntan01
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* buntan-pc #1
-(by [[K]], 2024.11.05)
** (0)
-説明ページはいつかどこかにできると思うので、ここでは省略。
// https://github.com/buntan-pc/
** 2024.11.05 Tue #0
-[memo]uchanさんが作っているCPUの命令一覧
--https://github.com/uchan-nos/comproc/blob/main/src/cpu/...
|#0000|NOP();|
|#0001|PUSH_i16(imm);|
|#0002|LD_fp16(disp);|
|#0003|ST_fp16(disp);|
|#0004|INC();|
|#0005|EQ();|
|#0006|JZ(ll);|
|#0007|LL(ll);|
-0から9までを表示
{
enum { var_i };
PUSH_i16(0); ST_fp16(var_i * 2);
LL(0); // local-label
LD_fp16(var_i * 2); sys_putDec();
LD_fp16(var_i * 2); INC(); ST_fp16(var_i * 2);
LD_fp16(var_i * 2); PUSH_i16(10); EQ(); JZ(0);
}
** 2024.11.06 Wed #0
-1から10までの和を計算
{
enum { var_s, var_i };
PUSH_i16(0); ST_fp16(var_s * 2);
PUSH_i16(1); ST_fp16(var_i * 2);
LL(0); // local-label
LD_fp16(var_s * 2); LD_fp16(var_i * 2); ADD(); ST_fp16...
LD_fp16(var_i * 2); INC(); ST_fp16(var_i * 2);
LD_fp16(var_i * 2); PUSH_i16(11); EQ(); JZ(0);
LD_fp16(var_s * 2); sys_putDec();
}
-emu.c
#include <stdio.h>
void buntan_src();
int main()
{
// void func(int *sp, uint8_t *fp)
printf("{\nint i, j;\n");
buntan_src();
printf("}\n");
return 0;
}
void PUSH_i16(int imm) { printf(" *--sp = %d;\n", imm)...
void LD_fp16(int disp) { printf(" *--sp = ((int16_t *)...
void ST_fp16(int disp) { printf(" ((int16_t *) fp)[%d]...
void INC() { printf(" (*sp)++;\n"); }
void EQ() { printf(" i = (*sp == sp[1]); ...
void JZ(int ll) { printf(" i = *sp++; if (i == ...
void LL(int ll) { printf("ll%d:\n", ll); }
void ADD() { printf(" i = *sp + sp[1]; *++...
void sys_putDec() { printf(" printf(\"%%d \", *sp...
//void LD_fp16(int disp) { printf(" *--sp = fp[%d] | f...
//void ST_fp16(int disp) { printf(" i = *sp++; fp[%d] ...
void buntan_src()
-runtime.c
#include <stdio.h>
#include <stdint.h>
void func(int *sp, uint8_t *fp);
int main()
{
int st[16]; uint8_t mem[4096];
func(&st[16], mem);
return 0;
}
void func(int *sp, uint8_t *fp)
-VC++での実行例:
prompt>cl /FI emu.c test.c
prompt>test.exe > test_1.c
prompt>cl /FI runtime.c test_1.c
prompt>test_1.exe
55
--gccだったら -include でできると思う。
** 2024.11.07 Thu #0
-この作り方で色々応用ができそうな気はするが、問題点として...
-軽量なCインタプリタがあれば、これも解決できそうな気はす...
-easy-Cに手を加えれば、できるかもしれない??
終了行:
* buntan-pc #1
-(by [[K]], 2024.11.05)
** (0)
-説明ページはいつかどこかにできると思うので、ここでは省略。
// https://github.com/buntan-pc/
** 2024.11.05 Tue #0
-[memo]uchanさんが作っているCPUの命令一覧
--https://github.com/uchan-nos/comproc/blob/main/src/cpu/...
|#0000|NOP();|
|#0001|PUSH_i16(imm);|
|#0002|LD_fp16(disp);|
|#0003|ST_fp16(disp);|
|#0004|INC();|
|#0005|EQ();|
|#0006|JZ(ll);|
|#0007|LL(ll);|
-0から9までを表示
{
enum { var_i };
PUSH_i16(0); ST_fp16(var_i * 2);
LL(0); // local-label
LD_fp16(var_i * 2); sys_putDec();
LD_fp16(var_i * 2); INC(); ST_fp16(var_i * 2);
LD_fp16(var_i * 2); PUSH_i16(10); EQ(); JZ(0);
}
** 2024.11.06 Wed #0
-1から10までの和を計算
{
enum { var_s, var_i };
PUSH_i16(0); ST_fp16(var_s * 2);
PUSH_i16(1); ST_fp16(var_i * 2);
LL(0); // local-label
LD_fp16(var_s * 2); LD_fp16(var_i * 2); ADD(); ST_fp16...
LD_fp16(var_i * 2); INC(); ST_fp16(var_i * 2);
LD_fp16(var_i * 2); PUSH_i16(11); EQ(); JZ(0);
LD_fp16(var_s * 2); sys_putDec();
}
-emu.c
#include <stdio.h>
void buntan_src();
int main()
{
// void func(int *sp, uint8_t *fp)
printf("{\nint i, j;\n");
buntan_src();
printf("}\n");
return 0;
}
void PUSH_i16(int imm) { printf(" *--sp = %d;\n", imm)...
void LD_fp16(int disp) { printf(" *--sp = ((int16_t *)...
void ST_fp16(int disp) { printf(" ((int16_t *) fp)[%d]...
void INC() { printf(" (*sp)++;\n"); }
void EQ() { printf(" i = (*sp == sp[1]); ...
void JZ(int ll) { printf(" i = *sp++; if (i == ...
void LL(int ll) { printf("ll%d:\n", ll); }
void ADD() { printf(" i = *sp + sp[1]; *++...
void sys_putDec() { printf(" printf(\"%%d \", *sp...
//void LD_fp16(int disp) { printf(" *--sp = fp[%d] | f...
//void ST_fp16(int disp) { printf(" i = *sp++; fp[%d] ...
void buntan_src()
-runtime.c
#include <stdio.h>
#include <stdint.h>
void func(int *sp, uint8_t *fp);
int main()
{
int st[16]; uint8_t mem[4096];
func(&st[16], mem);
return 0;
}
void func(int *sp, uint8_t *fp)
-VC++での実行例:
prompt>cl /FI emu.c test.c
prompt>test.exe > test_1.c
prompt>cl /FI runtime.c test_1.c
prompt>test_1.exe
55
--gccだったら -include でできると思う。
** 2024.11.07 Thu #0
-この作り方で色々応用ができそうな気はするが、問題点として...
-軽量なCインタプリタがあれば、これも解決できそうな気はす...
-easy-Cに手を加えれば、できるかもしれない??
ページ名: