1
0
Fork 0
mirror of https://github.com/pnx/m16vm synced 2026-06-16 03:44:55 +02:00
m16vm/design.txt
2018-10-26 12:35:17 +02:00

81 lines
1.1 KiB
Text

* 8 16-bit registers
* Memory
4096 bytes. address aligned by 2 bytes (16 bit)
* instruction set (16 bit)
0001 - add
0010 - movl (move low byte)
0011 - movh (move high byte)
0100 - load word
0101 - store word
0110 - beq
0111 - jmp
1000 - jr (jump register)
1111 - I/O Write
I/O = only 8 bits, syscall?
--- Format ---
Register operation format (R):
opcode (4) | rs (4) | r0 (4) | r1 (4)
r0,r1 - Operand registers.
rs - save register
Register operation format (RI):
opcode (4) | rs (4) | r0 (4) | offset (signed 4)
r0 - Operand registers.
offset - constant offset from r0 value.
rs - save register
Constant operation format (I):
opcode (4) | reg (4) | data (signed 8)
reg - Register
data - Constant data to insert into reg.
Jump format (J):
opcode (4) | addr (signed 12)
* load ascii hex from file.
* jump, branch instructions
start:
add r0, r4 # r4 = 1
beq r0, r1
jmp 2
jmp 3
load r3
jr r3
write r0
if (r0 == r1)
jmp(b1);
else
jmp(b2);
b1:
load(r3);
jmpl(r3);
b2:
write(r0);
while (r0 == r1)
r0++;
beq r0 r1 #