Capítulo 4 João Lourenço [email protected] Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 O nível ISA (Instruction Set Architecture) Adaptado dos transparentes das autoras do livro “The Essentials of Computer Organization and Architecture” Objectivos Compreender os factores envolvidos no desenho do nível ISA (Instruction Set Architecture) Conhecer o formato das instruções, operandos e diferentes modos de endereçamento Diferenciar e reconhecer os processadores little- e big-endian 2 Generalidades sobre o nível ISA [1] O nível ISA faz a interface entre o programador e o hardware Estudar o conjunto de instruções implica estudar a arquitectura e funcionamento do CPU, pois estão interligados A arquitectura do computador está, em geral, escondida do programador (que usa uma linguagem de programação de alto nível) Em abstracto, o programador não deveria ter em consideração a arquitectura 3 Generalidades sobre o nível ISA [2] A linguagem de programação alto nível é transformada para um formato intermédio comum (ISA) O construtor do hardware constrói o hardware que executa as instruções ISA directamente e de uma forma eficiente Para desenhos equivalentes, ISAs diferentes podem ter implicações de até 25% no desempenho 4 Inerface entre o compilador e o HW Programa em C++ Programa em Fortran Compilador de C++ Compilador de Fortran Nível ISA O programa ISA é executado pelo microprograma ou pelo hardware Hardware 5 Perspectiva geral do nível ISA [1] Propriedades O compilador produz código ISA O compilador precisa de conhecer a arquitectura do microprocessador • Modelo de memória, registos disponíveis, … 6 Perspectiva geral do nível ISA [2] Modelos de memória Os bytes estão agrupados em palavras (4-bytes, 8-bytes, etc.) Endereçável ao byte ou à palavra 16/32/64-bit Normalmente as palavras estão alinhadas em endereços múltiplos do tamanho da palavra Muitos processadores têm um espaço de endereçamento linear único para código e dados, alguns (poucos) têm “espaços” separados 7 Perspectiva geral do nível ISA [3] Registos Os registos são visíveis no nível ISA Usados para controlar a execução, guardar valores temporários, etc… Alguns registos são internos e não estão visíveis no nível ISA Divididos em 2 categorias: específicos (PC, SP, Flags) e generalistas (R1, R2) 8 Nível ISA: instruções Cada instrução contém 3 componentes básicos Código da operação: especifica a operação a ser executada (expressa como um código binário) Referência aos operandos fonte: referência aos dados fonte a serem manipulados pela instrução Referência para o destino: referência ao “local” onde deverá ser guardado o resultado da operação 9 Tipos de dados [1] As instruções esperam os seus dados num formato particular, e.g., Números em vírgula flutuante em precisão simples ou dupla? De acordo com IEEE754? Processamento de inteiros: Os inteiros são sempre com sinal? Ou suporta inteiros sem sinal? 10 Tipos de dados [2] Suporte de números em vírgula flutuante: Usa a norma IEEE754? Suporta precisão simples e precisão dupla? Tem suporte hardware para processamento de números em VF, ou faz por software? Suporte de outros tipos não numéricos: Caracteres? Booleanos? Apontadores? 11 Formato das instruções Formato genérico Opcode Operando 1 Operando 2 … Operando N Opcode Opcode Endereço Opcode Endereço 1 Opcode Endereço 1 Endereço 2 Opcode Endereço 1 Endereço 2 Endereço 3 12 Formato das instruções: critérios Possibilidade de adicionar novas instruções no futuro A eficiência do nível ISA está muito dependente da tecnologia usada Instruções pequenas e regulares (semelhantes) são melhores que longas e/ou irregulares O formato das instruções necessita de suportar todas as operações desejadas Tamanho do(s) campo(s) de endereçamento nas instruções 13 Endereçamento [1] O Opcode é importante, mas uma parte considerável da instrução é usada para especificar onde estão os operandos e onde guardar o resultado Uma instrução aritmética típica tem 3 endereços: dois operandos e um resultado Para reduzir o espaço ocupado pela especificação dos endereços: Estes podem estar implícitos na instrução São total ou parcialmente registos 14 Endereçamento [2] Para um CPU com 32 registos generalistas, apenas necessitamos de 5-bits para identificar cada operando Os operandos estão total ou parcialmente implícitos: Instruções de 3 endereços Instruções de 2 endereços Instruções de 1 endereço Instruções sem endereços (CPUs baseados numa pilha, e.g., JVM) 15 Endereçamento [3] Opcode Endereço 1 Endereço 2 Endereço 3 Instruções de 3 endereços: Tanto os operandos como o destino estão explícitos na instrução • A instrução tem uma semântica do tipo: X = Y + Z Os operandos/endereços podem referenciar directamente a memória • Limitações quanto à velocidade da memória vs. velocidade do processador • Implicações devido ao tamanho (opcode + 3 endereços de memória) Os operandos/endereços podem referenciar registos • Reduz consideravelmente o tamanho total da instrução 16 Endereçamento [4] Opcode Endereço 1 Endereço 2 Instruções de 2 endereços: Um dos endereços é, simultaneamente, fonte e destino • A instrução tem uma semântica do tipo: X=X+Y É um formato muito comum (e.g., Intel) 17 Endereçamento [5] Opcode Endereço 1 Instruções de 1 endereço Dois dos endereços estão implícitos na instrução • A instrução tem uma semântica do tipo: Acc = Acc + X É um formato usado no MARIE 18 Endereçamento [6] Opcode Instruções de 0 endereços Todos os endereços estão implícitos na instrução • Exemplo: TBA (Transfer register B to A) Instruções baseadas em pilha (0 endereços) Todas as operações são baseadas no uso de uma pilha (em memória) que contém os operandos e é, simultaneamente, o destino Interacção com a pilha usando operações 19 Endereçamento [7] Exemplo: Y = (A-B) / (C+D*E) 3 address 2 address 1 address SUB MUL ADD DIV MOV SUB MOV MUL ADD DIV LOAD MUL ADD STORE LOAD SUB DIV STORE Y, A, B T, D, E T, T, C Y, Y, T Y, A Y, B T, D T, E T, C Y, T D E C Y A B Y Y 20 Formato das instruções: exemplo [1] 21 Formato das instruções: exemplo [2] 22 Modos de endereçamento: Directo [1] O campo de endereço contém o endereço de memória onde se encontra o operando Endereço Efectivo (EA) = campo de endereço (A) e.g. ADD A Adiciona o conteúdo da célula de memória A ao acumulador Obtém o operando na posição de memória A Uma única referência a memória para aceder aos dados Não necessita de cálculos adicionais para determina o EA O número de localizações que podem ser usadas para guardar o endereço efectivo é 2k, onde k é o tamanho do campo endereço na instrução (A) 23 Modos de endereçamento: Directo [2] Instrução Opcode Endereço A Memória Operando A-1 A A+1 A+2 A+3 A+4 24 Modos de endereçamento: Indirecto [1] O campo de endereço na instrução especifica a localização em memória que contém o endereço dos dados São necessários dois acessos à memória • O primeiro para obter o endereço efectivo • O segundo para obter o operando Âmbito do EA é 2n , onde n é o tamanho (bits) da palavra de memória O número de localizações que podem ser usadas para guardar o endereço efectivo é 2k, onde k é o tamanho do campo endereço na instrução 25 Modos de endereçamento: Indirecto [2] Instrução Opcode Endereço A Memória Apontador operando Operando A-1 A A+1 A+2 A+3 A+4 26 Modos de endereçamento: Por registo [1] Endereçamento por registo: como o endereçamento directo, mas o campo endereço na instrução especifica um registo Instrução Opcode (Endereço do) Registo Rn Registos Operando • Não acede à memória • Execução muito rápida • Espaço de endereçamento muito limitado • Múltiplos registos melhoram o desempenho Rn-1 Rn Rn+1 Rn+2 Rn+3 Rn+4 27 Modos de endereçamento: Indirecto por registo [1] Endereçamento indirecto por registo: como o endereçamento indirecto, mas o campo de endereço na instrução especifica um registo que contém o endereço efectivo Instrução Opcode (Endereço do) Registo Rn Registos Rn-1 Rn Rn+1 Rn+2 Rn+3 Rn+4 Grande espaço de endereçamento Menos um acesso à memória que com endereçamento indirecto Memória Apontador operando Operando A-1 A A+1 A+2 A+3 A+4 28 Modos de endereçamento: Indexado [1] EA = A + (R); A instrução contém dois endereços: A = endereço base; R = registo que contém o deslocamento em relação ao endereço base Instrução Opcode Registo R Memória Registos Rn-1 Rn Rn+1 Rn+2 Rn+3 Rn+4 Índice / deslocamento Endereço A + Operando A-1 A A+1 A+2 A+3 A+4 29 Modos de endereçamento: Imediato [1] Instrução Opcode Operando O campo de endereço contém o operando Não faz referências adicionais à memória 30 Modos de endereçamento: Exemplo Qual o valor presente no acumulador para cada um destes modos ? Instrução : LOAD 800 800 900 1000 700 31 Tipo de instruções As instruções disponíveis têm as seguintes categorias: Transferências de dados Aritméticas Booleanas Manipulação de bits I/O Controlo de execução Especializadas Consegue pensar em exemplos? 32 Arquitecturas little- e big-endian [1] Refere-se à ordenação dos grupos de bytes em memória e.g., se tivermos um inteiro com 4 bytes para colocar na posição de memória Ma e seguintes, como fazemos? B3 B2 B1 B0 Big Endian Ma-1 Little Endian B3 Ma B0 B2 Ma+1 B1 B1 Ma+2 B2 B0 Ma+3 B3 Ma+4 Ma+5 33 Arquitecturas little- e big-endian [2] Big endian: Little endian: As instruções assembly para operar sobre um O sinal do número número com 1, 2, 4 ou mais bytes assume que pode ser determinado têm o byte menos analisando o byte significativo sempre no com deslocamento 0 deslocamento 0 É mais natural Facilita a compatibilidade 8/16/32 bits 34 Notas finais As instruções podem ter tamanho fixo ou variável Existem vários modos de endereçamento: o Imediato (Immediate) o Indirecto por registo (Register Indirect) o Directo (Direct) o Por registo (Register) o Indexado (Indexed) o Pilha (Stack) o Indirecto (Indirect) 38