Oi pessoal! Tudo bem? Espero que sim. No último artigo publicado desta série eu falei sobre a operação lógica bit a bit OR (OU). Hoje, vou falar sobre a operação lógica NOT (NÃO).
NOT
A operação lógica NOT é uma operação bit a bit com um operando, diferente das operações AND e OR que precisam de dois operandos. O efeito desta operação é o de INVERTER os valores binários existentes em cada posição, significando que 0 se torna 1 e 1 se torna 0. É o mesmo comportamento esperado de uma porta lógica NOT que possui a seguinte tabela booleana:
| P | R |
| 0 | 1 |
| 1 | 0 |
Entretanto, não é exatamente esta a operação que o MIPS executa. Para seguir o padrão de dois operandos, esta instrução de INVERSÃO foi projetada para atuar também em cima de dois operandos, por isso, usa-se na verdade a instrução NOR (NOT OR), e não NOT, propriamente dito. A instrução funciona da seguinte forma:
A NOR 0
NOT ( A OR 0 )
NOT (A)
Substituindo A pelo valor binário zero (0):
0 NOR 0
NOT ( 0 OR 0 )
NOT (0)
1
Substituindo A pelo valor binário um (1):
1 NOR 0
NOT ( 1 OR 0 )
NOT (1)
0
Perceberam que o comportamento é igual ao da instrução NOT original? Quando um operando for zero (0) ele se torna um (1), e vice-versa. A sintaxe desta instrução no MIPS é:
NOR 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. Vamos efetuar a operação NOR no número decimal 15.360 que está armazenado no registrador $t3 e o registrador $t5 armazenará apenas zeros.
NOR $t0, $t3, $t5 #$t0 = ~ ( $t3 | $t5 )
O que acontece nesta operação pode ser representado como a tabela abaixo:
|
$t3 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
$t5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
$t3 OR 0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
NOT |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Vamos efetuar a operação NOR no número decimal 3.328 que está armazenado no registrador $t4 e o registrador $t5 armazenará apenas zeros.
NOR $t1, $t4, $t5 #$t0 = ~ ( $t4 | $t5 )
O que acontece nesta operação pode ser representado como a tabela abaixo:
|
$t4 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
$t5 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
$t4 OR 0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
NOT |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
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. Vejamos então como fica a Linguagem de Montagem:
NOR $t0, $t3, $t5
NOR $t1, $t4, $t5
A Linguagem de Máquina:
NOR $8, $11, $13
NOR $9, $12, $13
Representação da Linguagem de Máquina:
|
opcode |
rs |
rt |
rd |
shamt |
funct |
|
0 |
11 |
13 |
8 |
0 |
39 |
|
0 |
12 |
13 |
9 |
0 |
39 |
Código de máquina:
000000 001011 01101 01000 00000 100111
000000 01100 01101 01010 000000 100111
A operação NOR se enquadra no grupo das operações aritméticas, por isso o opcode 0 e o funct 39, isso porque temos a Unidade Lógica Aritmética, que é a responsável por processar esses tipos de operações.
Considerações finais
Pessoal, se houver qualquer tipo de dúvida, por favor, deixem aqui embaixo nos comentários, responderei o mais breve possível.
Exercícios
Aplique a operação lógica MIPS NOR para os seguintes números decimais:
- a) 324
- b) 1970
- c) 66









Como vou resolver NOR com somente um valor ? se é necessário ter 2 valores para calcular o OR.
Oi Marcos, obrigada pelo seu comentário. Eu vou conferir. Tentarei responder e esclarecer todas as dúvidas nos artigos até domingo que vem (17/01/2021), assim como postar as respostas dos exercícios. Mais uma vez obrigada e solicito que aguarde ok. [ ]s