首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么jr指令(MIPS)不能在我的代码中做我期望它做的事情?

为什么jr指令(MIPS)不能在我的代码中做我期望它做的事情?
EN

Stack Overflow用户
提问于 2019-11-28 22:38:25
回答 1查看 248关注 0票数 0

这是我的MIPS汇编代码:

代码语言:javascript
运行
复制
#         Assembly                    Description                      Address
main:         addi $2, $0, 5            # intialize $2 = 5             00       
              addi $3, $0, 12           # intialize $3 = 12            04       
              addi $7, $3, -9           # intialize $7 = 3             08       
              addi $8, $0, 44           # should init $8 = 44          0c      
              or   $4, $7, $2           # $4 = (3 OR 5) = 7            10       
              and  $5, $3, $4           # $5 = (12 AND 7) = 4          14       
              add  $5, $5, $4           # $5 = 4 + 7 = 11              18       
              beq  $5, $7, end          # shouldn’t be taken           1c       
              slt $4, $3, $4            # $4 = 12 < 7 = 0              20       
              beq $4, $0, around        # shouldn’t be taken           24       
              addi $5, $0, 0            # shouldn’t be taken           28       
around:       slt $4, $7, $2            # $4 = 3 < 5 = 1               2c       
              add $7, $4, $5            # $7 = 1 + 11 = 12             30       
              sub $7, $7, $2            # $7 = 12 – 5 = 7              34       
              srl $7, $7, 2             # $7 = 7>>2 = 1                38       
              jr $8                     # jump to [8] = 44             3c       
              addi $2, $0, 1            # shouldn’t be taken           40       
              sw $7, 68($3)             # [80] = 1                     44       
              lw $2, 80($0)             # $2 = [80] = 1                48       
              j end                     # should be taken              4c       
              addi $2, $0, 1            # shouldn’t happen             50       
end:          sw $2, 84($0)             # write mem[84] = 1            54       

它工作得很好,直到我添加了jr $8和addi $2,$0,1指令,所以地址为3c和40的指令。我不知道为什么它会导致程序失败。我认为jr指令将转到$8寄存器内部的地址,我在第4条指令中将该地址指定为44,在此初始化$8。我的想法是jr指令将使其跳转到地址44,然后执行sw指令,因此将省略紧接jr之后的addi指令。

为什么它不能做我想让它做的事?我在MIPS火星上运行它,当一步一步地进行时,它似乎永远不会到达指令sw……取而代之的是14号寄存器...?

有人能解释一下我对jr指令的误解吗?

EN

回答 1

Stack Overflow用户

发布于 2019-11-30 22:31:38

嗨,留下一个答案,因为我还不能评论。看起来你找到了一个解决方案。不确定在本练习中是否可以从内存中添加变量,但是可以,即时数据限制为16位。我通常做的是在.data中声明一个变量,比如0x100000来表示地址,然后将它加载到一个寄存器中以访问该内存地址。我倾向于使用它作为置换,但我不明白为什么它不能作为您的问题的解决方案。

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

https://stackoverflow.com/questions/59091253

复制
相关文章

相似问题

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