Oi pessoal! Tudo bem? Espero que sim. No último artigo publicado desta série eu falei sobre as operações lógicas de deslocamento à direita e à esquerda. Hoje, vou falar sobre a operação lógica AND no MIPS.
AND
A operação lógica AND é uma operação bit a bit com dois operandos que resulta em 1 somente se os dois bits dos operandos também forem 1. É o mesmo comportamento esperado de uma porta lógica AND que possui a seguinte tabela booleana:
| P | Q | R |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Pela tabela, nota-se um comportamento muito parecido com a multiplicação, veja: 0 * 0 = 0; 0 * 1 = 0; 1 * 0 = 0 e, 1 * 1 = 1. A instrução AND tem a seguinte sintaxe:
AND registrador_destino, registrador_fonte, registrador_fonte
O registrador destino armazena o resultado da operação que é operada em cima dos dois operandos que estão armazenados cada um em um registrador fonte diferente. Considere o seguinte exemplo: o registrador $t3 possui o valor decimal 3328, que em binário é
0000 0000 0000 0000 0000 1101 0000 0000
e o registrador $t4 possui o valor decimal 15.360 que em binário é
0000 0000 0000 0000 0011 1100 0000 0000
Assim temos a instrução
AND $t0, $t3, $t4 #$t0 = $t3 & $t4
O que acontece nesta operação pode ser representado como a tabela abaixo:
|
$t3 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
$t4 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
$t0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Cada bit que compõe o número binário será verificado individualmente, começando pelo bit mais à direita e terminando no bit mais à esquerda, como acontece quando você resolve uma conta aritmética no caderno. O bit resultante de cada posição resultará em 1 somente se os bits dos operandos também forem 1, conforme você pode comprovar nas posições 11 e 12, caso contrário, o resultado será 0. O número decimal resultante desta operação é 3.072.
Vejamos então como fica a Linguagem de Montagem:
AND $t0, $t3, $t4
A Linguagem de Máquina:
AND $8, $11, $12
Representação da Linguagem de Máquina:
|
opcode |
rs |
rt |
rd |
shamt |
funct |
|
0 |
11 |
12 |
8 |
0 | 3 6 |
Código de máquina:
00000001011011000100000000100100
A operação AND se enquadra no grupo das operações aritméticas, por isso o opcode 0 e o funct 36, isso porque temos a Unidade Lógica Aritmética, que é a responsável por processar esses tipos de operações.
Conclusão
Pessoal, se houver qualquer tipo de dúvida, por favor, deixem aqui embaixo nos comentário, responderei o mais breve possível.
Exercícios
Aplique a operação lógica MIPS AND entre os seguintes pares de números decimais:
- 324 AND 100
- 2018 AND 1970
- 33 AND 66









Olá! Você pode exemplificar em código. Pois, estou tentando fazer pelo mesmo jeito da soma, tanto no .data como no . text e não está funcionando. Obrigada pela atenção!
Oi Letícia. Não entendi bem sua pergunta. O que gostaria que eu exemplificasse? Os exercícios que passei?
Desculpe a demora para responder!
Oi, gostaria de agradecer pela série sobre o MIPS, tem me ajudado nos estudos.
Entretanto, gostaria que me desse uma luz sobre essa operação, por favor. Entendi como é o seu funcionamento, porém não consegui ver uma aplicação/uso da operação AND. Gostaria de algum exemplo para colaborar com a memorização. Da mesma forma, gostaria de ver uma aplicação de OR.
Muito obrigado!
Oi!!! Enquanto UNIDADE LÓGICA ARITMÉTICA, os microprocessadores de uso geral devem fornecer todas as operações matemáticas básicas. Talvez agora você não veja utilidade alguma, mas as linguagens de programação de alto e médio nível tem essa opção de operadores matemáticos aritméticos, relacionais e lógicas!