Conjunto de instruções Instruções Instruções em diferentes

Propaganda
16/8/2010
Conjunto de instruções
Arquitetura de Computadores
Representam todas as instruções que são
entendidas pela UCP
◦ Limite entre o projetista e o programador de
computadores
◦ Linguagem de máquina → binário
(muito
complexo e pouco produtivo
◦ Linguagem de montagem (assembly): necessário
conhecimento sobre os registradores da UCP,
estrutura de memória, tipos de dados disponíveis
diretamente no computador e funcionamento da
ULA
Conjuntos de Instruções: características e funções
Prof. Marcos Quinet
Universidade Federal Fluminense – P.U.R.O.
2
Conjunto de Instruções do
Processador
Instruções em diferentes níveis
O conjunto de instruções é um dos pontos
centrais na arquitetura de um processador.
Vários aspectos na definição e implementação
da arquitetura são influenciados pelas
características do conjunto de instruções
Programa
em linguagem
de alto nível (C)
swap (int v[], int k)
{ int temp;
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}
Compilador C
O conjunto de instruções utilizadas afeta não
somente
o
projeto
da
seção
de
processamento: a estrutura e complexidade da
unidade
de
controle
é
determinada
diretamente pelas características do conjunto
de instruções
swap:
Programa
muli $2,$5,4
em linguagem
add $2,$4,$2
de montagem (MIPS) lw $15,0($2)
lw
sw
sw
jr
3
Montador
Programa
em linguagem
de máquina
0001011101110110
1100011001010101
0000000111110101
0011001100110011
1100011110001110
1110001111000000
1010101010101010
$16, 4($2)
$16,0($2)
$15,4($2)
$31
4
1
16/8/2010
Linguagens de programação:
programação:
Hierarquia
Linguagem de Montagem
Em geral, os programas são desenvolvidos em
uma linguagem de alto nível, com Pascal, C, ou
Java. O compilador traduz o programa de alto
nível em uma seqüência de instruções de
processador
Desta tradução resulta o programa em
linguagem de montagem (assembly language).
A linguagem de montagem é uma forma de
representar
textualmente
as
instruções
oferecidas pela arquitetura, cada uma com uma
linguagem de montagem em particular
Surgimento da Linguagem de alto nível
◦ objetivo: tornar a comunicação com o computador mais
simples e com menos instruções do que a linguagem de
montagem
◦ mais distante da máquina
◦ o programador não precisa se preocupar com o tipo de
CPU ou de memória onde o programa será executado
◦ Exs.: Fortran, Pascal, C
◦ necessidade de uma conversão para instruções de
máquina
PROCESSO DE COMPILAÇÃO
5
Linguagem de Montagem
6
Modulação de Programas
O programa em linguagem de montagem é
convertido para um programa em código objeto
pelo montador (assembler). O montador traduz
diretamente uma instrução da forma textual
para a forma de código binário. É sob a forma
binária que a instrução é carregada na
memória e interpretada pelo processador
7
Programas complexos são normalmente
estruturados em módulos. Cada módulo é
compilado separadamente e submetido ao
montador, gerando diversos módulos em
código objeto. Estes módulos são reunidos
pelo ligador (linker), resultando finalmente no
programa executável que é carregado na
memória
8
2
16/8/2010
Processo de Compilação e
Execução
Compilando para assembly
Código em C
int sum(int x, int y)
{
int t = x+y;
return t;
}
Assembly gerado
Programa em C
_sum:
pushl %ebp
movl %esp,%ebp
movl 12(%ebp),%eax
addl 8(%ebp),%eax
movl %ebp,%esp
popl %ebp
ret
Programa em
linguagem
de montagem
Módulo em
linguagem de
máquina
Obtido com o comando
gcc -O -S code.c
Produz arquivo code.s
Compilador
Montador
Bibliotecas
Ligador
Executável
Carregador
Memória
9
Ligadores e Carregadores
Ligadores e Carregadores
Código objeto não é suficiente para ser
executado
Tarefas a serem executadas
◦
◦
◦
◦
10
Resolução de referências simbólicas (ligação)
Ajuste de endereços (relocação)
Alocação de espaço em memória (alocação)
Colocação das instruções e dados fisicamente
na memória (carga)
11
Código Objeto
◦ Absoluto: os endereços constantes do código
são endereços reais de memória
◦ Relocável: os endereços são relativos ao início
do programa, transformando-se em endereços
reais apenas na execução
mais flexível e mais utilizado!
12
3
16/8/2010
Ligador
Ligador
Rotinas comuns são agrupadas em bibliotecas
Ligador resolve as referências externas
◦ Agrega o código objeto das bibliotecas a serem
utilizadas, criando um único módulo de carga
◦ Substitui chamadas a procedimentos por seus
endereços
Gera código executável (ou módulo de carga)
DLL (Dynamic Link Library)
◦ Os procedimentos só são ligados em tempo de
execução
Ligador Dinâmico
Relocação
União dos espaços de endereçamento de
cada módulo objeto
13
14
Execução de um programa
Elementos de uma instrução
Código em C para programa hello.c
Código de operação (Op code): instrução a ser
efetuada
Referência a operando fonte: um ou mais
operandos que constituem a entrada de dados
Referência a operando de destino: onde o
resultado produzido será armazenado
Endereço da próxima instrução: onde buscar a
próxima instrução ao terminar a atual (apenas
quando a próxima instrução não seguir
imediatamente a instrução atual)
#include <stdio.h>
int main()
{
printf("hello, world\n")
}
printf.o
hello.c
hello
Préprocessador
Compilador
hello.i
Programa
fonte
(texto)
Programa
fonte
modificdo
(texto)
Montador
hello.s
Programa
assembly
(texto)
Ligador
hello.o
Programa
em objetos
realocáveis
(binário)
Programa
objeto
executável
(binário)
15
16
4
16/8/2010
Representação de instruções
Representação Simbólica
Internamente, uma instrução é representada por uma
sequência de bits, dividida em campos, cujos tamanhos
variam, dependendo do elemento (operando, operador)
que está representando
Na maioria dos conjuntos de instruções é usado mais de
um formato de instrução
Durante a execução, uma instrução é lida em um
registrador de instruções da UCP
No programa em linguagem de montagem, as
instruções são representadas através de
“abreviações”, chamadas de mnemônicos, que
associam o nome da instrução à sua função,
como por exemplo:
Exemplo de formato de instrução do IAS (16 bits):
4 bits
6 bits
6 bits
cod. de operação
referência a operando
referência a operando
ADD
Soma
SUB
Subtração
MPY
Multiplicação
DIV
Divisão
LOAD
Carregar dados da memória
STOR
Armazenar dados na memória
17
Número de Endereços
18
Número de Endereços
Uma das maneiras mais tradicionais de
descrever uma arquitetura é em termos do
número de endereços contidos em cada
instrução
Por outro lado, pode-se observar que o uso de
instruções com menos endereços resultam em
uma maior quantidade de instruções necessárias
para realizar uma operação
Os formatos mais encontrados são com
uso de um, dois ou três endereços de
instrução. O uso de instruções com muitos
endereços (até mesmo três) não é muito
comum, porque resultam em instruções
relativamente grandes, devido ao espaço
necessário para manter os três endereços
A seguir são apresentados os conjuntos de
instruções necessárias para computar a operação
Y = (A – B) / (C + D x E) através de instruções com
um, dois e três endereços
19
20
5
16/8/2010
Exemplo
Número de Endereços
Instruções com 3 endereços: não são muito
usadas, devido ao espaço necessário para
manter os três endereços (relativamente
grandes)
Instruções com 2 endereços: um dos
endereços referencia tanto um operando quanto
o resultado
Instruções com 1 endereço: mais simples, com
uso de um segundo endereço implícito
(normalmente o acumulador, registrador da CPU)
Instruções com 0 endereços: uso de uma pilha
Instruções com três endereços
SUB
Y, A, B
Y←A–B
MPY
T, D, E
T←DxE
ADD
T, T, C
T←T+C
DIV
Y, Y, T
Y←Y/T
Instruções com um endereço
LOAD
D
MPY
E
AC ←D
AC ← AC x E
ADD
C
AC ← AC + C
Y ← AC
STOR
Y
MOVE
Y, A
Y←A
LOAD
A
AC ← A
SUB
Y, B
Y←Y–B
SUB
B
AC ← AC – B
Instruções com dois endereços
MOVE
T, D
T←D
DIV
Y
AC ← AC / Y
MPY
T, E
T←TxE
STOR
Y
Y ← AC
ADD
T, C
T←T+C
DIV
Y, T
Y←Y/T
21
Número de Endereços
Número de Endereços
Exemplo para zero endereços:
◦
◦
◦
◦
22
push a
push b
Add
pop c
◦ c=a+b
23
Constitui uma importante decisão de projeto
Poucos endereços por instrução resultam em
instruções menores e mais primitivas (requer
CPU menos complexa)
Porém, há um maior número de instruções, o
que resulta em maior tempo de execução
Ainda, instruções com múltiplos endereços
podem usar múltiplos registradores de
propósito geral
Como as referências a registradores são mais
rápidas do que referências a memória, a
execução torna-se mais rápida
24
6
16/8/2010
Número de Endereços
Projeto do Conjunto de Instruções
Maioria dos computadores modernos utiliza
instruções de 2 ou 3 endereços
Ainda são considerados os seguintes
aspectos:
Aspecto mais importante do projeto de um
computador, pois afeta diversos aspectos do
sistema
Define muitas das funções desempenhadas (e,
portanto, a serem implementadas) da CPU
Constitui o meio pelo qual o programador pode
controlar a CPU
Características a serem definidas pelo projeto:
◦ Número de registradores menor que o número
de posições de memória: menor número de bits
necessários para endereçar um registrador
◦ Um mesmo sistema pode utilizar mais de um
modo de endereçamento (uso de bits para
especificar o modo)
◦ Repertório de operações: quantas e quais
operações serão fornecidas e quão complexas
◦ Tipos de dados
25
26
Tipos de Operandos
Projeto do Conjunto de Instruções
Endereços (discutidos com mais detalhes no
capítulo seguinte)
Números
◦ Formato de instrução: tamanho (em bits),
número de endereços por instrução, tamanho
dos campos, etc.
◦ Registradores: quantidade e propósito
◦ Endereçamento: modo (ou modos) que um
endereço de operando pode ser especificado
◦ Limite para a magnitude
◦ Ponto flutuante: limite para a precisão
◦ Representação decimal: empacotados em
unidades de 4 bits (BCD – Binary coded decimal)
Ineficiente por usar apenas 10 dos 16 valores
possíveis
Evita o custo da conversão entre bases
Tamanhos múltiplos de 8; 4 bits para
representação de sinal
27
28
7
16/8/2010
Tipos de Operandos
Tipos de Operandos
Caracteres
◦ Utilização do padrão ASCII (American Standard
code for Information Interchange)
◦ Representação de cada caracter por um padrão
distinto de 7 bits; o oitavo bit pode ser usado para
controle de paridade; compatível com o BCD
◦ EBCDIC (Extended Binary Coded Decimal
Interchange Code): 8 bits, usado nos IBM S/370,
sendo compatível com a representação BCD
Dados lógicos
◦ Certas situações tornam mais conveniente
considerar uma unidade de n bits como
composta de n itens de dados, de 1 bit cada (0
ou 1)
◦ Economia de memória ao armazenar vetores de
dados booleanos
◦ Permite a manipulação de bits de um item de
dado (exs.: conversão de ASCII para decimal
empacotada; operações de ponto flutuante por
software)
29
Tipos de Operações
30
Tipos de Operações
Transferência de dados
◦ Tipo mais fundamental de instrução de máquina.
Deve especificar:
Endereços dos operandos fonte e de destino da
operação (podem ser posição de memória,
registrador ou topo da pilha)
O tamanho dos dados a serem transferidos
O modo de endereçamento de cada operando
◦ Podem
haver variações, dependendo da
quantidade de dados a serem movidos e as
possíveis origens e destinos (registradores e
memória) → diferentes mnemônicos
31
Exemplos:
◦ Move: transfere uma palavra ou bloco da fonte
para o destino
◦ Store: transfere uma palavra do processador
para a memória
◦ Load: transfere uma palavra da memória para o
processador
◦ Push: transfere uma palavra da fonte para o
topo da pilha
◦ Pop: transfere uma palavra do topo da pilha para
o destino
32
8
16/8/2010
Tipos de Operações
Tipos de Operações
Aritméticas
◦ Operações básicas para soma, subtração,
multiplicação e divisão para números inteiros
com sinal (ponto fixa), podendo ser oferecidas
para BCD e ponto flutuante
◦ É possível a implementação de instruções com
um operando, por exemplo:
Negar o operando;
Incrementar o operando de 1;
Decrementar o operando de 1;
Tomar o valor absoluto do operando.
Lógicas
◦ Permitem a manipulação de bits individuais de
uma palavra ou qualquer unidade endereçável
◦ Operações lógicas básicas: NOT, AND, OR, XOR
e EQUAL
◦ Possibilitam o deslocamento lógico e rotação
(deslocamento cíclico)
◦ Exemplo: transmissão de caracteres para um
dispositivo de E/S, um caracter por vez, com a
palavra de memória de 16 bits, contendo 2
caracteres → desempacotamento antes do envio
33
Tipos de Operações
34
Tipos de Operações
◦ Carregue a palavra em um registrador;
◦ Execute um AND com o conteúdo do registrador e
a máscara 1111111100000000;
◦ Desloque o conteúdo do registrador para a direita,
8 posições de bit, para deslocar o caracter para a
metade direita do registrador;
◦ Efetue a E/S, que lerá os 8 bits de ordem inferior
do barramento de dados;
◦ Carregue a palavra de novo no registrador;
◦ Execute um AND com o conteúdo do registrador e
a máscara 0000000011111111;
◦ Efetue a E/S.
Conversão
◦ Mudam ou operam sobre o formato de dados
◦ Translate: traduz valores armazenados em uma
seção de memória, com base em uma tabela de
correspondência
◦ Convert: converte o conteúdo de uma palavra
de uma representação para outra (por exemplo,
BCD para binário)
35
36
9
16/8/2010
Tipos de Operações
Tipos de Operações
Entrada e Saída
◦ Controle de E/S, incluindo uma variedade de
abordagens (E/S programada, E/S mapeada na
memória, DMA e uso de processadores de E/S)
◦ Exemplos:
Read (input): transfere dados da E/S
especificado para o destino
Write (output): transfere dados da fonte
especificada para uma porta ou dispositivo de
E/S
Controle de Sistema
◦ Executadas tipicamente pelo S.O.
◦ Podem ser executadas somente em estado
privilegiado ou executando programas
carregados em áreas de memória privilegiadas
37
Tipos de Operações
38
Tipos de Operações
Transferência de Controle
◦ Altera a sequência de execução de instruções
◦ A CPU atualiza o PC com o endereço de alguma
outra instrução armazenada na memória
◦ Essenciais na execução de instruções:
Repetição de instruções;
Tomadas de decisão;
Divisão de um programa de maior porte em
partes menores, desenvolvidas
separadamente.
Desvio
◦ Tem como um dos operandos o endereço da
próxima instrução a ser executada
◦ Normalmente é um desvio condicional
◦ Utiliza um código de condição de 1 ou mais bits,
em um registrador visível ao usuário
◦ Por exemplo, a operação de soma com código
de condição de 2 bits → mapeia condições para
resultados 0, positivo, negativo e overflow
39
40
10
16/8/2010
Tipos de Operações
Tipos de Operações
BRP X: desvia para a instr. de end. X se
resultado for positivo
BRN X: desvia para a instr. de end. X se
resultado for negativo
BRZ X: desvia para a instr. de end. X se resultado
for zero
BRO X: desvia para a instr. de end. X se
resultado for overflow
Salto
◦ Também utilizada para transferência de controle
◦ Utilizam um endereço de desvio implícito
◦ Indica a omissão da execução de uma instrução da
sequência; o endereço da próxima instrução é obtido
somando o endereço da instrução corrente com o
tamanho de uma instrução
◦ Exemplos:
ISZ (x): incrementar o valor valor contido em um
registrador e saltar caso o resultado seja igual a zero;
JZ: salte se ACC for zero;
JNZ: salte se ACC for diferente de zero.
◦ Formato com 3 endereços: uma operação de
comparação e um desvio
BRE R1, R2, X: desvia para a inst. de end. X se
R1 = R2
41
Tipos de Operações
42
Tipos de Operação
Chamada de Procedimento
◦ Uso de subprogramas autocontidos, assim como
nas linguagens de alto nível
◦ Composto de duas instruções básicas: uma
chamada, que desvia da instrução corrente para
o início do procedimento e um retorno para o
endereço que ocorreu a chamada
◦ Caracteriza-se como sendo uma instrução de
desvio
◦ Como um procedimento pode ser chamado várias
vezes em diversos pontos de um mesmo
programa, é necessário salvar o endereço de
retorno para que possa ser feito adequadamente
43
O endereço de retorno pode ser salvo em:
◦ Um registrador;
◦ No início da área de memória do procedimento;
◦ No topo de uma pilha.
44
11
16/8/2010
Representação e Referência de
bytes e bits
Representação e Referência de
bytes e bits
Conceito da disposição dos bytes (endianness) de
valores escalares compostos por múltiplos bytes
◦ Big-endian: o byte mais significativo é armazenado no
menor endereço de byte
◦ Little-endian: o byte menos significativo é armazenado
no menor endereço de byte
Arquiteturas diferentes podem usar
representações diferentes, o que gera
problemas na transferência de dados e na
manipulação de bytes ou bits individuais
Qual a disposição mais vantajosa?
◦ Pentium (80x86), VAX, Alpha: little endian
◦ IBM 370, Sun SPARC, Risc: big endian
Ex: armazenamento do hexa 12345678 (palavra de 32 bits)
Endereço
Valor
Endereço
Valor
184
12
184
78
185
34
185
56
186
56
186
34
187
78
187
12
45
PowerPC: bi-endian, utiliza ambas as
disposições de bytes
46
Representação e Referência de
bytes e bits
Disposição de bits dentro de um byte:
◦ Bits são numerados a partir de zero ou a partir
de um?
◦ O bit de menor ordem é o menos (little-endian)
ou o mais significativo (big-endian) do byte?
Varia de máquina para máquina e até entre
diferentes circunstâncias
Questões a serem consideradas pelo
programador que manipula bits individuais
47
12
Download