public static void jge(Link index) { Register32 a = reg <Register32>("a"); RegisterFlag reg = reg <RegisterFlag>("flag"); if (reg.SF == reg.OF) { ActiveCore.ActiveIndex = index.Line - 1; } }
public static void ldb(Register32 reg, Link index) { reg.Value = ActiveCore.GetWord(index.GetValue()); }
public static void incr(Register32 a, Register32 b) { a.Value++; _comp(a.Value - b.Value); }
public static void inc(Register32 a) { a.Value++; _comp(a.Value - a.Value); }
public static void compr(Register32 a, Register32 b) { _comp(a.Value - b.Value); }
public static void addr(Register32 a, Register32 b) { _comp(a.Value + b.Value); a.Value += b.Value; }
public static void mul(Register32 reg, int value) { _comp(reg.Value * value); reg.Value *= value; }
public static void comp(Register32 reg, int value) { _comp(reg.Value - value); }
public static void add(Register32 reg, int value) { _comp(reg.Value + value); reg.Value += value; }
public static void sub(Register32 reg, int value) { _comp(reg.Value - value); reg.Value -= value; }
public static void divr(Register32 a, Register32 b) { _comp(a.Value / b.Value); a.Value /= b.Value; }
public static void mulr(Register32 a, Register32 b) { _comp(a.Value * b.Value); a.Value *= b.Value; }
public static void subr(Register32 a, Register32 b) { _comp(a.Value - b.Value); a.Value -= b.Value; }
public static void push(Register32 reg) { ActiveCore.Stack.Push(reg.Value); }
public static void div(Register32 reg, int value) { _comp(reg.Value / value); reg.Value /= value; }
public static void mov(Register32 a, Register32 b) { a.Value = b.Value; }
public static void ld(Register32 reg, int value) { reg.Value = value; }
public static void compb(Register32 reg, int value) { _comp((char)reg.Value - (char)value); }
public static void clear(Register32 reg) { reg.Value = 0; }
public bool ParseOperation(Operation operation, string[] input) { ParameterInfo[] paramInfo = operation.method.GetParameters(); List <object> output = new List <object>(); ErrorMessageRow error = new ErrorMessageRow(null, operation.row.Index + 1); if (input.Length != paramInfo.Length) { error.Message = string.Format("Операция '{0}' имеет {1} оргумент(а)", operation.operation, paramInfo.Length); } for (int i = 0; i < input.Length && error.Message == null; i++) { Type needType = paramInfo[i].ParameterType; int oldCount = output.Count; string value = input[i]; value = value.TrimStart('#'); if (needType.BaseType == typeof(Register)) { Register reg = GetRegister(value.ToLower()); if (reg == null) { error.Message = string.Format("Регистр '{0}' не сущесвует", value); } if (!needType.IsInstanceOfType(reg)) { error.Message = string.Format("Регистр '{0}' не может использоватся здесь", value); } output.Add(reg); } else if (needType == typeof(int) || needType == typeof(short) || needType == typeof(char) || needType == typeof(byte)) { double?result = value.MathToDouble(); if (result != null) { output.Add(Convert.ChangeType(result, needType)); } else { error.Message = string.Format("'{0}' не является числом", value); } } else if (needType == typeof(Link)) { string[] temp = value.Split('['); Link link = new Link(); double? row = value.MathToDouble(); if (row != null) { link.Line = (int)row; } else { if (!Links.ContainsKey(temp[0])) { error.Message = string.Format("Метка '{0}' не определена", temp[0]); } else { link.Line = Links[temp[0]]; } } if (temp.Length == 2) { temp[1] = temp[1].Remove(temp[1].Length - 1).ToLower(); Register32 reg = GetRegister(temp[1]) as Register32; if (reg == null) { error.Message = string.Format("Регистр '{0}' не сущесвует или не может использоватся здесь", temp[1]); } else { link.reg32 = reg; } } output.Add(link); } if (oldCount == output.Count && error.Message != "") { error.Message = string.Format("Недопустимый пораметр {0}", value); } } operation.args = output.ToArray(); if (error.Message == null) { return(true); } addError(error); return(false); }
public Register8(string name, Register32 owner, int offest = 0) : base(name) { this.offest = offest; this.owner = owner; }