首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MIPS中大于、小于等于、大于等于

问在MIPS中大于、小于等于、大于等于
EN

Stack Overflow用户
提问于 2013-03-03 15:13:35
回答 2查看 113.6K关注 0票数 18

给定两个寄存器$s0和$s1,如何仅使用slt (设置为小于)和beq和bne (如果等于则为分支,如果不等于则为分支)指令将以下伪代码转换为MIPS汇编语言。

代码语言:javascript
复制
   if ($s0 > $s1) { goto label1 }
   if ($s0 >= $s1) { goto label2 }
   if ($s0 <= $s1) { go to label3 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-03 17:33:14

我假设伪代码是按顺序执行的,因此前面的条件为真意味着您到了那里,永远不会到达后面的if语句。这使得最后一个分支在到达时被保证采用,因此它甚至不需要是有条件的。(还假设这是一个没有分支延迟插槽的MIPS。)

代码语言:javascript
复制
slt  $t1,$s1,$s0      # checks if $s0 > $s1
bne  $t1,$zero,label1 # if $s0 >  $s1, goes to label1
beq  $s1,$s2,label2   # if $s0 == $s2, goes to label2 
# beq  $t1,$zero,label3 # if $s0 <  $s1, goes to label3
b    label3            # only possibility left

如果不是这样,您将希望将$s0 >= $s1实现为

使用slt $t1, $s0, $s1 / beqz $t1, target的!($s0 < $s1),例如,

正如艾哈迈德的回答所示。

票数 36
EN

Stack Overflow用户

发布于 2018-01-13 23:11:54

要单独实现每个比较,而不对多个比较进行优化,则会导致后面的条件无法实现:

代码语言:javascript
复制
slt $at, $s1, $s0           # $s0 > $s1  as ($s1 < $s0) != 0
bne $at, $zero, label1

slt $t0, $s0, $s1           # $s0 >= $s1 as (s0<s1) == 0
beq $t0, $zero, label2

slt $t1, $s1, $s0           # $s0 <= $s1 the same but reversing the inputs
beq $t1, $zero, label3

label1:
label2:
label3:

相关信息:

进行无分支比较到寄存器中

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

https://stackoverflow.com/questions/15183346

复制
相关文章

相似问题

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