assembly – Greater than, less than equal, greater than equal in MIPS
assembly – Greater than, less than equal, greater than equal in MIPS
Im assuming that the pseudocode executes sequentially, so an earlier condition being true means you go there and never reach the later if
statements. This makes the last branch guaranteed taken if its reached at all, so it doesnt even need to be conditional. (Also assuming that this is a MIPS without a branch-delay slot.)
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
If thats not the case, youll want to implement $s0 >= $s1
as
!($s0 < $s1)
with slt $t1, $s0, $s1
/ beqz $t1, target
, for example,
as shown in Ahmeds answer.
To implement each compare separately, without optimizing across multiple compares with earlier true conditions making later ones unreachable:
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:
Related:
- How to do less than or equal in Assembly Language(MIPS)? – branchless compare-into-register for things like C
return (z<=y);
as anint
.
assembly – Greater than, less than equal, greater than equal in MIPS
Related posts on MIPS :
- Converting a C program to MIPS
- assembly – MIPS srl by a variable
- assembly – MIPS Store Word (sw)
- assembly – If else in MIPS
- qtspim – MIPS multu overflow
- cpu – Register file forwarding in MIPS
- assembly – PC on Mips Reference Sheet
- assembly – MIPS to C Translation
- assembly – MIPS instruction questions
- memory – MIPS: store address not aligned on word boundary