/*Операция*/ 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 != "") { string source = parametrs.Trim(); int value = 0; /*Проверка: если операнд -- число, то получаем значение, если операнд -- регистр, то получаем значение из регистра.*/ 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) { value = CurrentStatement.GetRegister(source); c = 'i'; } else if (c == 'h') { throw new HomeworkWPF.ParseCommandException(CurrentStatement.Commands[CurrentStatement.CurrentCommand]); } } } } else { value = int.Parse(source); } /*Помещаем значение в стек*/ CurrentStatement.Push(new HomeworkWPF.StackItem { Data = value, Address = false }); } 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 == 5 && left.Contains("port")) { for (char c = 'A'; c < 'E'; c++) { if (left[4] == c) { /*Записываем значение в порт (левый операнд).*/ result = rightValue; CurrentStatement.SetPort(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 leftValue = 0; int rightValue = 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); } /*Проверка: если левый операнд -- число, то получаем значение, если левый операнд -- регистр, то получаем значение из регистра.*/ int ifLeftHasCount = left.IndexOfAny(new char[] { '1','2','3','4','5', '6','7','8','9','0'}); if (ifLeftHasCount == -1) { if (left.Length == 3 && left[0] == 'e' && left[2] == 'x') { for (char c = 'a'; c < 'i'; c++) { if (left[1] == c) { leftValue = CurrentStatement.GetRegister(left); c = 'i'; } } } } else { leftValue = int.Parse(left); } /*Сравнение: если a >= b, то ZF=1, иначе ZF=0.*/ if (leftValue >= rightValue) { CurrentStatement.ZF = 1; } else { CurrentStatement.ZF = 0; } return; } throw new HomeworkWPF.ParseCommandException(CurrentStatement.Commands[CurrentStatement.CurrentCommand]); }