asm support for all opcodes

This commit is contained in:
Ian Gulliver
2021-11-18 19:48:46 -10:00
parent 8b502f940c
commit 941939da83
2 changed files with 80 additions and 15 deletions

View File

@@ -7,20 +7,6 @@ import "strings"
import "github.com/firestuff/subcoding/vm"
import "github.com/pkg/errors"
var opCodeByName = map[string]vm.OpCodeType{
"add": vm.OpAdd,
"call": vm.OpCall,
"ltu": vm.OpLTU,
"jmpt": vm.OpJmpT,
}
var operandsByOpCode = map[vm.OpCodeType]int{
vm.OpAdd: 2,
vm.OpCall: 1,
vm.OpLTU: 2,
vm.OpJmpT: 1,
}
func Assemble(src []byte) ([][]*vm.Instruction, error) {
prog, err := parse(src)
if err != nil {
@@ -67,7 +53,7 @@ func assembleInstruction(in instruction) (*vm.Instruction, error) {
instr := &vm.Instruction{}
opCode, found := opCodeByName[in[0]]
opCode, found := opCodeByName[strings.ToLower(in[0])]
if !found {
return nil, fmt.Errorf("Invalid op name: %s\n", in[0])
}
@@ -101,6 +87,7 @@ func assembleInstruction(in instruction) (*vm.Instruction, error) {
}
func assembleOperand(op string) (vm.Operand, error) {
op = strings.ToLower(op)
ret := vm.Operand{}
numStr := ""