Arquitectura de um computador Caracterizada por: 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, 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; Conjunto de instruções do Instrução: definição de uma operação elementar, capaz de ser executada pela máquina (interpretada pelo Que tipo de instruções se devem incluir na arquitectura? 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-26/27 17 ASC1-26/27 18 Definição das instruções (1 As classes de instruções necessárias são poucas: Aritméticas e lógicas Transferências de dados Controlo da sequência de execução Definição das instruções (2 Os objectivos a considerar são muitos: 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 ASC1-26/27 19 ASC1-26/27 11 Definição das instruções (3 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 Exemplos de possíveis instruções Que instruções incluir no? 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-26/27 111 ASC1-26/27 112 1
Codificação de cada instrução máquina O formato depende do tipo de instrução: 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 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 contendo o operando (op1 e op2 também podem ser o próprio valor do operando codificação: opcode op1 op2 op3 ASC1-26/27 113 Tamanho das instruções Quantos bits para o código? Depende do número de instruções distintas Exemplo: 8 bits 256 instruções possíveis Quantos bits para os campos "op"? 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 de 64 KiloBytes (2 Bytes Então, uma instrução: 8 + 3 * 16 = 56 bits ASC1-26/27 114 Que alternativas? Instruções com operandos e resultado em registadores do : "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 Durante a descodificação pode necessitar de ler mais informação da memória Instruções de 2 operandos 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 5 4 (código em hexadecimal ASC1-26/27 115 ASC1-26/27 116 Instruções de 1 operando formato de instrução com 2 campos (1 operando: op operação(op codificação: opcode op um único operando exemplo: not eax f7 d ou mais operandos, mas estes estão implícitos (p.ex. um registo ou um operando pré definido exemplo: inc ecx 41 Instruções sem operandos formato de instrução com 1 campo (sem operandos ou estes estão implícitos: codificação: opcode exemplo: ret C3 ASC1-26/27 117 ASC1-26/27 118 2
Um computador muito simples Vejamos um computador (virtual muito simples: IE (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 Características do IE Binário Programa em memória (máquina de Von Neumann Opera dados de central com células de cada; endereços de Um registo interno geral: acumulador ( Instruções de tamanho fixo, com 2 campos: 4 bits para código da operação (opcode, para um endereço Entrada/Saída (I/O de ASC1-26/27 119 ASC1-26/27 12 Arquitectura do IE IR PC 16bits ASC1-26/27 121 495 4 K words = 8 KBytes Arquitectura do IE (Memory Address Register: endereço da posição de memória referenciada MDR (Memory Data Register: Registo que recebe o valor lido da memória ou onde se coloca o valor a escrever na memória 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 (Output register: contém o dado a enviar para um periférico de saída (8 se ASCII (Input register: recebe o dado lido de um periférico de entrada (8 se ASCII ASC1-26/27 122 Conjunto de instruções (ISA Codificação fixa em Formato: 4 bits para o código da instrução; para um endereço (opcional 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 opcode endereço Bit: 15 12 11 Notação na descrição da execução Apresenta as acções internas ( microacções em termos das transferências entre os vários registos/memória (RTN/RTL Register Transfer Notation/Language Transferências: destino fonte sentido da transferência O destino e a fonte podem ser : Registos do (, PC,,... Mem[X] conteúdo da célula de memória na posição com o endereço X ASC1-26/27 123 ASC1-26/27 124 3
Ciclo de execução no IE Fetch 1. Fetch Obtenção da instrução em memória 2. Decode Descodificação 3. Execute Mais à frente while (running { PC Mem[] IR PC PC +1 IR[bits 11-] if (instrução IR[bits 15-12] requer um operando da memória { } Executar a instrução } IR PC 495 PC Mem[] IR PC PC +1 ASC1-26/27 125 ASC1-26/27 126 Primeiras 9 instruções RTL das instruções do IE (1 Código Binário 1 1 11 1 11 11 Hexa 1 2 3 4 5 6 Mnemónica Load X Store X Add X Subt X Input Output Descrição Carrega o conteúdo da posição de memória com endereço X no acumulador Guarda o conteúdo do acumulador na posição de memória com endereço X Soma Mem[X] com o conteúdo do acumulador, guardando o resultado no mesmo Idem mas subtrai Lê um valor para o acumulador Escreve o que está no acumulador Load X Store X, Mem[] Add X + Subt X - 111 7 Pára a execução 1 8 SkipCond Salta por cima da próxima instrução de acordo com valor do acumulador 11 9 Jump X Carrega o valor X no PC ASC1-26/27 127 ASC1-26/27 128 Add X As primeiras 9 intruções (cont. As operações de entrada e saída usam valores decimais IR X PC 495 + a conversão para caracteres é feita automaticamente pelo simulador A instrução skipcond usa os bits 11 e 1 para indicar a condição em que funciona: salta (skip se < 1 salta (skip se == 1 salta (skip se o >= ASC1-26/27 129 ASC1-26/27 13 4
RTL das instruções do IE (2 Input Output Running=False (O ciclo de execução de instruções termina Jump X PC IR[11-] SkipCond if ( IR[11-1] == 2 if ( < PC PC + 1 else if ( IR[11-1] == 1 2 if ( == PC PC + 1 else if ( IR[11-1] == 1 2 if ( >= PC PC + 1 Um programa simples Programa: Load 1 Add 11 Store 12 Dados em memória antes da execução: 1: 24 11: 1 12: Dados em memória depois da execução: 1: 24 11: 1 12: 25 ASC1-26/27 131 ASC1-26/27 132 Linguagem assembly Mnemónicas para as instruções máquina Operandos das instruções: Constantes (binário, decimal, hexadecimal Endereços (podem ser simbólicos: etiquetas 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 Papel de um assembler Assembler é o tradutor da linguagem de assembly para a máquina ORG 1 Load A Add B Store C A, dec 24 B, hex 1 C, hex Ficheiro texto com o código em assembly Assembler Cabeçalho: End. de carregamento Valor inicial do PC 111 11111...... 11 1 Ficheiro objecto ASC1-26/27 133 ASC1-26/27 134 Etiquetas Permitem designar simbolicamente as posições de memória Load A 1 Load 14 Add B 11 Add 15 Store C 12 Store 16 13 A, Dec 24 14 24 B, Hex 1 15 1 C, Hex 16 ASC1-26/27 135 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 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 x1 x11 x12 A B C x1 x11 x12 1???????????? 11???????????? 1???????????? x14 x15 x16 1 1 1 11 1 11 1 1 11 ASC1-26/27 136 5