MIPS Psuedo Генератор случайных чисел - PullRequest
0 голосов
/ 06 февраля 2019

У меня проблема с домашним заданием для курса по компьютерной архитектуре, который требует от меня программирования основной PRPG.

Основная концепция, насколько я понимаю, состоит в том, чтобы взять начальный номер и назвать его семенем.Оттуда вы возводите в квадрат семя и сохраняете его как 32-битное слово.Затем вы сбрасываете биты с 8 по 23, объединяете биты 0-7 и 24-31 и подписываете его.Сохраните его обратно, увеличьте счетчик памяти и зацикливайте, пока у вас не будет столько чисел, сколько вы хотите.

Мой вопрос касается «отбрасывания» средних битов после комбинации оставшихся битов.Как именно это можно сделать?Я думал о том, чтобы сделать логику или сдвиг битов, но я не совсем уверен, как это будет работать.

1 Ответ

0 голосов
/ 07 февраля 2019

Для этого вам нужно смещение и маскирование.

В C это будет написано

int new, old;
int mask=0x000000ff ; // 
new =   (old & mask)            // keeps  only LS byte of old
      | ((old >> 16) & ~mask) ; // and add MSByte at position 8:15

Вам нужны только инструкции AND, OR, NOR (для дополнения маски) исдвиги.
Лучше использовать SRA вместо SRL для сдвига вправо, как для бесплатного расширения знака.

...