| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // Author: simon
- // Author: ynwdlxm@163.com
- // Date: 2024/4/14 15:44
- // Desc: 指令解码
- package vm
- const MAXARG_Bx = 1<<18 - 1 // 2^18 - 1 = 262143
- const MAXARG_sBx = MAXARG_Bx >> 1
- type Instruction uint32
- // Opcode 提取操作码,后 6 位
- func (i Instruction) Opcode() int {
- return int(i & 0X3F)
- }
- // ABC 从 iABC 模式指令中提取参数
- func (i Instruction) ABC() (a, b, c int) {
- a = int(i >> 6 & 0XFF)
- b = int(i >> 14 & 0X1FF)
- c = int(i >> 23 & 0x1FF)
- return
- }
- // ABx 从 iABx 模式指令中提取参数
- func (i Instruction) ABx() (a, bx int) {
- a = int(i >> 6 & 0XFF)
- bx = int(i >> 14)
- return
- }
- // AsBx 从 iAsBx 模式指令中提取参数
- func (i Instruction) AsBx() (a, sbx int) {
- a, bx := i.ABx()
- // sbx 有符号数
- return a, bx - MAXARG_sBx
- }
- // Ax 从 iAx 模式指令中提取参数
- func (i Instruction) Ax() int {
- return int(i >> 6)
- }
- func (i Instruction) OpName() string {
- return opcodes[i.Opcode()].name
- }
- func (i Instruction) OpMode() byte {
- return opcodes[i.Opcode()].opMode
- }
- func (i Instruction) BMode() byte {
- return opcodes[i.Opcode()].argBMode
- }
- func (i Instruction) CMode() byte {
- return opcodes[i.Opcode()].argCMode
- }
|