コード例 #1
0
        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);
            }
        }
コード例 #2
0
 public Instruction AddArgument(string name, ushort size, ushort offset = 0, IArgumentStrategy strategy = null)
 {
     _arguments[name] = new InstructionArgument(name, size, offset, strategy);
     return(this);
 }