Как мне получить доступ к состоянию отдельных битов слова в MIPS? - PullRequest
4 голосов
/ 15 апреля 2009

Я пишу программу, и мне нужно определить, установлены ли биты 3 и 6. Я знаю, что могу повернуть слово или сдвинуть его влево / вправо.

Но как мне получить доступ к состоянию отдельного бита? Я использую побитовый оператор как и / xor?

Ответы [ 3 ]

4 голосов
/ 15 апреля 2009

Да, побитовые операторы - это то, что вы используете. Вы можете И с битовой маской, в которой установлены только биты 3 и 6. Затем сделайте сравнение с нулем.

что-то вроде (я давно не делал ассемблер):

and     r2, r1, 0x48  # r2 = r1 & 0x48
cmp     r2, 0x48
jz     zzzzzz   #jmp to zzzzz if bits 6 and 3 are set
4 голосов
/ 15 апреля 2009

Вы должны делать это побитно и с 0x08 и 0x40 (предполагая, что бит 0 является битом самого низкого порядка). Для этого вы должны использовать инструкцию andi.

Если $ t0 - это значение, которое вы хотите проверить:

andi $t1, $t0, 0x08
andi $t2, $t0, 0x40

$ t1 будет отличным от нуля, если установлен бит 3, $ t2 будет отличным от нуля, если установлен бит 6.

2 голосов
/ 15 апреля 2009

Один из методов тестирования одного бита в сборке MIPS - это смещение требуемого бита в наиболее значимую позицию бита и использование bltz / bgez для проверки состояния бита. Это сохраняет инструкцию в тех случаях, когда инструкция andi не может быть использована для выбора нужного бита.

...