- Encode.h/Encode.cpp:encode/decode 往返 + disasm 一行文本 - 指令与映像.md 新增反汇编格式表(9 种形态 + 未知操作码) - Op.h STORE_* 注释对齐 disasm(rs, slot 寄存器在前)
66 lines
2.4 KiB
C++
66 lines
2.4 KiB
C++
/**
|
|
* @file Op.h
|
|
* @brief 操作码枚举 + 助记符
|
|
* @author
|
|
* @date 2026-08-19
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
|
|
namespace isa {
|
|
// 操作码一次列全。数值即编码:冻结后不得改顺序、不得插值,
|
|
// 增加指令只能追加到末尾,并同步 Doc/isa/指令与映像.md 与测试。
|
|
enum class Op : uint8_t {
|
|
MOVE = 0, // MOVE rd, rs
|
|
LOADK = 1, // LOADK rd, const_id
|
|
NOT = 2, // NOT rd, rs
|
|
AND = 3, // AND rd, ra, rb
|
|
OR = 4, // OR rd, ra, rb
|
|
ADD = 5, // ADD rd, ra, rb
|
|
SUB = 6, // SUB rd, ra, rb
|
|
MUL = 7, // MUL rd, ra, rb
|
|
DIV = 8, // DIV rd, ra, rb
|
|
CMP_EQ = 9, // CMP_EQ rd, ra, rb
|
|
CMP_NE = 10, // CMP_NE rd, ra, rb
|
|
CMP_LT = 11, // CMP_LT rd, ra, rb
|
|
CMP_LE = 12, // CMP_LE rd, ra, rb
|
|
CMP_GT = 13, // CMP_GT rd, ra, rb
|
|
CMP_GE = 14, // CMP_GE rd, ra, rb
|
|
JMP = 15, // JMP offset
|
|
JT = 16, // JT r, offset
|
|
JF = 17, // JF r, offset
|
|
LOAD_I = 18, // LOAD_I rd, slot
|
|
STORE_Q = 19, // STORE_Q rs, slot
|
|
LOAD_M = 20, // LOAD_M rd, slot
|
|
STORE_M = 21, // STORE_M rs, slot
|
|
LOAD_GLOBAL = 22, // LOAD_GLOBAL rd, slot
|
|
STORE_GLOBAL = 23, // STORE_GLOBAL rs, slot
|
|
CAL_TON = 24, // CAL_TON instance_slot
|
|
CAL_TOF = 25, // CAL_TOF instance_slot
|
|
CAL_CTU = 26, // CAL_CTU instance_slot
|
|
CALL = 27, // CALL fn_id
|
|
RET = 28, // RET
|
|
};
|
|
|
|
// 操作码总数
|
|
static const int kOpCount = 29;
|
|
|
|
// 助记符:下标与 Op 数值一一对应
|
|
inline const char* mnemonic(Op op) {
|
|
static const char* const kMnemonic[kOpCount] = {
|
|
"MOVE", "LOADK", "NOT", "AND", "OR",
|
|
"ADD", "SUB", "MUL", "DIV",
|
|
"CMP_EQ", "CMP_NE", "CMP_LT", "CMP_LE", "CMP_GT", "CMP_GE",
|
|
"JMP", "JT", "JF",
|
|
"LOAD_I", "STORE_Q", "LOAD_M", "STORE_M",
|
|
"LOAD_GLOBAL", "STORE_GLOBAL",
|
|
"CAL_TON", "CAL_TOF", "CAL_CTU",
|
|
"CALL", "RET",
|
|
};
|
|
const int idx = static_cast<int>(op);
|
|
return (idx >= 0 && idx < kOpCount) ? kMnemonic[idx] : "???";
|
|
}
|
|
}
|