2013-03-03 16 views
7

Biorąc pod uwagę dwa rejestry $s0, $s1, w jaki sposób mogę przekonwertować następujące Pseudokod w asemblerze MIPS przy użyciu tylko slt (ustawiony na mniej niż) i beq i bne (oddziału, jeżeli równe, rozgałęzione, jeśli nie równe) instrukcje.większa niż, mniej niż równe, większe niż równe MIPS

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

Odpowiedz

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 

jestem przy założeniu, że pseudokod realizuje kolejno, i że nie można przejść do dwóch różnych etykiet.

+0

Całkowicie nie dotyczy MIPS. Po pierwsze, MIPS nie ma rejestru flag. Przeczytaj na ten temat. –

+13

Oczywiście, że to dotyczy. Oczywiście MIPS nie ma żadnego rejestru flag, ale nie ma to znaczenia tutaj. 'slt' umieści wartość 1 w $ t1, jeśli $ s0> $ s1 – audiFanatic

1

myślę, że powinno być:

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: