Machine code inerpreter
| .vscode | ||
| src | ||
| .gitignore | ||
| project.config | ||
| README.md | ||
TCPU
Assembly language interpreter written in pure C. Can execute programs up to 1 MEGABYTE (1048576 bytes) in size!!!
Building
- Install cbuild
-
cbuild build_exec_dbg
Assembly language
Instructions
| code | name | arguments | details |
|---|---|---|---|
| 00 | NOP | ignored instruction | |
| 01 | PUSH | dst_register, value_size(bytes), value |
push constant value into dst_register |
| 02 | MOV | dst_register, src_register |
copy value from src_register to dst_register |
| 03 | ADD | dst_register, src_register |
dst += src |
| 04 | SUB | dst_register, src_register |
dst -= src |
| 05 | MUL | dst_register, src_register |
dst *= src |
| 06 | DIV | dst_register, src_register |
dst /= src |
| 07 | MOD | dst_register, src_register |
dst %= src |
| 08 | SYS | call system function | |
| 09 | EXIT | stop the program with exit code in ax |
Registers
| code | name | size (bits) |
|---|---|---|
| 00 | ax | 32 |
| 01 | bx | 32 |
| 02 | cx | 32 |
| 03 | dx | 32 |
System functions
To call a system function you need to push values to registers and write SYS opcode. The return value of a function will will be avaliable in ax after call.
ax |
name | bx |
cx |
dx |
details |
|---|---|---|---|---|---|
| 0 | read | file number | buffer pointer | buffer size | read data from file |
| 1 | write | file number | buffer pointer | buffer size | write data to file |