| #0000 | NOP(); |
| #0001 | PUSH_i16(imm); |
| #0002 | LD_fp16(disp); |
| #0003 | ST_fp16(disp); |
| #0004 | INC(); |
| #0005 | EQ(); |
| #0006 | JZ(ll); |
| #0007 | LL(ll); |
{
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);
}{
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(var_s * 2);
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();
}#include <stdio.h>
void buntan_src();
int main()
{
// void func(int *sp, unsigned char *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 *) fp)[%d];\n", disp); }
void ST_fp16(int disp) { printf(" ((int16_t *) fp)[%d] = *sp++;\n", disp); }
void INC() { printf(" (*sp)++;\n"); }
void EQ() { printf(" i = (*sp == sp[1]); *++sp = i;\n"); }
void JZ(int ll) { printf(" i = *sp++; if (i == 0) goto ll%d;\n", ll); }
void LL(int ll) { printf("ll%d:\n", ll); }
void ADD() { printf(" i = *sp + sp[1]; *++sp = i;\n"); }
void sys_putDec() { printf(" printf(\"%%d \", *sp++);\n"); }
//void LD_fp16(int disp) { printf(" *--sp = fp[%d] | fp[%d] << 8;\n", disp, disp + 1); }
//void ST_fp16(int disp) { printf(" i = *sp++; fp[%d] = i & 255; fp[%d] = (i >> 8) & 255;\n", disp, disp + 1); }
void buntan_src()#include <stdio.h>
#include <stdint.h>
void func(int *sp, uint8_t char *fp);
int main()
{
int st[16]; uint8_t mem[4096];
func(&st[16], mem);
return 0;
}
void func(int *sp, uint8_t *fp)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