#cpp
if(rand&1){rand=(rand>>1)^polynom;} else {rand=(rand>>1);}
Вот ссылка на статью http://vrtp.ru/index.php?showtopic=9500&hl=%CC-%EF%EE%F1%EB%E5%E4%EE%E2%E0%F2%E5%EB%FC%ED%EE%F1%F2%FC
Очень срочно нужно. Это для учебы. вот скрин интерфейса моей программы

Подскажите, мтожно сделать такой генератор на IC. Леонид в свое время давал интересные схемы, но они моего преподавателя не устроили. Он хочет, чтобы они были на IC и была возможность менять образующий полином. По ссылке выше есть пример на С, но я не знаю как его прикрутить.
------------ Дoбавленo в 10.27:
Dilma, Nesco и другие ПОМОГИТЕ вот очередной исходник на С. Помогите это реализовать на Hiasm, или напишите, что не сможете. Тогда буду искать другие выходы
Можем представить полином 1235732xxxxxx в виде (32, 7, 5, 3, 2, 1, 0). Этот полином легко превратить в LFSR максимальной длины (последнее число всегда 0). Числа, кроме последнего нуля, обозначают tap sequence. В этом примере, числа означают, что взяв 32-битный регистр сдвига и генерируя новый бит путем XOR’a 32-го, 7-го, 5-го, 3-го, 2-го, 1-го бит, мы получим LFSR максимальной длины: Приведем программу на языке С для этого LFSR:
#cpp
Int LFSR() { Static unsigned long ShiftRegister = 1; ShiftRegister = (((( ShiftRegister>>31)
^( ShiftRegister>>6)
^( ShiftRegister>>4)
^( ShiftRegister>>2)
^( ShiftRegister>>1)
^( ShiftRegister)
&0x00000001)
<<31
| ShiftRegister>>1);
return ShiftRegister & 0x00000001; }
Модифицированные LFSR
Можно переписать программу, реализующую LFSR для того, чтобы не возиться с битовыми операциями, иногда такую модификацию называют конфигурацией Галуа.
#cpp
#define mask 0x80000057
Static unsigned long ShiftRegister = 1;
Void seed_LFSR(unsigned long seed)
{
If (seed == 0) seed = 1;
ShiftRegister = seed;
}
int modified_LFSR(void)
{
if(ShiftRegister & 0x00000001)
{
ShiftRegister = (ShiftRegister ^ mask >> 1) | 0x8000000;
return 1;
}
else
{
ShiftRegister >>= 1;
}
}