public void Operate(ref HomeworkWPF.Core CurrentStatement, string parametrs) { if (parametrs != "") { string source = parametrs.Trim(); HomeworkWPF.StackItem item = CurrentStatement.Pop(); int value = item.Data; /*Проверка: операнд -- регистр, то помещаем значение в регистр, иначе ошибка.*/ int ifSourceHasCount = source.IndexOfAny(new char[] { '1','2','3','4','5', '6','7','8','9','0'}); if (ifSourceHasCount == -1) { if (source.Length == 3 && source[0] == 'e' && source[2] == 'x') { for (char c = 'a'; c < 'i'; c++) { if (source[1] == c) { /*Помещаем значение в регистр*/ CurrentStatement.SetRegister(source, value); return; } } } } } else { throw new HomeworkWPF.ParseCommandException(CurrentStatement.Commands[CurrentStatement.CurrentCommand]); } }
/*Операция*/ 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 == 3 && right[0] == 'e' && right[2] == 'x') { for (char c = 'a'; c < 'i'; c++) { if (right[1] == c) { rightValue = CurrentStatement.GetRegister(right); c = 'i'; } } } } else { rightValue = int.Parse(right); } if (left.Length == 3 && left[0] == 'e' && left[2] == 'x') { for (char c = 'a'; c < 'i'; c++) { if (left[1] == c) { /*Находим значение левого операнда (регистра).*/ result = CurrentStatement.GetRegister(left) + rightValue; /*Помещаем результат выполнения операции в регистор.*/ CurrentStatement.SetRegister(left, result); return; } } } } throw new HomeworkWPF.ParseCommandException(CurrentStatement.Commands[CurrentStatement.CurrentCommand]); }
/*Операция*/ 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]); }