Files
openAIcVM/include/opcodes.h
2025-02-14 18:02:53 -05:00

25 lines
1.5 KiB
C

#ifndef OPCODES_H
#define OPCODES_H
// Define opcodes for the Virtual Machine.
// Each opcode is an integer constant used by the VM.
enum {
OP_HALT = 0, // Stop execution.
OP_PUSH, // Push an immediate value onto the stack. (Operand: value)
OP_POP, // Pop the top of the stack into a register. (Operand: register index)
OP_LOAD, // Load an immediate value into a register. (Operands: register, value)
OP_ADD, // Add two registers; store the result in the first register. (Operands: reg_dest, reg_src)
OP_SUB, // Subtract second register from first; store result in the first register. (Operands: reg_dest, reg_src)
OP_MUL, // Multiply two registers; store result in the first register. (Operands: reg_dest, reg_src)
OP_DIV, // Divide first register by second; store result in the first register. (Operands: reg_dest, reg_src)
OP_PRINT, // Print the value of a register. (Operand: register index)
OP_JMP, // Unconditional jump to a specified program address. (Operand: address)
OP_JMPZ, // Jump to a specified address if the given register is zero. (Operands: register, address)
OP_CALL, // Call a function: push return address and jump. (Operand: address)
OP_RET, // Return from a function call. (No operand)
OP_CALL_OS // Enter the nested OS shell. (No operand)
};
#endif // OPCODES_H