Você está na página 1de 20

GSI013 – Arq. e Org.

de Computadores

Instruções Lógicas e Aritméticas

Arquitetura e Organização de
Computadores

Universidade Federal de Uberlândia


Faculdade de Computação
Prof. Dr. rer. nat. Daniel D. Abdala
Na Aula Anterior ...

2
Nesta Aula
• Instruções aritméticas;
• Overflow e underflow;
• Variantes da operação ADD;
• Instruções lógicas;
• Comentários em assembly;
• MARS e a estrutura de um programa em
assembly;

3
Instruções Aritméticas Fundamentais

OP Descrição Exemplo
add Adição com overflow add $rd,$rs,$rt
sub Subtração com overflow sub $rd,$rs,$rt
mul Multiplicação (hi ← 32bitsMSB | lo ← 32bitsLSB ) mul $rd,$rs,$rt
mult Multiplicação (hi ← 32bitsMSB | lo ← 32bitsLSB ) mult $rs,$rt
div Divisão (LO ← quociente | HI ← resto) div $rs,$rt
addi Adição com overflow – segundo operando constante addi $rt,$rs,cte

OP Descrição Exemplo
mflo Move o dado contido no registrador LO mflo $rs
mfhi Move o dado contido no registrador HI mfhi $rs

4
Exemplo
⁞ a → $s0
long a,b,c,d = 42; b → $s1
d = (a+b) – (a+c); c → $s2
⁞ d → $s3

add $t0, $s0, $s1


add $t1, $s0, $s2
sub $s3, $t0, $t1

5
Exemplo
a → $s0
⁞ b → $s1
long a,b,c,d,e,f = 42; c → $s2
a = ((b*c) / (d*e)) – ((e+f)*(e-f)) d → $s3
⁞ e → $s4
f → $s5

mul $t0, $s1, $s2 mul $t0, $s1, $s2


mul $t1, $s3, $s4 mul $t1, $s3, $s4
add $t2, $s4, $s5 div $t0, $t1
sub $t3, $s4, $s5 mflo $t0
div $t0, $t1 add $t1, $s4, $s5
mflo $t4 sub $t2, $s4, $s5
mul $t5, $t2, $t3 mul $t1, $t1, $t2
sub $s0, $t4, $t5 sub $s0, $t0, $t1

6
Outros usos para o ADD/ADDI
• Inicializar o valor de um registrador;
– addi $s0,$zero,42
• Zerar um registrador
– add $s0,$zero,$zero
– addi $s0,$zero,$zero
• Mover dados de um registrador para outro;
– add $s0,$zero,$s1
• Incremento;
– addi $s0,$s0,1
• Decremento;
– addi $s0,$s0,-1

7
A família do ADD
OP Descrição Exemplo
add Adição com overflow add $rd,$rs,$rt
addi Adição com overflow – segundo operando constante addi $rt,$rs,cte
addu Adição sem overflow de números não sinalizados addu $rd,$rs,$rt
Adição sem overflow de números não sinalizados –
addiu addiu $rt,$rs,cte
segundo operando constante

• Qual a diferença entre “com overflow” e “sem


overflow”?
– Problema com a nomenclatura
– Simplesmente significa que o sinal de overflow, quando
ocorrer não lançará uma exceção.

8
Decimal Comp. 2

Complemento de 2
7 0111
6 0110
5 0101

• O complemento de 2 é calculado 4 0100


3 0011
pela inversão de cada um dos bits do
2 0010
número. Subsequentemente soma- 1 0001
se 1 ao valor dos bits invertidos; 0 0000
-1 1111
0010 +210 -2 1110
-3 1101
1101
+ -4 1100
0001 -5 1011
-6 1010
1110 -210 -7 1001
-8 1000
9
Overflow
• Qual a diferença entre uma instrução com e
sem overflow?

0 1111111 12710
+
0 0000001 00110
1 0000000 -00110

10
Underflow
• Qual a diferença entre uma instrução com e
sem overflow?
1 0000000 - 12810 0 0000001
-
0 0000001 -00110
1 1111110
+
0 0000001
1 0000000 - 12810 1 1111111
+
1 1111111 - 00110
0 1111111 + 12710
11
Multiplicação de Números Binários

1001 910
x
1010 1010
0000
1001 caso resp
0000 0x0 0

1001 0x1 0
1x0 0
1011010 9010 1x1 1

Prof. Dr. rer. nat . Daniel Duarte Abdala 12


Multiplicação de Palavras

0 0 0 0 1 0 0 1 910
x 0 0 0 0 1 0 1 0 1010
a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 9010
Prof. Dr. rer. nat . Daniel Duarte Abdala 13
Somas com deslocamento para a Esquerda

a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0

i ‘0’a+b’0’ 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1810
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

j ‘0’i+c’0’ 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1810
d 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0

k ‘0’j+d’0’ 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 9010

Prof. Dr. rer. nat . Daniel Duarte Abdala 14


Considerações acerca do MULT
• A multiplicação de dois números de 32 bits pode
gerar potencialmente um número de 64 bits
significativos;
• Todos os registradores possuem 32 bits;
• Utilizamos dois registradores especiais para
armazenar o resultado de 32 bits de uma
multiplicação;
• Dois registradores especiais:
– HI → 32 bits mais significativos da palavra;
– LO → 32 bits menos significativos da palavra.

15
Exemplo

a → $s0
long a,b,c = 42;
b → $s1
c = a*b;
c → $s2

mult $s0,$s1 mul $s2,$s0,$s1


mflo $s2

16
Signed vs Unsigned
• Quais as implicações de uma instrução ser
unsigned (não sinalizada)?
– Apenas números positivos;
– Dobro da quantidade representável em comparação a
números sinalizados;
a → $s0
– Dimensionamento de variáveis. b → $s1
c → $s2
⁞ addu $t0, $s0, $s1 d → $s3
unsigned long a,b,c,d = 42; addu $t1, $s0, $s2
d = (a+b) – (a+c); subu $s3, $t0, $t1

17
Instruções Lógicas
OP Descrição Exemplo
and E bit a bit and $rd,$rs,$rt
or OU bit a bit or $rd,$rs,$rt
nor NÃO OU bit a bit nor $rd,$rs,$rt
xor OU EXCLUSIVO bit a bit xor $rd,$rs,$rt
andi E bit a bit – segundo operando cte andi $rt,$rs,cte
ori OU bit a bit – segundo operando cte ori $rt,$rs,cte
nori NÃO OU bit a bit – segundo operando cte nori $rt,$rs,cte
xori OU EXCLUSIVO bit a bit – segundo operando cte xori $rt,$rs,cte
ssl Deslocamento para a esquerda (multiplicação base 2) ssl $rt,$rs,[0:31]
slr Deslocamento para a direita (divisão base 2) slr $rt,$rs,[0:31]
sslv Deslocamento para a esquerda (multiplicação base 2) sslv $rd,$rs,$rt
slrv Deslocamento para a direita (divisão base 2) slrv $rd,$rs,$rt

18
Exemplo
• Testar se um número é par ou impar
addi $s0,$zero, 43 #coloca em s0 o num. a ser testado
addi $s1,$zero, 1 #máscara todos os bits 0 exceto o lsb
and $t0,$s0,$s1 #zera todos os bits exceto o lsb

#se t0 for igual a 0 o número é par, se for igual a 1 é impar

• Operações lógicas também são utilizadas em


diversos outros contextos:
– Testes lógicos;
– Computação gráfica;
– Parsing de arquivos binários;
– etc.
19
Multiplicação e Divisão via Deslocamento
(Base 2)
0 0000011 310
• ssl $s0, 1
0 0000110 610
• Deslocar um número para a esquerda equivale
a multiplica-lo por uma potência de 2;
• Deslocar um número para a direita equivale a
dividi-lo por uma potência de 2

20

Você também pode gostar