Anda di halaman 1dari 5

Arquitectura de um computador Conjunto de instruções do CPU

● Caracterizada por: ● Instrução: definição de uma operação elementar,


■Conjunto de instruções do processador (ISA) capaz de ser executada pela máquina (interpretada
■Estrutura interna do processador (que registadores pelo CPU)
existem, etc)
■Modelo de memória (dimensão endereçável, alcance que
o bus permite) ● Que tipo de instruções se devem incluir na
■Topologias de interligação dos componentes CPU, arquitectura?
memória e periféricos (estruturas de buses)
■Que operações implementar no hardware?
● Um mesmo conjunto de instruções pode ter
distintas realizações: ● Que informação deve incorporar-se no código de
■diferentes processadores e famílias de processadores, cada instrução?
com custos e desempenhos variáveis (Intel vs. AMD; PIII ■Como descrevemos a operação e informação usada pela
vs. P4 vs PM;…) operação

ASC1 - 2006/2007 107 ASC1 - 2006/2007 108

Definição das instruções (1) Definição das instruções (2)


● As classes de instruções necessárias são poucas: ● Os objectivos a considerar são muitos:
■Aproximar das linguagens de alto nível
■Aritméticas e lógicas
■Reduzir o tamanho dos programas
■Transferências de dados
■Oferecer instruções poderosas e eficientes
■Controlo da sequência de execução ■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

ASC1 - 2006/2007 109 ASC1 - 2006/2007 110

Definição das instruções (3) Exemplos de possíveis instruções


● Que instruções incluir no CPU?
● Para as boas soluções, contribuem:
■Multiplicação e divisão
■A definição do conjunto de instruções ■Aritmética de reais
■E todos os outros elementos da arquitectura… ■Chamada e retorno de funções/métodos
● Uma boa solução é também fruto de compromissos: ■Execução eficiente de ciclos tipo for
■Contar e temporizar acções
■Custo
■Operar sobre cadeias de caracteres, sobre listas, sobre filas,
■Funcionalidade sobre registos, sobre matrizes
■Desempenho ■Mover e recolocar programas em memória
■Leis do mercado e circunstâncias tecnológicas… ■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?
■O código da operação ou opcode (sempre!) ■Depende do número de instruções distintas
■A especificação dos operandos ou sua localização ■Exemplo: 8 bits  256 instruções possíveis
■A especificação da localização para o resultado ● Quantos bits para os campos "op"?
● Exemplo: formato de instrução com 4 campos (3 ■Depende de:
operandos): ●onde estão os operandos,
op3  operação(op1, op2) ●o modo como se endereça a memória,
■Para operações com dois operandos (op1 e op2), deixando o ●a capacidade do espaço de endereços
resultado em op3
"op" pode indicar uma célula de memória ou um registo do ● Exemplo:
CPU contendo o operando (op1 e op2 também podem ser o ■Operandos e resultado em memória
próprio valor do operando)
■Memória de 64 KiloBytes  16 bits (2 Bytes)
■codificação: opcode op1 op2 op3
■Então, uma instrução: 8 + 3 * 16 = 56 bits
ASC1 - 2006/2007 113 ASC1 - 2006/2007 114

Que alternativas? Instruções de 2 operandos


● Instruções com operandos e resultado em ● formato de instrução com 3 campos (um dos
registadores do CPU: "op" terá menos bits operandos também será para o resultado):
● Instruções com menor número de operandos op1  operação(op1, op2)
● Instruções em que só figura uma parte do endereço ■codificação: opcode op1 op2
● Instruções que assumem que os operandos estão em
locais pré-definidos ■Exemplo Intel:
● As instruções podem não ser todas do mesmo add eax, 4 (assembly)
tamanho 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 116

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
op  operação(op) operandos ou estes estão implícitos):
■codificação: opcode op ■codificação: opcode
● um único operando
■exemplo: ret
■exemplo: not eax
f7 d0 C3
● 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
● Binário
Vejamos um computador (virtual) muito
● Programa em memória (máquina de Von Neumann)
simples:
● Opera dados de 16 bits
● MARIE (A Machine Architecture that is Really ● Memória central com células de 16 bits cada;
Intuitive and Easy) endereços de 12 bits
■ Do livro: The Essentials of Computer ● Um registo interno geral: AC – acumulador (16 bits)
Organization and Architecture, L. Null, J. Lobur ● Instruções de tamanho fixo, com 2 campos:
■ Simulador escrito em Java 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 ASC1 - 2006/2007 120

Arquitectura do MARIE Arquitectura do MARIE


0 16bits ● MAR (Memory Address Register): endereço da posição de
CPU memória referenciada – 12 bits
ALU ● 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 – 16 bits
OutREG 16 bits
● PC (Program Counter): endereço da instrução a executar – 12
AC Memória bits
InREG 16 bits Central ● IR (Instruction Register): contém a instrução que se está a
16 bits
MBR executar – 16 bits
BUS 4 K words
MAR 12 bits = 8 KBytes ● OutREG (Output register): contém o dado a enviar para um
periférico de saída – 16 bits (8 se ASCII)
IR PC ● InREG (Input register): recebe o dado lido de um periférico
16 bits 12 bits
Unidade de controlo de entrada – 16 bits (8 se ASCII)
4095
ASC1 - 2006/2007 121 ASC1 - 2006/2007 122

Conjunto de instruções (ISA) Notação na descrição da execução


● Codificação fixa em 16 bits ● Apresenta as acções internas (“microacções”) em
● Formato: termos das transferências entre os vários
registos/memória
■4 bits para o código da instrução; 12 bits para um
■(RTN/RTL Register Transfer Notation/Language)
endereço (opcional)
● A única maneira de referir um operando é pelo seu ● Transferências: destino  fonte
endereço em memória  sentido da transferência
■Os operandos ou estão em memória ou são implícitos
● O destino e a fonte podem ser :
opcode endereço ■Registos do CPU (MAR, PC, AC, ...)
■Mem[X] conteúdo da célula de memória na posição com o
Bit: 15 12 11 0 endereço X

ASC1 - 2006/2007 123 ASC1 - 2006/2007 124

3
Ciclo de execução no MARIE Fetch
while (running) {
MAR  PC CPU 0
1. Fetch MBRMem[MAR] ALU
Obtenção da instrução em
memória IR  MBR MAR  PC
PC  PC +1 AC MBRMem[MAR]
16 bits
… 16 bits IR  MBR
OutREG MBR Memória
2. Decode MAR  IR[bits 11-0] PC  PC +1
BUS Central
Descodificação if (instrução IR[bits 15-12] requer um InREG MAR
12 bits
operando da memória) { 12 bits
MBR  Mem[MAR] IR PC
16 bits
}
Unidade de controlo
… 4095
3. Execute
■ Mais à frente… Executar a instrução…
}

ASC1 - 2006/2007 125 ASC1 - 2006/2007 126

Primeiras 9 instruções RTL das instruções do MARIE (1)


Código Binário Hexa Mnemónica Descrição
● Load X ● Add X
0001 1 Load X Carrega o conteúdo da posição de memória com
endereço X no acumulador
MAR  X MAR  X
0010 2 Store X Guarda o conteúdo do acumulador na posição MBR  Mem[MAR] MBR  Mem[MAR]
de memória com endereço X AC MBR AC AC+MBR
0011 3 Add X Soma Mem[X] com o conteúdo do acumulador,
guardando o resultado no mesmo ● Store X ● Subt X
0100 4 Subt X Idem mas subtrai MAR  X, MBR  AC MAR  X
0101 5 Input Lê um valor para o acumulador Mem[MAR] MBR MBR  Mem[MAR]
0110 6 Output Escreve o que está no acumulador AC AC-MBR
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 Carrega o valor X no PC

ASC1 - 2006/2007 127 ASC1 - 2006/2007 128

Add X As primeiras 9 intruções (cont.)


CPU ● As operações de entrada e saída usam
0
ALU valores decimais
MAR  X ■a conversão para caracteres é feita
AC MBR  Mem[MAR]
16 bits
AC AC+MBR
automaticamente pelo simulador
16 bits
OutREG MBR Memória
BUS Central ● A instrução skipcond usa os bits 11 e 10 para
MAR
InREG
12 bits
12 bits indicar a condição em que funciona:
16 bits
IR X PC ■00 salta (skip) se AC < 0
Unidade de controlo ■01 salta (skip) se AC == 0
4095
■10 salta (skip) se o AC >= 0

ASC1 - 2006/2007 129 ASC1 - 2006/2007 130

4
RTL das instruções do MARIE (2) Um programa simples
● Input Programa: Dados em memória antes
AC  InREG da execução:
Load 100
● Output
OutREG  AC Add 101 100: 24
● Halt Store 102 101: 1
Running=False (O ciclo de execução de instruções termina) Halt 102: 0
● Jump X
PC IR[11-0]
● SkipCond Dados em memória depois
if ( IR[11-10] == 002 ) da execução:
if ( AC < 0 ) PC  PC + 1 100: 24
else if ( IR[11-10] == 012 ) 101: 1
if ( AC == 0 ) PC  PC + 1
else if ( IR[11-10] == 102 ) 102: 25
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 ● Assembler é o tradutor da linguagem de
● Operandos das instruções: assembly para a máquina Cabeçalho:
End. de carregamento
■Constantes (binário, decimal, hexadecimal)
ORG 100 Valor inicial do PC
■Endereços (podem ser simbólicos: etiquetas)
Load A 0001000100000100
● Características de um dado processador Add B 0011000100000101
...
■Nem todos os usos das mnemónicas podem ser válidos Store C ...
Halt
● Pseudo instruções
■Não correspondem a instruções máquina
A, dec 24 Assembler 0000000000011000
B, hex 1 0000000000000001
■Indicações dadas ao “assembler” C, hex 0 0000000000000000

●Exemplos: comentários; indicar o endereço de Ficheiro texto com o


carregamento em memória; valor inicial do PC Ficheiro objecto
código em assembly

ASC1 - 2006/2007 133 ASC1 - 2006/2007 134

Etiquetas Processamento das etiquetas


● “Assembler” processa o ficheiro linha a
● Permitem designar simbolicamente as linha. Quando encontra uma etiqueta 0x100 0001 ???? ???? ????
posições de memória não sabe ainda o endereço de memória
correspondente. 0x101 0011 ???? ???? ????
Load A 100 Load 104 ● Tem de fazer dois passos sobre o ficheiro 0x102 0010 ???? ???? ????
fonte
Add B 101 Add 105
A 0x104
Store C  102 Store 106 ■No primeiro passo, é criada uma tabela
de todos os símbolos B 0x105
Halt 103 Halt C 0x106
A, Dec 24 104 0024
0x100 0001 0001 0000 0100
■No segundo passo o espaço dos
B, Hex 1 105 0001 endereços que não tinha sido 0x101 0011 0001 0000 0101
preenchido, já o pode ser
C, Hex 0 106 0000 0x102 0010 0001 0000 0110
ASC1 - 2006/2007 135 ASC1 - 2006/2007 136

Anda mungkin juga menyukai