Моделирование суммирования по отводам регистра.

32-хfunction ModReg( VidReg : TStr_bit) : byte;
16-тиfunction ModReg( VidReg : PStr_bit ; Nbis : word) : byte;

VidReg   – битовая маска регистра, задающая номера отводов;
Nbis   – номер бита, с которого начинается наложение битовой маски.

Функция моделирует суммирование по модулю 2 по отводам регистра, заданного “1” битами переменной VidReg . Суммирование начинается с бита Nbis   в текущей битовой переменной. Функция возвращает результат суммирования, который может принимать значения bt1 или bt0, при этом обе битовых последовательности участвовавшие в операции не изменяются.

Внимание !  Работа процедуры отличается в 32-х и 16-ти разрядных версиях библиотек. Суть различия заключается в том, что в 16-ти разрядной версии осуществляется предварительный сдвиг начала последовательности VidReg  относительно базовой, а потом выполнение операции. В 32-х разрядной версии сдвиг не осуществляется (Nbis   всегда равен0   ).

Пример вычисления синдрома сверточного кода (1338,1718) приведен в таблице. Битовая последовательность кодированных данных хранится в переменной BitStr.
32-х

Var BitStr, Sindr, Reg : PStr_bit; J : Integer; {Объявление переменных}


Sindr^.Init_sim('11100011110111');
For J := 0 to ((BitStr.Size - Sindr.Size-1)div 2)
do begin
Reg.Copy(BitStr, J*2, Sindr.Size);
Write(BitStr^.ModReg(Reg)); {Печать вычисленного значения}
End;

16-ти

Var BitStr, Sindr : PStr_bit; J : Integer; {Объявление переменной}


Sindr^.Init_sim('11100011110111');
For J := 0 to ((BitStr^.Length - Sindr^.Length-1)div 2) do
Write(BitStr^.ModReg(Sindr, J*2)); {Печать вычисленного значения}