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 address = 0; HomeworkWPF.StackItem item = null; int count = 0; /*Ищем в стеке адрес возврата.*/ while (address == 0 && CurrentStatement.MicroStack.Count > 0) { item = CurrentStatement.Pop(); if (item.Address == true) { address = item.Data; } } /*Переходим по адресу. Меняем индекс обрабатываемой команды.*/ foreach (HomeworkWPF.CommandItem i in CurrentStatement.Commands) { if (i.Address == address) { CurrentStatement.CurrentCommand = count; return; } count++; } } throw new HomeworkWPF.ParseCommandException(CurrentStatement.Commands[CurrentStatement.CurrentCommand]); }