2013-03-03 4 views
7

Compte tenu de deux registres $s0, $s1, comment puis-je convertir le pseudo-code suivant en langage assembleur MIPS en utilisant uniquement le slt (situé sur moins) et beq et bne (branche si instructions égales, dérivées sinon égales).Plus grand que, inférieur ou égal, supérieur ou égal à MIPS

if ($s0 > $s1) { goto label1 } 
    if ($s0 >= $s1) { goto label2 } 
    if ($s0 <= $s1) { go to label3 } 

Répondre

18
slt $t1,$s1,$s0  # checks if $s0 > $s1 
beq $t1,1,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 

Je suppose que le pseudocode exécute de façon séquentielle, et que vous ne pouvez pas aller à deux étiquettes différentes.

+0

pas totalement applicable à MIPS. D'une part, MIPS n'a pas de registre de drapeaux. Lisez-le dessus. –

+13

Bien sûr que c'est applicable. Bien sûr, MIPS n'a pas de registre de drapeau, mais ce n'est pas pertinent ici. 'slt' placera une valeur de 1 dans $ t1 si $ s0> $ s1 – audiFanatic

1

Je pense que cela devrait être:

stl $at, $s1, $s0 
bne $at, $zero, label1 

stl $t0, $s0, $s1 
beq $t0, $zero, label2 

stl $t1, $s1, $s0 
beq $t1, $zero, label3 

label1: 
label2: 
label3: 
Questions connexes