Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
 public static void ldb(Register32 reg, Link index)
 {
     reg.Value = ActiveCore.GetWord(index.GetValue());
 }
Beispiel #3
0
 public static void incr(Register32 a, Register32 b)
 {
     a.Value++;
     _comp(a.Value - b.Value);
 }
Beispiel #4
0
 public static void inc(Register32 a)
 {
     a.Value++;
     _comp(a.Value - a.Value);
 }
Beispiel #5
0
 public static void compr(Register32 a, Register32 b)
 {
     _comp(a.Value - b.Value);
 }
Beispiel #6
0
 public static void addr(Register32 a, Register32 b)
 {
     _comp(a.Value + b.Value);
     a.Value += b.Value;
 }
Beispiel #7
0
 public static void mul(Register32 reg, int value)
 {
     _comp(reg.Value * value);
     reg.Value *= value;
 }
Beispiel #8
0
 public static void comp(Register32 reg, int value)
 {
     _comp(reg.Value - value);
 }
Beispiel #9
0
 public static void add(Register32 reg, int value)
 {
     _comp(reg.Value + value);
     reg.Value += value;
 }
Beispiel #10
0
 public static void sub(Register32 reg, int value)
 {
     _comp(reg.Value - value);
     reg.Value -= value;
 }
Beispiel #11
0
 public static void divr(Register32 a, Register32 b)
 {
     _comp(a.Value / b.Value);
     a.Value /= b.Value;
 }
Beispiel #12
0
 public static void mulr(Register32 a, Register32 b)
 {
     _comp(a.Value * b.Value);
     a.Value *= b.Value;
 }
Beispiel #13
0
 public static void subr(Register32 a, Register32 b)
 {
     _comp(a.Value - b.Value);
     a.Value -= b.Value;
 }
Beispiel #14
0
 public static void push(Register32 reg)
 {
     ActiveCore.Stack.Push(reg.Value);
 }
Beispiel #15
0
 public static void div(Register32 reg, int value)
 {
     _comp(reg.Value / value);
     reg.Value /= value;
 }
Beispiel #16
0
 public static void mov(Register32 a, Register32 b)
 {
     a.Value = b.Value;
 }
Beispiel #17
0
 public static void ld(Register32 reg, int value)
 {
     reg.Value = value;
 }
Beispiel #18
0
 public static void compb(Register32 reg, int value)
 {
     _comp((char)reg.Value - (char)value);
 }
Beispiel #19
0
 public static void clear(Register32 reg)
 {
     reg.Value = 0;
 }
Beispiel #20
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);
        }
Beispiel #21
0
 public Register8(string name, Register32 owner, int offest = 0) : base(name)
 {
     this.offest = offest;
     this.owner  = owner;
 }