Buscar

Linguagem de Máquina e Procedimentos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 22 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
Organização de Computadores I
DCC006
Prof. Omar Paranaiba Vilela Neto
Aula 4 – Linguagem de Máquina 
(Instruções) - Continuação
2
Procedimento ou Função
 Procedimentos: Conjunto de instruções 
com função definida
 Realizam uma série de operações como
base em valores de parâmetros
 Podem retornar valores computados
3
Procedimento ou Função
 Motivos para o uso de procedimentos:
 Tornar o programa mais fácil de ser entendido
 Permitir a reutilização do código do procedimento
 Permitir que o programador se concentre em uma parte do 
código (os parâmetros funcionam como barreira)
4
Procedimento ou Função
Etapas para execução de um procedimento
1 - Colocar parâmetros em um lugar onde o procedimento pode acessar;
2 - Transferir o controle para o procedimento
3 - Adquirir os recursos de armazenamento necessários para o procedimento
4 - Realizar a tarefa desejada
5 - Colocar o valor de retorno em um local onde o programa que chamou o 
procedimento possa acessá-lo
6 - Retornar o controle para o ponto de origem. Um procedimento pode ser chamado 
por vários pontos em um programa. 
5
Procedimento ou Função
Registradores de procedimento
 $a0-$a3: registradores de argumento – passa os parâmetros;
 $v0-$v1: registradores de valor – valores de retorno;
 $ra: registrador de endereço de retorno – retorna ao ponto de origem;
 PC: contador de programa – guarda o endereço da instrução executada.
Instruções de procedimento
 jal EndereçoProcedimento
 Pula para o procedimento e coloca o endereço de retorno em $ra
 $ra = PC + 4
 jr $ra
 Volta para endereço armazenado em $ra
6
Procedimento ou Função
Procedimento
$a0
$a1
$a2
$a3
$v0
$v1
$4
$5
$6
$7
$2
$3
7
Procedimento ou Função
O que fazer se um procedimento precisar de mais 
registradores?
Algumas opções:
 $t0-$t9: registradores temporários não preservados;
 $s0-$s7: registradores salvos que precisam ser preservados.
Onde preservar os resgistradores salvos?
Em uma pilha na memória
 
 $sp: stack pointer – apontador de pilha.
8
Pilha
$sp
Registrador usado para guardar o endereço do 
topo da pilha da chamada de procedimentos
Indica:
a posição de memória que contêm os valores 
dos registradores salvos na memória pela 
última chamada
a posição a partir da qual a próxima chamada 
de procedimento pode salvar seus 
registradores
A pilha cresce do endereço mais alto 
para o mais baixo
9
Pilha
Para todo programa, o sistema 
operacional aloca três segmentos de 
memória:
Segmento de texto: armazena 
o código de máquina Código
Pilha
Dados
Memória Principal
Segmento de pilha: local onde são 
passados parâmetros, alocado espaço 
para variáveis locais e armazenados 
endereços de retorno para chamadas de 
funções aninhadas/recursivas
Segmento de dados: alocado 
para constantes e variáveis 
globais
10
Procedimento ou Função
Exemplo
int folha (int g, int h, int i, int j)
{
int f;
f = (g+h) – (i+j);
return f
}
folha: addi $sp, $sp, -12
sw $t1, 8($sp)
sw $t0, 4($sp)
sw $s0, 0($sp)
add $t0, $a0, $a1
add $t1, $a2, $a3
sub $s0, $t0, $t1
add $v0, $s0, $zero
lw $s0, 0($sp)
lw $t0, 4($sp)
lw $t1, 8($sp)
addi $sp, $sp, 12
jr $ra
11
Procedimento ou Função
Situação da pilha
12
Exemplo – Chama de procedimento – Recursivo
int fact (int n)
{
if (n < 1) return (1);
else return (n * fact(n-1));
}
fact: addi $sp, $sp, -8
sw $ra, 4($sp)
sw $a0, 0($sp)
slti $t0, $a0, 1
beq $t0, $zero, L1
addi $v0, $zero, 1
addi $sp, $sp, 8
jr $ra
L1: addi $a0, $ao, -1
jal fact
lw $a0, 0($sp)
lw $ra, 4($sp)
addi $sp, $sp, 8
Mul $v0, $a0, $v0
jr $ra
Procedimento ou Função
13
Byte Halfword Word
Registers
Memory
Memory
Word
Memory
Word
Register
Register
1. Immediate addressing
2. Register addressing
3. Base addressing
4. PC-relative addressing
5. Pseudodirect addressing
op rs rt
op rs rt
op rs rt
op
op
rs rt
Address
Address
Address
rd . . . funct
Immediate
PC
PC
+
+
Endereçamento:
addi
add
lw
bne
j
14
clear1 (int array[], int size)
{
int i;
for (i=0; i < size; i +=1);
array[i] = 0;
}
 add $t0, $zero, $zero
loop: sll $t1, $t0, 2
 add $t2, $a0, $t1
sw $zero, 0($t2)
addi $t0, $t0, 1
slt $t3, $t0, $a1
 bne $t3, $zero, loop
Programa usando Arrays
15
clear2 (int *array, int size)
{
 int *p;
 for (p = &array[0]; p <
 &array[size]; p = p + 1);
 *p = 0;
}
Programa usando Ponteiros
 add $t0, $a0, $zero
 sll $t1, $a1, 2
 add $t2, $a0, $t1
loop: sw $zero, 0($t0)
addi $t0, $t0, 4
slt $t3, $t0, $t2
 bne $t3, $zero, loop
16
Array versus Ponteiros
 add $t0, $a0, $zero
 sll $t1, $a1, 2
 add $t2, $a0, $t1
loop: sw $zero, 0($t0)
addi $t0, $t0, 4
slt $t3, $t0, $t2
 bne $t3, $zero, loop
 add $t0, $zero, $zero
loop: sll $t1, $t0, 2
 add $t2, $a0, $t1
sw $zero, 0($t2)
addi $t0, $t0, 1
slt $t3, $t0, $a1
 bne $t3, $zero, loop
Array Ponteiro
17
Como um programa é criado
18
• Alternativas de projeto:
– prover operações mais potentes
– objetivo é reduzir o número de instruções executadas
– o perigo é um tempo de ciclo lento e/ou um maior CPI
• As vezes referido como “RISC X CISC”
– todos novos conjuntos de instrução depois de 1982 são RISC
– VAX: minimiza tamanho do código e assembly fácil
instruções tem de 1 a 54 bytes de tamanho!
• PowerPC e 80x86
Alternativas de Arquiteturas
19
PowerPC
• Endereçamento Indexado 
– exemplo: lw $t1,$a0+$s3 #$t1=Memória[$a0+$s3]
– Como fazer no MIPS? 
• Atualização no endereçamento
– atualiza um registrador como parte do load (para matrizes)
– exemplo: lwu $t0,4($s3) #$t0=Memória[$s3+4];
$s3=$s3+4
– Como fazer no MIPS?
• Outras:
– load múltiplo/store múltiplo
– um contador especial “bc Loop” 
 decrementa contador, if não 0 goto loop
20
80x86
• 1978: Intel 8086 é anunciado (arquitetura 16 bit)
• 1980: 8087 coprocessador ponto flutuante é incluído
• 1982: 80286 melhora espaço de endereçamento 24 bits, +instruções
• 1985: 80386 estende para 32 bits, novos modos de endereçamento
• 1989-1995: 80486, Pentium, Pentium Pro add a few instructions
(mostly designed for higher performance)
• 1997: MMX aparece
• 1999: Pentium III
• 2001: Pentium 4
• 2003: AMD64
• 2004: Intel estende o AMD64 (EM64T)
“Esta história ilustra o impacto da manutenção da compatibilidade”
“Um arquitetura que é difícil explicar e impossível amar” 
21
Uma arquitetura dominante: 80x86
• Complexidade:
– Instruções de 1 a 17 bytes de comprimento
– um operando atua como fonte e destino
– um operando pode vir da memória
– modos complexos de endereçamento
i.e., “base ou escalar indexado com 8 ou 32 bit deslocamento”
• Integração:
– As instruções mais freqüentemente usadas não são difíceis 
integrar
22
• Complexidade da instrução é apenas uma variável
– Baixa contagem de inst. vs. alta CPI / ciclo de clock
• Princípios de Projeto:
– Simplicidade favorece regularidade
– Menor é mais rápido
– Bom projeto demanda compromisso
– Faça primeiro o caso comum (mais rápido)
• Arquitetura de conjunto de instruções
– Sem sombra de dúvida é uma abstração muito importante
Resumo
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22

Continue navegando