pub const CONST: u8 = 0x0; pub const LOAD_G: u8 = 0x1; pub const STORE_G: u8 = 0x2; pub const LOAD_L: u8 = 0x3; pub const STORE_L: u8 = 0x4; pub const LOAD_A: u8 = 0x5; pub const STORE_A: u8 = 0x6; pub const JMP: u8 = 0x7; pub const BRF: u8 = 0x8; pub const BRT: u8 = 0x9; pub const CALL: u8 = 0xA; pub const CALL_B: u8 = 0xB; pub const RET: u8 = 0xC; pub const LOAD_R: u8 = 0xD; pub const STORE_R: u8 = 0xE; pub const ASF: u8 = 0xF; pub const RSF: u8 = 0x10; pub const POP: u8 = 0x11; pub const ADD: u8 = 0x12; pub const SUB: u8 = 0x13; pub const MUL: u8 = 0x14; pub const DIV: u8 = 0x15; pub const MOD: u8 = 0x16; pub const EQ: u8 = 0x17; pub const NE: u8 = 0x18; pub const LT: u8 = 0x19; pub const LE: u8 = 0x1A; pub const GT: u8 = 0x1B; pub const GE: u8 = 0x1C; pub const NOT: u8 = 0x1D; pub const NEG: u8 = 0x1E; pub const HALT: u8 = 0x1F; pub const ARRAY: u8 = 0x20; pub fn opcode_to_string(opcode: u8) -> String { match opcode { CONST => "CONST".to_string(), LOAD_G => "LOAD_G".to_string(), STORE_G => "STORE_G".to_string(), LOAD_L => "LOAD_L".to_string(), STORE_L => "STORE_L".to_string(), LOAD_A => "LOAD_A".to_string(), STORE_A => "STORE_A".to_string(), JMP => "JMP".to_string(), BRF => "BRF".to_string(), BRT => "BRT".to_string(), CALL => "CALL".to_string(), CALL_B => "CALL_B".to_string(), RET => "RET".to_string(), LOAD_R => "LOAD_R".to_string(), STORE_R => "STORE_R".to_string(), ASF => "ASF".to_string(), RSF => "RSF".to_string(), POP => "POP".to_string(), ADD => "ADD".to_string(), SUB => "SUB".to_string(), MUL => "MUL".to_string(), DIV => "DIV".to_string(), MOD => "MOD".to_string(), EQ => "EQ".to_string(), NE => "NE".to_string(), LT => "LT".to_string(), LE => "LE".to_string(), GT => "GT".to_string(), GE => "GE".to_string(), NOT => "NOT".to_string(), NEG => "NEG".to_string(), HALT => "HALT".to_string(), ARRAY => "ARRAY".to_string(), _ => "UNKNOWN".to_string(), } }