Como faço para acessar o estado de bits individuais de uma palavra em MIPS?
-
09-09-2019 - |
Pergunta
Eu estou escrevendo um programa e eu preciso determinar se os bits 3 e 6 estão definidas. Eu sei que pode girar uma palavra ou esquerda shift / direito do mouse.
Mas como faço para acessar o estado de bit individual? Eu uso um operador bit a bit como e / xor?
Solução
Você faria um bit a bit e com 0x08 e 0x40 (presumindo bit 0 é o bit de ordem mais baixa). Você usaria a instrução andi para fazer isso.
Se $ t0 é o valor que você deseja teste:
andi $t1, $t0, 0x08
andi $t2, $t0, 0x40
$ t1 será diferente de zero se bit 3 está definido, $ t2 será diferente de zero se bit 6 está definido.
Outras dicas
Sim, operadores bit a bit são o que você usa. Você pode e com uma máscara de bits que tem apenas os bits 3 e 6 set. Em seguida, faça uma comparação com zero.
algo como (Eu não fiz assembler em um longo tempo):
and r2, r1, 0x48 # r2 = r1 & 0x48
cmp r2, 0x48
jz zzzzzz #jmp to zzzzz if bits 6 and 3 are set
Uma técnica para testar um único bit em MIPS montagem é deslocar o bit desejada para a posição de bit mais significativa e utilização bltz / bgez para testar o estado do bit. Isso economiza uma instrução nos casos em que a instrução andi não pode ser usado para selecionar o bit desejado.