Mnemonic | Opcode | ||||||||
---|---|---|---|---|---|---|---|---|---|
Memory | |||||||||
store address, rx | 110001 | ||||||||
store rx, ry | 111101 | ||||||||
load rx, address | 110000 | ||||||||
load rx, ry | 111100 | ||||||||
load rx, #i16 | 111000 | ||||||||
Move | |||||||||
mov rx, ry | 110011 | ||||||||
mov rx, sp | 110011 | ||||||||
mov sp, rx | 110011 | ||||||||
Arithmetic | |||||||||
add rx, ry, rz | 100000 | ||||||||
add rx, ry | 100000 | ||||||||
addc rx, ry, rz | 100000 | ||||||||
addc rx, ry | 100000 | ||||||||
sub rx, ry, rz | 100001 | ||||||||
sub rx, ry | 100001 | ||||||||
subc rx, ry, rz | 100001 | ||||||||
subc rx, ry | 100001 | ||||||||
mul rx, ry, rz | 100010 | ||||||||
mul rx, ry | 100010 | ||||||||
mulc rx, ry, rz | 100010 | ||||||||
mulc rx, ry | 100010 | ||||||||
div rx, ry, rz | 100011 | ||||||||
div rx, ry | 100011 | ||||||||
divc rx, ry, rz | 100011 | ||||||||
divc rx, ry | 100011 | ||||||||
rem rx, ry, rz | 100101 | ||||||||
rem rx, ry | 100101 | ||||||||
inc rx | 100100 | ||||||||
dec rx | 100100 | ||||||||
Logic | |||||||||
and rx, ry, rz | 010010 | ||||||||
and rx, ry | 010010 | ||||||||
or rx, ry, rz | 010011 | ||||||||
or rx, ry | 010011 | ||||||||
xor rx, ry, rz | 010100 | ||||||||
xor rx, ry | 010100 | ||||||||
not rx, ry | 010101 | ||||||||
not rx | 010101 | ||||||||
rol rx, #u4 | 010000 | ||||||||
ror rx, #u4 | 010000 | ||||||||
shl rx, #u4, #u1 | 010000 | ||||||||
shr rx, #u4, #u1 | 010000 | ||||||||
cmp rx, ry | 010110 | ||||||||
IO | |||||||||
read rx | 110101 | ||||||||
write rx, ry | 110010 | ||||||||
Jump | |||||||||
jmp address | 000010 | ||||||||
jmp.eq address | 000010 | ||||||||
jmp.neq address | 000010 | ||||||||
jmp.z address | 000010 | ||||||||
jmp.nz address | 000010 | ||||||||
jmp.c address | 000010 | ||||||||
jmp.nc address | 000010 | ||||||||
jmp.gt address | 000010 | ||||||||
jmp.lt address | 000010 | ||||||||
jmp.ge address | 000010 | ||||||||
jmp.le address | 000010 | ||||||||
jmp.o address | 000010 | ||||||||
jmp.no address | 000010 | ||||||||
jmp.neg address | 000010 | ||||||||
jmp.dz address | 000010 | ||||||||
Call | |||||||||
call address | 000011 | ||||||||
call.eq address | 000011 | ||||||||
call.neq address | 000011 | ||||||||
call.z address | 000011 | ||||||||
call.nz address | 000011 | ||||||||
call.c address | 000011 | ||||||||
call.nc address | 000011 | ||||||||
call.gt address | 000011 | ||||||||
call.lt address | 000011 | ||||||||
call.ge address | 000011 | ||||||||
call.le address | 000011 | ||||||||
call.o address | 000011 | ||||||||
call.no address | 000011 | ||||||||
call.neg address | 000011 | ||||||||
call.dz address | 000011 | ||||||||
ret | 000100 | ||||||||
Stack | |||||||||
push rx | 000101 | ||||||||
push fr | 000101 | ||||||||
pop rx | 000110 | ||||||||
pop fr | 000110 | ||||||||
Control | |||||||||
setc #u1 | 001000 | ||||||||
hlt | 001111 | ||||||||
nop | 000000 | ||||||||
bkpt | 001110 |
Mnemonic | Opcode | Pseudo-Code | |||||||
---|---|---|---|---|---|---|---|---|---|
Memory | |||||||||
store address, rx | 110001 | *address = rx | |||||||
storei rx, ry | 111101 | **rx = ry | |||||||
load rx, address | 110000 | rx = *address | |||||||
loadi rx, ry | 111100 | rx = **ry | |||||||
loadn rx, #number | 111000 | rx = number | |||||||
Move | |||||||||
mov rx, ry | 110011 | rx = ry | |||||||
mov rx, sp | 110011 | rx = sp | |||||||
mov sp, rx | 110011 | sp = rx | |||||||
Arithmetic | |||||||||
add rx, ry, rz | 100000 | rx = ry + rz | |||||||
add rx, ry | 100000 | rx += ry | |||||||
addc rx, ry, rz | 100000 | rx = ry + rz + carry | |||||||
addc rx, ry | 100000 | rx = rx + ry + carry | |||||||
sub rx, ry, rz | 100001 | rx = ry - rz | |||||||
sub rx, ry | 100001 | rx -= ry | |||||||
subc rx, ry, rz | 100001 | rx = ry - rz + carry | |||||||
subc rx, ry | 100001 | rx = rx - ry + carry | |||||||
mul rx, ry, rz | 100010 | rx = ry * rz | |||||||
mul rx, ry | 100010 | rx *= ry | |||||||
mulc rx, ry, rz | 100010 | rx = ry * rz + carry | |||||||
mulc rx, ry | 100010 | rx = rx * ry + carry | |||||||
div rx, ry, rz | 100011 | rx = ry / rz | |||||||
div rx, ry | 100011 | rx /= ry | |||||||
divc rx, ry, rz | 100011 | rx = ry / rz + carry | |||||||
divc rx, ry | 100011 | rx = rx / ry + carry | |||||||
mod rx, ry, rz | 100101 | rx = ry % rz | |||||||
mod rx, ry | 100101 | rx %= ry | |||||||
inc rx | 100100 | rx++ | |||||||
dec rx | 100100 | rx-- | |||||||
Logic | |||||||||
and rx, ry, rz | 010010 | rx = ry & rz | |||||||
and rx, ry | 010010 | rx &= ry | |||||||
or rx, ry, rz | 010011 | rx = ry | rz | |||||||
or rx, ry | 010011 | rx |= ry | |||||||
xor rx, ry, rz | 010100 | rx = ry ^ rz | |||||||
xor rx, ry | 010100 | rx ^= ry | |||||||
not rx, ry | 010101 | rx = ~ry | |||||||
not rx | 010101 | rx = ~ry | |||||||
rotl rx, #bits | 010000 | ||||||||
rotr rx, #bits | 010000 | ||||||||
shiftl0 rx, #bits | 010000 | rx = rx << bits | |||||||
shiftl1 rx, #bits | 010000 | rx = rx << bits | (1 << bits - 1) | |||||||
shiftr0 rx, #bits | 010000 | rx = rx >> bits | |||||||
shiftr1 rx, #bits | 010000 | rx = rx >> bits | (0xFFFF >> bits << bits) | |||||||
cmp rx, ry | 010110 | ||||||||
IO | |||||||||
inchar rx | 110101 | ||||||||
outchar rx, ry | 110010 | ||||||||
Jump | |||||||||
jmp address | 000010 | ||||||||
jeq address | 000010 | ||||||||
jne address | 000010 | ||||||||
jz address | 000010 | ||||||||
jnz address | 000010 | ||||||||
jc address | 000010 | ||||||||
jnc address | 000010 | ||||||||
jgr address | 000010 | ||||||||
jle address | 000010 | ||||||||
jeg address | 000010 | ||||||||
jel address | 000010 | ||||||||
jov address | 000010 | ||||||||
jnov address | 000010 | ||||||||
jn address | 000010 | ||||||||
jdz address | 000010 | ||||||||
Call | |||||||||
call address | 000011 | address() | |||||||
ceq address | 000011 | if (eq) address() | |||||||
cne address | 000011 | if (ne) address() | |||||||
cz address | 000011 | if (z) address() | |||||||
cnz address | 000011 | if (nz) address() | |||||||
cc address | 000011 | if (c) address() | |||||||
cnc address | 000011 | if (nc) address() | |||||||
cgr address | 000011 | if (gr) address() | |||||||
cle address | 000011 | if (le) address() | |||||||
ceg address | 000011 | if (eg) address() | |||||||
cel address | 000011 | if (el) address() | |||||||
cov address | 000011 | if (ov) address() | |||||||
cnov address | 000011 | if (nov) address() | |||||||
cn address | 000011 | if (n) address() | |||||||
cdz address | 000011 | if (dz) address() | |||||||
rts | 000100 | return | |||||||
Stack | |||||||||
push rx | 000101 | ||||||||
push fr | 000101 | ||||||||
pop rx | 000110 | ||||||||
pop fr | 000110 | ||||||||
Control | |||||||||
clearc | 001000 | ||||||||
setc | 001000 | ||||||||
halt | 001111 | ||||||||
nop | 000000 | ||||||||
breakp | 001110 |