Ejemplo n.º 1
0
                public void ExecuteRecover(Alu alu)
                {
                    var value = Compare.Match(reg => alu.GetRegValue(reg), val => val.Value);

                    if (value != 0)
                    {
                        alu.SetRegValue(_RECEIVE, alu.GetRegValue(_SEND));
                    }
                }
Ejemplo n.º 2
0
                public void ExecuteOp(Alu alu)
                {
                    if (!string.IsNullOrWhiteSpace(DebugKey))
                    {
                        alu.IncreaseDebugCount(DebugKey);
                    }

                    alu.SetRegValue(Register, Operation(alu.GetRegValue(Register),
                                                        Value.Match(reg => alu.GetRegValue(reg),
                                                                    val => val.Value)));
                }
Ejemplo n.º 3
0
 public void ExecuteJump(Alu alu)
 {
     if (Compare.Match(reg => alu.GetRegValue(reg), val => val.Value) != 0)
     {
         var offset = Offset.Match(reg => alu.GetRegValue(reg), val => val.Value);
         if (offset == 0)
         {
             throw new StackOverflowException("Assembunny");
         }
         alu.AdjustPtr(offset - 1);
     }
 }
Ejemplo n.º 4
0
        public override string First(string input)
        {
            var alu = new Alu(input);

            alu.ExecuteProgram(haltOnReceive: true);
            return(alu.GetRegValue(_RECEIVE).ToString());
        }
Ejemplo n.º 5
0
 public void ExecuteReceive(Alu alu)
 {
     if (alu.HasRegValue(_RECEIVE))
     {
         alu.SetRegValue(Register, alu.GetRegValue(_RECEIVE));
         alu.RemoveRegValue(_RECEIVE);
     }
     else
     {
         alu.SetRegValue(_WAITING, 1);
     }
 }
Ejemplo n.º 6
0
                public void ExecuteOutput(Alu alu)
                {
                    var value = Value.Match(reg => alu.GetRegValue(reg), val => val.Value);

                    alu.Output(value);
                }
Ejemplo n.º 7
0
                public void ExecuteToggle(Alu alu)
                {
                    var offset = Offset.Match(reg => alu.GetRegValue(reg), val => val.Value);

                    alu.ToggleInstruction(offset);
                }
Ejemplo n.º 8
0
 public void ExecuteDec(Alu alu)
 {
     alu.SetRegValue(Register, alu.GetRegValue(Register) - 1);
 }
Ejemplo n.º 9
0
 public void ExecuteInc(Alu alu)
 {
     alu.SetRegValue(Register, alu.GetRegValue(Register) + 1);
 }
Ejemplo n.º 10
0
 public void ExecuteCopy(Alu alu)
 {
     alu.SetRegValue(Destination,
                     Source.Match(reg => alu.GetRegValue(reg),
                                  val => val.Value));
 }
Ejemplo n.º 11
0
 public void ExecuteOp(Alu alu)
 {
     alu.SetRegValue(Register, Operation(alu.GetRegValue(Register),
                                         Value.Match(reg => alu.GetRegValue(reg),
                                                     val => val.Value)));
 }