Beispiel #1
0
        public static WordField LoadFromRegister(FieldSpec fieldSpec, Register register)
        {
            int fieldSpecByteCount = fieldSpec.ByteCount;

            if (fieldSpecByteCount > register.ByteCountWithPadding)
            {
                throw new ArgumentOutOfRangeException("fieldSpec", fieldSpec, "bytecount too large for this register");
            }

            WordField field = new WordField(fieldSpec, fieldSpecByteCount);
            int       fromRegisterStartIndex = register.ByteCountWithPadding - fieldSpecByteCount;

            fieldSpecByteCount--;

            while (fieldSpecByteCount >= 0)
            {
                field[fieldSpecByteCount] = register.GetByteWithPadding(fromRegisterStartIndex + fieldSpecByteCount);
                fieldSpecByteCount--;
            }

            if (fieldSpec.IncludesSign)
            {
                field.Sign = register.Sign;
            }

            return(field);
        }
Beispiel #2
0
        public int CompareTo(FullWord toCompare)
        {
            WordField field = LoadFromFullWord(mFieldSpec, toCompare);

            long wordValue  = base.LongValue;
            long fieldValue = field.LongValue;

            return(wordValue.CompareTo(fieldValue));
        }
Beispiel #3
0
        public static WordField LoadFromFullWord(FieldSpec fieldSpec, FullWord word)
        {
            int fieldSpecByteCount = fieldSpec.ByteCount;

            WordField field             = new WordField(fieldSpec, fieldSpecByteCount);
            int       lowBoundByteIndex = fieldSpec.LowBoundByteIndex;

            for (int i = 0; i < fieldSpecByteCount; i++)
            {
                field[i] = word[lowBoundByteIndex + i];
            }

            if (fieldSpec.IncludesSign)
            {
                field.Sign = word.Sign;
            }

            return(field);
        }