示例#1
0
 private Argument(byte value, ushort? nextWord = null, Label nextLabel = null)
 {
     this.isValid = true;
     this.value = value;
     this.nextWord = nextWord;
     this.nextLabel = nextLabel;
 }
示例#2
0
        public Label DefineLabel()
        {
            AssertNotFinished();

            Label label =  new Label(this);
            labels.Add(label);
            return label;
        }
示例#3
0
 private void ValidateLabel(Label label)
 {
     if (label.Generator != this)
         throw new ArgumentException("Label must be defined in this generator.");
 }
示例#4
0
        public void MarkLabel(Label label)
        {
            AssertNotFinished();
            ValidateLabel(label);

            if (label.MarkedPosition != null)
                throw new CodeGenerationException("label already marked another position.");

            label.MarkedPosition = checked((ushort)(CurrentBytePosition / 2));
        }
示例#5
0
        public void EmitData(Label label)
        {
            AssertNotFinished();

            ushort? nextWord;
            GetArgumentValue(label, CurrentBytePosition, out nextWord);
            WriteWord(stream, 0x0000);
        }
示例#6
0
 public static Argument Literal(ushort value, Label address = null)
 {
     if (address == null && value <= 0x1f)
         return new Argument((byte)(0x20 + value));
     else
         return new Argument(0x1f, value, address);
 }
示例#7
0
 public static Argument Indirect(ushort offset, Label address = null)
 {
     return new Argument(0x1e, offset, address);
 }
示例#8
0
 public static Argument Indirect(ushort offset, Register register, Label address = null)
 {
     ValidateRegister(register);
     return new Argument((byte)(0x10 + register), offset, address);
 }