Exemplo n.º 1
0
        /*Операция*/
        public void Operate(ref HomeworkWPF.Core CurrentStatement, string parametrs)
        {
            if (parametrs != "")
              {
            int comma = parametrs.IndexOf(',');
            string left = parametrs.Substring(0, comma);
            string right = parametrs.Substring(comma + 1);
            right = right.Trim();

            int rightValue = 0;
            int result = 0;

            /*Проверка: если правый операнд -- порт, то получаем его значение,
            иначе исключение.*/
            int ifRightHasCount = right.IndexOfAny(new char[] { '1','2','3','4','5',
                                                '6','7','8','9','0'});
            if (ifRightHasCount == -1)
            {
              if (right.Length == 5 && right.Contains("port"))
              {
            for (char c = 'A'; c < 'E'; c++)
            {
              if (right[4] == c)
              {
                /*Считываем значение из порта (правый операнд).*/
                rightValue = CurrentStatement.GetPort(right);
                c = 'E';
              }
            }
              }
            }
            else
            {
              throw new HomeworkWPF.ParseCommandException(
                    CurrentStatement.Commands[CurrentStatement.CurrentCommand]);
            }

            if (left.Length == 3 && left[0] == 'e' && left[2] == 'x')
            {
              for (char c = 'a'; c < 'i'; c++)
              {
            if (left[1] == c)
            {
              /*Записываем значение в регистр (левый операнд).*/
              result = rightValue;
              CurrentStatement.SetRegister(left, result);
              return;
            }
              }
            }
              }
              throw new HomeworkWPF.ParseCommandException(
                CurrentStatement.Commands[CurrentStatement.CurrentCommand]);
        }