Escolar Documentos
Profissional Documentos
Cultura Documentos
INE5607 – Organização e
Arquitetura de Computadores
Suporte para operações
Linguagem de máquina
Arquitetura do conjunto de instruções
(ISA)
Instruções: “palavras”
Conjunto de instruções: “vocabulário”
ISA da disciplina: MIPS-32
Microprocessor without Interlocked Pipeline
Stages
Hennessy: Stanford
Escolhida pela simplicidade
Suporte para operações
constantes
registradores
operações
3
Suporte para operações
Entendendo...
labels?
registradores
diretivas?
4
Suporte para operações
Pseudoinstruções?
Representadas como instruções mas não são
nativas do processador
Pseudoinstrução → instrução nativa
move $t0,$t1 → add $t0, $zero, $t1
Registradores e variáveis
Número ilimitado* de variáveis em software
Número limitado de registradores
Nem todas variáveis podem estar em registradores
simultaneamente
Necessário alocar registradores para variáveis
Manual: programação em assembly :~
Automática: compilador :D
Registradores MIPS
A: argumentos
T: temporários
S: temporários salvos (variáveis)
Nº Nome Nº Nome Nº Nome Nº Nome
0 $zero 8 $t0 16 $s0 24 $t8
1 $at 9 $t1 17 $s1 25 $t9
2 $v0 10 $t2 18 $s2 26 $k0
3 $v1 11 $t3 19 $s3 27 $k1
4 $a0 12 $t4 20 $s4 28 $gp
5 $a1 13 $t5 21 $s5 29 $sp
6 $a2 14 $t6 22 $s6 30 $fp
7 $a3 15 $t7 23 $s7 31 $ra
INE5607 - Prof. Laércio Lima Pilla 8
Suporte para operandos
Exemplo: f = (g + h) – (i + j)
O que um compilador faria?
$s0=f, $s1=g, $s2=h, $s3=i, $s4=j
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t0, $t1
Assembly MIPS de verdade
Memória
Array unidimensional
Composta de palavras
Palavras armazenam dados
Acessadas pelos endereços
x = A[10] + A[11] -> add $s0, A[10], A[11]?
Endereço Dados
... ...
3 100
2 10
1 101
0 1
Endereço Dados
... ...
12 100
8 10
4 101
0 1
Operandos constantes
Como fica i = i + 1?
Solução 1: memória para constantes
lw $t0, EndConstante1($s1)
add $s3, $s3, $t0
Uma leitura para cada operação com constantes?
Solução 2: constante interna à instrução
addi $s3, $s3, 1
add: a = b + c
add a, b, c
add $s0, $s1, $s2
Tipo R
op rs rt rd shamt funct
addi: a = a + 1
addi a, a, 1
Tipo I
op rs rt constante/endereço
sub: a = b - c
sub a, b, c
sub $s0, $s1, $s2
Tipo R
subi: a = a - 1
Não existe
addi: constante em complemento de 2
addi $s0, $s0, -1
-1 = 0b1111 1111 1111 1111, 0xFFFF
Exercício 1
Traduzam o seguinte código para
linguagem de montagem MIPS
x = ((x+300) – y) + z + 27 + x
x = $s0, y = $s1, z = $s2
sll: a = b << 5
sll a, b, 5
sll $s0, $s1, 5
and: a=a&b A B S
0 0 0
and $s0, $s0, $s1 0 1 0
or: a=a|b A B S
0 0 0
or $s0, $s0, $s1 0 1 1
ori: a = a | 0x000F 1 0 1
1 1 1
ori $s0, $s0, 15
O que acontece com os bits mais
significativos?
A S
not: a = ~a 0 1
not $s0, $s0 1 0
Não existe.
Forma correta: nor A B S
Exercício 2
Traduzam o seguinte código para
linguagem de montagem MIPS
s = (a & b) | (!a & c)
Load Immediate: a = 5
Li $s0, 5
Carrega valor constante de 32 bits
Pseudoinstrução!
Como implementar?
Desvios condicionais
beq: branch on equal
beq $s0, $s1, Igual
Se $s0 == $s1, desvie para o endereço do label Igual
bne: branch on not equal
bne $s0, $s1, Diferente
Se $s0 != $s1, desvie para o endereço do label Diferente
31
Desvios
Desvios incondicionais
j: jump
j Fim
Desvie para o endereço do label Fim
32
Desvios
Desvios incondicionais
jal: jump and link
Salve o endereço atual em $ra e desvie
Suporte para chamadas de
procedimentos
Tipo J
jr: jump register
Desvie para o endereço no registrador X
Suporte para o retorno de procedimentos
Tipo R
33
If-then-else
f=g+h f=g-h
34
If-then-else
Programa monolítico em fluxograma
else: then:
f=g-h f=g+h
then: else:
f=g+h f=g-h
exit: exit:
35
If-then-else
36
If-then-else
i==j i!=j
i == j?
bne $s3, $s4, else
add $s0, $s1, $s2 then:
j exit
f=g+h
else: sub $s0, $s1, $s2
exit: ...
else:
f=g-h
exit:
37
Comparadores
38
Comparadores
Comparação entre duas variáveis
slt $t0, $s3, $s4
$t0 = 1 se $s3 < $s4
$t0 = 0 caso contrário
Comparação entre variável e
constante
slti $t0, $s2, 10
$t0 = 1 se $s2 < 10
$t0 = 0 caso contrário
39
Comparadores
Exemplo em alto nível
if (a < b) c = a; else c = b;
a=$s1, b=$s2, c=$s0
40
Switch
if(mPV == -1) mPR = 10;
Instrução Case/Switch else if(mPV == 1) mPR = 20;
switch (minhaPrimeiraVariavel){ else mPR = 30;
case -1:
minhaPrimeiraResposta = 10;
break;
case 1:
minhaPrimeiraResposta = 20;
break;
default:
minhaPrimeiraResposta = 30;
}
41
Desvios
sim
não
i++
exit:
loop: i<
vetor.size()
sim
não
i++ op
exit:
INE5607 - Prof. Laércio Lima Pilla 49
For
início
loop: preparação teste
teste com salto condicional para
saída
operação
itera
salto incondicional para loop
saída: ...
INE5607 - Prof. Laércio Lima Pilla 50
REPEAT
loop:
op
• repeat...until, do...while, etc.
• do {valor = valor/2; i++} sim
loop: operação
preparação teste
teste com salto condicional para
loop
loop: loop:
teste op
sim sim
não
op teste
não
exit: