首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算risc-V中BEQ指令的最大范围?

如何计算risc-V中BEQ指令的最大范围?
EN

Stack Overflow用户
提问于 2022-10-10 10:41:47
回答 1查看 147关注 0票数 0

在risc中,beq指令有12位的imm[12:1]

而PC相对寻址是Target address = PC + immediate x 2

它说,与2乘的原因是因为半个字的指令。

因此,我认为即时值可以表示[-2^12 ~ 2^12-2]的范围,

因为imm[0] == 0中隐藏的位。

与2相乘,则范围为[-2^13 ~ 2^13-2]

因此,当我们认为在2字节增量指令时,分支可以达到

-2^12 ~ 2^12-2

并且在4字节增量指令中,分支可以在以下范围内到达

-2^11 ~ 2^11-2

但在risc-v第29页https://riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf中,

它说条件分支范围是-4KiB ~ 4KiB

这意味着32位指令中的-2^10 ~ 2^10

Q1。在PC的相对寻址中,我们使用13位的结果(隐藏0位)来计算正确吗?

Q2。如果是正确的,如何计算分支指令的范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-10 18:11:25

Q1.在PC的相对寻址中,我们使用13位的结果(隐藏0位)来计算正确吗?

是的,正如您注意到的,处理器使用的公式是

代码语言:javascript
运行
复制
Target address = PC of the branch instruction + immediate x 2

x2重新引入已知为零的第13位,因此在编码过程中被删除。

Q2.如果是正确的,如何计算分支指令的范围?

你有正确的想法。

编码的即时值是12位宽,所以添加到PC的值是13位宽(立即x2). 立即是一个有符号的字段。

最大立即为正,0位后为1的11位,为2047 (又名0x7FF或2^11-1),最小立即为负值,为1位(符号),后面为11位的0's,即-2048 (又名0x800或-2^11)。

因此,最大前向范围是0位,后面是11位1's,1位后面是0,这是4094 (又名0xFFE或2^12-2)。

而最大后向范围是1位,后面是0's的12位,即-4096 (又名0x1000 ( 13位)或-2^12)。

让我们注意,用字节可寻址的机器上的字节来表示范围是很常见的。指令地址是字节地址(甚至,如果所有指令都是32位大小的话). ,所以(字节)范围是-4096。+4094 -这些是可以到达的指令地址。

但是,如果您想考虑可以到达多少个16位指令,我们会将这个字节范围除以一半,所以-2048。+2047,如果考虑到可以达到多少32位指令,我们就会将字节范围除以四分之一,所以-1024。1023.5。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74013648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档