public override void ExitAddress([NotNull] ZealCpuParser.AddressContext context) { var numberLiteral = context.argumentLiteral().numberLiteral(); InstructionArgument argument = null; if (numberLiteral != null) { argument = parseNumberArgument(numberLiteral); if (((NumberInstructionArgument)argument).Size == ArgumentSize.Word) { _currentInstruction.AddressingMode = CpuAddressingMode.Absolute; } else if (((NumberInstructionArgument)argument).Size == ArgumentSize.LongWord) { _currentInstruction.AddressingMode = CpuAddressingMode.AbsoluteLong; } else { _currentInstruction.AddressingMode = CpuAddressingMode.Direct; } } var identifierLitteral = context.argumentLiteral().IDENTIFIER(); if (identifierLitteral != null) { argument = new LabelInstructionArgument(identifierLitteral.GetText()); _currentInstruction.AddressingMode = CpuAddressingMode.Absolute; } if (argument != null) { _currentInstruction.Arguments.Add(argument); } }
public Instruction AddArgument(string name, ushort size, ushort offset = 0, IArgumentStrategy strategy = null) { _arguments[name] = new InstructionArgument(name, size, offset, strategy); return(this); }