MCPcopy Create free account
hub / github.com/djhworld/simple-computer / parseTwoRegisterInstruction

Function parseTwoRegisterInstruction

asm/parser.go:202–241  ·  view source on GitHub ↗
(name string, operands string)

Source from the content-addressed store, hash-verified

200}
201
202func parseTwoRegisterInstruction(name string, operands string) (Instruction, error) {
203 registers := TWO_REGISTER_EXTRACTOR.FindStringSubmatch(operands)
204
205 if len(registers) != 3 {
206 return nil, fmt.Errorf("Instruction %s only supports two command separated registers", name)
207 }
208
209 var register1 REGISTER
210 if v, ok := REGISTERS[registers[1]]; !ok {
211 return nil, fmt.Errorf("Unknown register %s for instruction %s", registers[1], name)
212 } else {
213 register1 = v
214 }
215
216 var register2 REGISTER
217 if v, ok := REGISTERS[registers[2]]; !ok {
218 return nil, fmt.Errorf("Unknown register %s for instruction %s", registers[2], name)
219 } else {
220 register2 = v
221 }
222
223 switch name {
224 case "ADD":
225 return ADD{register1, register2}, nil
226 case "AND":
227 return AND{register1, register2}, nil
228 case "XOR":
229 return XOR{register1, register2}, nil
230 case "OR":
231 return OR{register1, register2}, nil
232 case "LD":
233 return LOAD{register1, register2}, nil
234 case "ST":
235 return STORE{register1, register2}, nil
236 case "CMP":
237 return CMP{register1, register2}, nil
238 default:
239 return nil, fmt.Errorf("unknown/unsupported instruction %s", name)
240 }
241}
242
243func parseOneRegisterInstruction(name string, operands string) (Instruction, error) {
244 registers := ONE_REGISTER_EXTRACTOR.FindStringSubmatch(operands)

Callers 1

parseInstructionFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected