首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对MIPS中的if跳转感到困惑

对MIPS中的if跳转感到困惑
EN

Stack Overflow用户
提问于 2021-09-05 18:05:46
回答 2查看 313关注 0票数 2

我很难理解为什么我的bge语句中的跳转跳到标签,然后结束,而其他两个执行标签并返回。我对此有点陌生,希望有一个链接或另一个类似的问题,我找不到。在我看来,我已经留下了一些评论,以及nop末尾的代码结果,我可能是错的,如果我满怀希望的话,我可以在它应该如何工作方面得到指导。

代码语言:javascript
运行
复制
.globl main
.data
.text
main:

    li $t5, 8
    li $t6, 9 
    blt $t6,$t5, L1 // if (9 < 8) goto L1
    addi $t1, $t1, 2 // $t1 = 2
L1: 
    addi $t1, $t1, 1 // $t1 = 3
    nop // $t1 = 3 
    li $t7, 2
    li $t3, 2
    bne $t7,$t3, L2 // if ( 2 == 2) goto L2
    addi $t3, $t3, 2 // $t3 = 9
L2: 
    addi $t3, $t3, 5 // $t3 = 7
    nop // $t3 = 9
    li $t6, 4
    li $t5, 1
    bge $t6,$t5, L3 // if (4 >= 1) goto L3
    add $t6, $t6, $t5
    addi $t6, $t6, 3  
L3: 
    addi $t6, $t6, 5 // $t6 = 9
    nop // $t6 = 9
EN

Stack Overflow用户

回答已采纳

发布于 2021-09-05 18:34:42

第一,术语:

标签不执行。它们在汇编代码中,但是没有机器代码,处理器从未看到它们。因此,标签本身不能改变控制流,只有处理器指令才能做到这一点。

标签在汇编代码中,它们用于通知汇编程序在机器代码指令中为引用它们的汇编指令选择了哪些偏移(标签)。

这段代码中没有任何东西可以“返回”. --通常我们为通过间接分支返回给调用方的子例程保留返回术语。

至于结束,您没有一个有效的程序指令序列结束,所以,它只是运行结束时,它是完成。

在第一个分支中,blt不应该开火(而应该通过)b/c9确实不少于8。

您对bne的评论与在程序集中编写的操作相反,这可能会清除一些东西。这个分支也不会触发,因为2确实等于2。

最后一个分支将触发,因为4是>= 1,因此将跳过前面的几条指令。

您应该在开始时将$t1初始化为零,而不是依赖模拟器将其清除为零。

您是正确的,$t6将以9= 4+5结束。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69066022

复制
相关文章

相似问题

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