示例#1
0
        public byte[] Not(byte[] a)
        {
            byte[] result = new byte[a.Length];

            for (int i = 0; i < a.Length; i++)
            {
                result[i] = (byte)(~a[i]);
            }

            flags = ALUFlags.None;
            return(result);
        }
示例#2
0
        public byte[] Negate(byte[] a)
        {
            int64_t _a = new int64_t(a);

            int64_t result = -_a;

            byte[] r = result.ToBinary();
            byte[] values;

            values = new byte[a.Length];

            Array.Copy(r, values, values.Length);

            flags = ALUFlags.None;
            return(values);
        }
示例#3
0
        public byte[] Add(byte[] a, byte[] b, out bool overflow)
        {
            uint64_t _a = new uint64_t(a);
            uint64_t _b = new uint64_t(b);

            uint64_t result = _a + _b;

            byte[] r = result.ToBinary();
            byte[] values;

            overflow = false;

            if (a.Length >= b.Length)
            {
                values = new byte[a.Length];
            }
            else
            {
                values = new byte[b.Length];
            }

            Array.Copy(r, values, values.Length);
            if (values.Length < 8)
            {
                overflow = (r[values.Length + 1] > 0);
            }
            else
            {
                try
                {
                    UInt64 temp = checked (_a + _b);
                }
                catch (OverflowException)
                {
                    overflow = true;
                    flags    = flags | ALUFlags.Overflow;
                }
            }

            flags = ALUFlags.None;
            if (overflow)
            {
                flags = flags | ALUFlags.Overflow;
            }
            return(values);
        }
示例#4
0
        public void Compare(byte[] a, byte[] b)
        {
            uint64_t _a = new uint64_t(a);
            uint64_t _b = new uint64_t(b);

            flags = ALUFlags.None;
            if (_a.Value == _b.Value)
            {
                flags = flags | ALUFlags.Equal;
            }
            if (_a.Value > _b.Value)
            {
                flags = flags | ALUFlags.GreaterThan;
            }
            if (_a.Value < _b.Value)
            {
                flags = flags | ALUFlags.LessThan;
            }
        }
示例#5
0
 public ALU()
 {
     flags = ALUFlags.None;
 }