2013-10-27 2 views
0

Я пытаюсь решить проблему, но сначала я тестирую инструкцию rol, и я абсолютно уверен, что делаю что-то очень глупо, что делает мой тест не правильным.Сборка MIPS rotation ROL код

Вот отрывок:

li $t0, 101 ## our data 
    li $t1, 32 ## our loop because we will rotate 32 times later 
loop: 
    ## whatever the bit is, just print it or put it inside the asciiz 
    ## and print it later, after we finish rotating, 
    ## so we rotate starting with the first bit, 
    ## and we put it as the first bit lsb 

    ## first we rotate## 
    rol $t2, $t0, 1 ## rotate and store the new rotated inside $t7 
    and $t3, $t2, 1 ## now we AND to check our lsb if it one or not 

    li $v0, 1 
    move $a0, $t3 ## Print the result of AND 
    syscall 

То, что я в основном пытаюсь сделать, чтобы повернуть MSB моего t0 к LSB, а затем его с операцией AND 1. Тем не менее, то, что я получаю 0 все время.

Надеюсь, кто-то может рассказать мне о моей ошибке и о том, как ее исправить.

Спасибо!

ответ

0

MSB of 101, если представлено на 32 битах, равно нулю, поэтому нулевой результат правильный. Если вы загружаете, например, 0x80000000, вы получите 1. Обратите внимание, что rol является псевдоинструкцией, которую ассемблер заменит последовательностью srl; sll; or, поэтому в зависимости от того, что вы действительно хотите сделать, возможно, более эффективно использовать настоящие инструкции по мере необходимости. Например, в вашем случае один srl $t3, $t0, 31 даст тот же результат, что и последовательность rol; and.

+2

Примечания: Поворот настоящей команда, которая была введенный в MIPS32R2 для архитектуры MIPS ('ROTR'). – markgz

0

Я не вижу никакого прыжка на loop в вашем коде. Как цикл может работать?

Если весь код ниже loop этикетки содержание цикла, то вы вращающееся без сохранения результата до $ t0, поэтому цикл всегда возвращает (101 rol 1) and 1

li $t0, 101 ## our data 
## where did you store the new rotated value to $t0? If not, it's always 101 
rol $t2, $t0, 1 ## $t2 = $t0 rol 1 = 101 rol 1 = 202 
and $t3, $t2, 1 ## $t3 = $t2 and 1 = 202 and 1 = 0 
Смежные вопросы