Arquitectura de um computador
Conjunto de instruções do CPU
● Caracterizada por:
● Instrução: definição de uma operação elementar, capaz de ser executada pela máquina (interpretada pelo CPU)
■Conjunto de instruções do processador (ISA) ■Estrutura interna do processador (que registadores existem, etc) ■Modelo de memória (dimensão endereçável, alcance que o bus permite) ■Topologias de interligação dos componentes CPU, memória e periféricos (estruturas de buses)
● Um mesmo conjunto de instruções pode ter distintas realizações: ■diferentes processadores e famílias de processadores, com custos e desempenhos variáveis (Intel vs. AMD; PIII vs. P4 vs PM;…) ASC1 - 2006/2007
107
Definição das instruções (1)
■Que operações implementar no hardware?
● Que informação deve incorporar-se no código de cada instrução? ■Como descrevemos a operação e informação usada pela operação ASC1 - 2006/2007
108
Definição das instruções (2) ● Os objectivos a considerar são muitos:
● As classes de instruções necessárias são poucas:
■Aproximar das linguagens de alto nível ■Reduzir o tamanho dos programas ■Oferecer instruções poderosas e eficientes ■Instruções simples, que facilitem realização eficiente ■Oferecer diversos modos de endereçar as variáveis em memória (ex. referências, matrizes, registos) ■Reduzir o número de acessos a memória central ■Oferecer só as instruções de facto úteis ■Promover uma abordagem em que instruções mais complexas não são oferecidas, mas podem ser implementadas, pelos programas, de forma eficiente
■Aritméticas e lógicas ■Transferências de dados ■Controlo da sequência de execução
ASC1 - 2006/2007
● Que tipo de instruções se devem incluir na arquitectura?
109
Definição das instruções (3)
ASC1 - 2006/2007
110
Exemplos de possíveis instruções ● Que instruções incluir no CPU?
● Para as boas soluções, contribuem: ■A definição do conjunto de instruções ■E todos os outros elementos da arquitectura…
● Uma boa solução é também fruto de compromissos: ■Custo ■Funcionalidade ■Desempenho ■Leis do mercado e circunstâncias tecnológicas…
■Multiplicação e divisão ■Aritmética de reais ■Chamada e retorno de funções/métodos ■Execução eficiente de ciclos tipo for ■Contar e temporizar acções ■Operar sobre cadeias de caracteres, sobre listas, sobre filas, sobre registos, sobre matrizes ■Mover e recolocar programas em memória ■Suspensão e reactivação de programas ■????
● A que nível: na arquitectura do computador ou em níveis superiores da hierarquia? (p.ex. SO?) ASC1 - 2006/2007
111
ASC1 - 2006/2007
112
1
Codificação de cada instrução máquina
Tamanho das instruções
● O formato depende do tipo de instrução:
● Quantos bits para o código? ■Depende do número de instruções distintas ■Exemplo: 8 bits 256 instruções possíveis
■O código da operação ou opcode (sempre!) ■A especificação dos operandos ou sua localização ■A especificação da localização para o resultado
● Quantos bits para os campos "op"?
● Exemplo: formato de instrução com 4 campos (3 operandos): op3 operação(op1, op2) ■Para operações com dois operandos (op1 e op2), deixando o resultado em op3 "op" pode indicar uma célula de memória ou um registo do CPU contendo o operando (op1 e op2 também podem ser o próprio valor do operando)
■codificação:
opcode op1
op2
op3
ASC1 - 2006/2007
113
■Depende de: ●onde estão os operandos, ●o modo como se endereça a memória, ●a capacidade do espaço de endereços
● Exemplo: ■Operandos e resultado em memória ■Memória de 64 KiloBytes 16 bits (2 Bytes) ■Então, uma instrução: 8 + 3 * 16 = 56 bits ASC1 - 2006/2007
114
Que alternativas?
Instruções de 2 operandos
● Instruções com operandos e resultado em registadores do CPU: "op" terá menos bits ● Instruções com menor número de operandos ● Instruções em que só figura uma parte do endereço ● Instruções que assumem que os operandos estão em locais pré-definidos ● As instruções podem não ser todas do mesmo tamanho
● formato de instrução com 3 campos (um dos operandos também será para o resultado): op1 operação(op1, op2) ■codificação: opcode op1 op2 ■Exemplo Intel: add eax, 4 (assembly) 05 04 00 00 00 (código em hexadecimal)
■Durante a descodificação pode necessitar de ler mais informação da memória ASC1 - 2006/2007
115
ASC1 - 2006/2007
Instruções de 1 operando
Instruções sem operandos
● formato de instrução com 2 campos (1 operando):
● formato de instrução com 1 campo (sem operandos ou estes estão implícitos):
op operação(op) ■codificação: opcode op
116
■codificação: opcode ■exemplo: ret C3
● um único operando ■exemplo: not eax f7 d0
● ou mais operandos, mas estes estão implícitos (p.ex. um registo ou um operando pré definido) ■exemplo: inc ecx 41
ASC1 - 2006/2007
117
ASC1 - 2006/2007
118
2
Um computador muito simples
Características do MARIE
Vejamos um computador (virtual) muito simples: ● MARIE (A Machine Architecture that is Really Intuitive and Easy) ■ Do livro: The Essentials of Computer Organization and Architecture, L. Null, J. Lobur ■ Simulador escrito em Java
Binário Programa em memória (máquina de Von Neumann) Opera dados de 16 bits Memória central com células de 16 bits cada; endereços de 12 bits ● Um registo interno geral: AC – acumulador (16 bits) ● Instruções de tamanho fixo, com 2 campos: ● ● ● ●
4 bits para código da operação (opcode), 12 bits para um endereço
● Entrada/Saída (I/O) de 16 bits ASC1 - 2006/2007
119
0
CPU
16bits
ALU 16 bits 16 bits
Memória Central
AC InREG
16 bits
MBR MAR
16 bits
IR
BUS 12 bits
4 K words = 8 KBytes
PC
16 bits
120
Arquitectura do MARIE
Arquitectura do MARIE
OutREG
ASC1 - 2006/2007
12 bits
Unidade de controlo
4095
ASC1 - 2006/2007
121
● MAR (Memory Address Register): endereço da posição de memória referenciada – 12 bits ● MDR (Memory Data Register): Registo que recebe o valor lido da memória ou onde se coloca o valor a escrever na memória – 16 bits ● PC (Program Counter): endereço da instrução a executar – 12 bits ● IR (Instruction Register): contém a instrução que se está a executar – 16 bits ● OutREG (Output register): contém o dado a enviar para um periférico de saída – 16 bits (8 se ASCII) ● InREG (Input register): recebe o dado lido de um periférico de entrada – 16 bits (8 se ASCII) ASC1 - 2006/2007
122
Conjunto de instruções (ISA)
Notação na descrição da execução
● Codificação fixa em 16 bits ● Formato:
● Apresenta as acções internas (“microacções”) em termos das transferências entre os vários registos/memória
■4 bits para o código da instrução; 12 bits para um endereço (opcional)
■(RTN/RTL Register Transfer Notation/Language)
● A única maneira de referir um operando é pelo seu endereço em memória ■Os operandos ou estão em memória ou são implícitos
● Transferências: destino fonte sentido da transferência
● O destino e a fonte podem ser : Bit: 15
■Registos do CPU (MAR, PC, AC, ...) ■Mem[X] conteúdo da célula de memória na posição com o endereço X
endereço
opcode
12 11
0 ASC1 - 2006/2007
123
ASC1 - 2006/2007
124
3
Ciclo de execução no MARIE 1. Fetch Obtenção da instrução em memória
2. Decode Descodificação
3. Execute Mais à frente…
■
Fetch
while (running) { MAR PC MBRMem[MAR] IR MBR PC PC +1 … MAR IR[bits 11-0] if (instrução IR[bits 15-12] requer um operando da memória) { MBR Mem[MAR] } … Executar a instrução… } ASC1 - 2006/2007
1
Load X
Carrega o conteúdo da posição de memória com endereço X no acumulador
0010
2
Store X
Guarda o conteúdo do acumulador na posição de memória com endereço X
0011
3
Add X
Soma Mem[X] com o conteúdo do acumulador, guardando o resultado no mesmo
0100
4
Subt X
Idem mas subtrai
0101
5
Input
Lê um valor para o acumulador
0110
6
Output
Escreve o que está no acumulador
0111
7
Halt
Pára a execução
1000
8
SkipCond
Salta por cima da próxima instrução de acordo com valor do acumulador
1001
9
Jump X
MAR 12 bits
16 bits
IR
16 bits BUS
Memória Central
12 bits
PC
Unidade de controlo
4095
ASC1 - 2006/2007
MAR X MBR Mem[MAR] AC MBR
● Store X MAR X, MBR AC Mem[MAR] MBR
127
126
● Add X MAR X MBR Mem[MAR] AC AC+MBR
● Subt X MAR X MBR Mem[MAR] AC AC-MBR
ASC1 - 2006/2007
128
As primeiras 9 intruções (cont.)
Add X CPU
● As operações de entrada e saída usam valores decimais
0
ALU
AC
16 bits MBR MAR 12 bits
X
InREG
MBR
MAR PC MBRMem[MAR] IR MBR PC PC +1
Carrega o valor X no PC ASC1 - 2006/2007
IR
OutREG
16 bits
● Load X
0001
16 bits
0
RTL das instruções do MARIE (1)
Primeiras 9 instruções
InREG
AC
125
Código Binário Hexa Mnemónica Descrição
OutREG
CPU ALU
16 bits BUS
Memória Central
MAR X MBR Mem[MAR] AC AC+MBR
● A instrução skipcond usa os bits 11 e 10 para indicar a condição em que funciona:
12 bits
■00 salta (skip) se AC < 0 ■01 salta (skip) se AC == 0 ■10 salta (skip) se o AC >= 0
PC
Unidade de controlo
4095
ASC1 - 2006/2007
■a conversão para caracteres é feita automaticamente pelo simulador
129
ASC1 - 2006/2007
130
4
RTL das instruções do MARIE (2)
Um programa simples
● Input
Programa: Load 100 Add 101 Store 102 Halt
AC InREG
● Output OutREG AC
● Halt Running=False (O ciclo de execução de instruções termina)
● Jump X
Dados em memória antes da execução: 100: 24 101: 1 102: 0
PC IR[11-0]
Dados em memória depois da execução: 100: 24 101: 1 102: 25
● SkipCond if ( IR[11-10] == 002 ) if ( AC < 0 ) PC PC + 1 else if ( IR[11-10] == 012 ) if ( AC == 0 ) PC PC + 1 else if ( IR[11-10] == 102 ) if ( AC >= 0 ) PC PC + 1 ASC1 - 2006/2007
131
ASC1 - 2006/2007
132
Linguagem “assembly”
Papel de um “assembler”
● Mnemónicas para as instruções máquina ● Operandos das instruções:
● Assembler é o tradutor da linguagem de Cabeçalho: assembly para a máquina
■Constantes (binário, decimal, hexadecimal) ■Endereços (podem ser simbólicos: etiquetas)
ORG 100 Load A Add B Store C Halt A, dec 24 B, hex 1 C, hex 0
● Características de um dado processador ■Nem todos os usos das mnemónicas podem ser válidos
● Pseudo instruções ■Não correspondem a instruções máquina ■Indicações dadas ao “assembler” ●Exemplos: comentários; indicar o endereço de carregamento em memória; valor inicial do PC ASC1 - 2006/2007
End. de carregamento Valor inicial do PC 0001000100000100 0011000100000101 ... ...
Assembler
0000000000011000 0000000000000001 0000000000000000
Ficheiro texto com o código em assembly 133
Etiquetas
Ficheiro objecto ASC1 - 2006/2007
134
Processamento das etiquetas ● “Assembler” processa o ficheiro linha a linha. Quando encontra uma etiqueta não sabe ainda o endereço de memória correspondente. ● Tem de fazer dois passos sobre o ficheiro fonte
● Permitem designar simbolicamente as posições de memória Load A 100 Load 104 Add B 101 Add 105 Store C 102 Store 106 Halt 103 Halt A, Dec 24 104 0024 B, Hex 1 105 0001 C, Hex 0 106 0000 ASC1 - 2006/2007
■No primeiro passo, é criada uma tabela de todos os símbolos
■No segundo passo o espaço dos endereços que não tinha sido preenchido, já o pode ser 135
ASC1 - 2006/2007
0x100
0001 ???? ???? ????
0x101
0011 ???? ???? ????
0x102
0010 ???? ???? ????
A
0x104
B
0x105
C
0x106
0x100
0001 0001 0000 0100
0x101
0011 0001 0000 0101
0x102
0010 0001 0000 0110 136
5