Escolar Documentos
Profissional Documentos
Cultura Documentos
de Computadores
Arquitetura e Organização de
Computadores
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
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
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
8
Decimal Comp. 2
Complemento de 2
7 0111
6 0110
5 0101
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
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
15
Exemplo
⁞
a → $s0
long a,b,c = 42;
b → $s1
c = a*b;
c → $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
20