首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这两条mips指令会在流水线中造成数据风险?

为什么这两条mips指令会在流水线中造成数据风险?
EN

Stack Overflow用户
提问于 2013-04-22 09:51:23
回答 2查看 1K关注 0票数 0

我正在学习mips中的管道,并被告知这两条指令:

代码语言:javascript
复制
jal addr;
store $ra;store the value of $ra into memory

会造成数据风险,但我不明白why.Could有没有人帮我?

EN

回答 2

Stack Overflow用户

发布于 2013-04-22 10:13:34

我不知道store是什么,但是在MIPS上所有普通的分支和跳转指令都是和紧随其后的指令一起执行的。在大多数微不足道的情况下,你可能认为分支/跳转是最后一个执行的,而另一个指令是第一个执行的。

然而,如果成对的指令在内部作为一个不可分的指令而不是两个单独的指令执行,我不会感到惊讶。

这里的潜在问题是jal$ra中存储store之后的指令的地址。如果store或它是什么指令使用$ra,在两次访问$ra之间可能会有竞争条件,数据风险,不管你怎么叫它,最终结果可能是不确定的,或者人们可能天真地期望的结果。

票数 0
EN

Stack Overflow用户

发布于 2013-04-23 04:37:30

MIPS分支延迟槽中的指令始终在分支执行之前完全执行。因此,store $ra指令将存储$ra的值,该值是在 jal指令更新$ra之前存在的$ra。换句话说,这个序列:

代码语言:javascript
复制
    li  $ra, 0x1234
 L: jal addr
    nop
    store $ra, mem    # mem <- L + 8

将一个不同的值存储到内存中,而不是这个序列:

代码语言:javascript
复制
    li  $ra, 0x1234
    jal addr
    store $ra, mem    # mem <- 0x1234

这在MIPS体系结构中不是未定义的序列,因此结果是可预测的。

除非设置了noreorder,否则MIPS汇编程序通常会在jal之后插入一个nop

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

https://stackoverflow.com/questions/16138287

复制
相关文章

相似问题

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