py_register_machine2.commands

Basic Commands

py_register_machine2.commands.basic_commands: The most important commands

mnemonic opcode Description
mov a b 0x01 copy content from register a to register b [1]
pld a b 0x02 load from address in register a to register b [1]
pst a b 0x03 store register a to address in register b [1]
ld a b 0x04 load from a into register b [1]
st a b 0x05 store from register a to address b [1]
add a b 0x06 b = a + b
sub a b 0x07 b = a - b
mul a b 0x08 b = a * b
div a b 0x09 b = a / b (integer division)
jmp a 0x0a pc = pc + a - 2 [3]
in a b 0x0b read from address in register a to register b [2]
out a b 0x0c write register a to address in register b [2]
inc a 0x0d increase register a
dec a 0x0f decrease register a
jne a b 0x10 if a != 0: pc += b - 3
jeq a b 0x11 if a == 0: pc += b - 3
jle a b 0x12 if a <= 0: pc += b - 3
jlt a b 0x13 if a < 0: pc += b - 3
jge a b 0x14 if a >= 0: pc += b - 3
jgt a b 0x15 if a > 0: pc += b - 3
ldi a b 0x16 Load immediate a into Register b
sjmp a 0x17 pc = a - 2 [3]
[1](1, 2, 3, 4, 5) stores and loads to/from the memory BUS
[2](1, 2) reads and writes from/to the device BUS
[3](1, 2) both the fetch opcode and fetch arguments increases the PC, so we need to undo this.

A list of all commands is basic_commands.

py_register_machine2.commands.stack_based: A bunch of stack based commands

mnemonic opcode Description
push a 0x18 *(SP–) = a
pop a 0x19 a = *(++SP)
call a 0x1a *(SP–) = PC; PC += a
scall a 0x1b *(SP–) = PC; PC = a
ret 0x1c PC = *(++SP)

all stackbased commands are available in the list stack_based_commands.

Commands for Curriculae

py_register_machine2.commands.gym_bav_16: Instruction set compatible to the register machine used in the bavarian gymnasium.

mnemonic opcode Description
DLOAD c 0x01 A = c (c is a number)
LOAD r 0x02 A = r (r is a register)
STORE r 0x03 r = A
ADD r 0x04 A = A + r (r is a register)
SUB r 0x05 A = A - r
MULT r 0x06 A = A * r
DIV r 0x07 A = A / r
JUMP c 0x08 PC = c (c is a constant)
HALT 0x09 ECR = 1 (halts the engine)
JNE c 0x0a if(A != 0): PC = c
JEQ c 0x0b if(A == 0): PC = c
JLT c 0x0c if(A < 0): PC = c
JLE c 0x0d if(A <= 0): PC = c
JGT c 0x0f if(A > 0): PC = c
JGE c 0x10 if(A >= 0): PC = c

all commands are available in the list commands

Note:

Actually all commands use 2 words. So actually all branch functions set the PC to c * 2.