首页 > 解决方案 > MIPS 伪随机模式生成器

问题描述

我有一个计算机体系结构课程的家庭作业问题,需要我编写一个基本的 PRPG。

据我了解,基本概念是取一些起始数字并将其称为种子。从那里,您将种子平方并将其存储为 32 位字。然后,删除位 8 到 23,组合位 0-7 和 24-31,并对其进行符号扩展。把它存回去,增加内存计数器,然后循环,直到你有尽可能多的数字。

我的问题是关于中间位的“丢弃”,在剩余位的组合之后。究竟要怎么做呢?我正在考虑进行逻辑或位移,但我不确定这将如何工作。

标签: assemblymips

解决方案


你需要移动和掩蔽来做到这一点。

在 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 进行右移,因为您有免费的符号扩展。


推荐阅读