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