Выражая это утверждение в MIPS - PullRequest
1 голос
/ 24 июля 2011

Я только что начал на MIPS с симулятором SPIM. Может ли кто-нибудь помочь мне преобразовать это утверждение?

if(as>47 && as<58) function();
else continue;

Спасибо заранее. :)

1 Ответ

5 голосов
/ 24 июля 2011

Мои MIPS немного ржавые, поэтому заранее извиняюсь, если это не сработает без незначительной настройки, но, надеюсь, это даст вам хорошее представление о том, что вы пытаетесь сделать.

(Если вы обнаружите, что это не работает, пожалуйста, дайте мне знать, чтобы я мог отредактировать сообщение)

# Assume 'as' is in $s0
li $t2, 1           # $t2 = 1
slti $t0, $s0, 58   # $t0 = $s0 < 58
addi $t1, $s0, 1    # $t1 = $s0 + 1
slti $t1, 47, $s0   # $t1 =  47 < $s0 + 1 (sgti does not exist)
and $t0, $t0, $t1   # $t0 = $t0 && $t1

bne $t0, $t2, cont      # if ($t0 != $t2) goto cont

function: # Label is optional.
# If both conditions are true, the bne won't branch, so we will
# fall through to function: and run whatever code it has.
# otherwise, we jump to cont: and all the func code is skipped.
    # ...

cont: # continue;

    # ...

Обратите внимание, что сейчас функция () на самом деле не является функцией.однако вы можете jal function и этот блок находиться где-то еще.Вот хороший справочник по набору команд MIPS .

Хитрость в MIPS заключается в том, что, поскольку у вас нет команды больше чем, вы должны использовать противоположное.

Помните, что противоположность> НЕ является <, это <=. </strong>

...