assembly - MIPS 伪随机模式生成器
问题描述
我有一个计算机体系结构课程的家庭作业问题,需要我编写一个基本的 PRPG。
据我了解,基本概念是取一些起始数字并将其称为种子。从那里,您将种子平方并将其存储为 32 位字。然后,删除位 8 到 23,组合位 0-7 和 24-31,并对其进行符号扩展。把它存回去,增加内存计数器,然后循环,直到你有尽可能多的数字。
我的问题是关于中间位的“丢弃”,在剩余位的组合之后。究竟要怎么做呢?我正在考虑进行逻辑或位移,但我不确定这将如何工作。
解决方案
你需要移动和掩蔽来做到这一点。
在 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 进行右移,因为您有免费的符号扩展。
推荐阅读
- amazon-web-services - 从 cli 从其他帐户访问 cognito
- django - 为查询集注释排名字段的正确方法
- ios - 使用 Youtube REST API 上传的视频失败
- python - 在 Python 中只打印一个类的名称
- list - 使我的函数返回错误消息
- python - 使用 biopython 重命名交错的 fastq 标头
- sql-server - 如何获取每个用户名的最后一条记录
- mongodb - Loopback 4/MongoDB - 外键未转换为 ObjectID
- php - 生成包含 2 个字母和 5 个数字的字母数字字符串。PHP
- javascript - 如何更改父元素的样式
React.js 中的标签?