Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Conjuntos de Instruções Conjunto de instruções O “limite” que separa a visão do projetista de computador da visão do programador de computador. Características das instruções de máquina Elementos de uma instrução de máquina Código de operação (opcode, ou operation code): código binário que especifica a operação a ser realizada. Referência à operando fonte: operandos fonte são operandos que são entradas para a operação. Referência à operando destino: a operação pode produzir um resultado Referência à próxima instrução: endereço da instrução a ser executada após o término da atual. (pode ser omitido caso a próxima venha na sequência) Representação da instrução Internamente, as instruções são armazenadas em binário. Para melhor entendimento, lidamos com representações simbólicas Os opcodes são representados por abreviações (mnemônicos) que indicam a operação. Ex: ADD – Adiciona SUB – Subtrai MUL – Multiplica DIV – Divide LOAD – Carrega dados da memória STOR – Armazena dados na memória Representação da instrução Operandos também podem ter representação simbólica X = 513 Y = 514 ADD R, Y *Soma o valor contido no local Y (endereço 514) ao registrador R (endereço 513) Tipos de instrução Processamento de dados – Instruções lógicas e aritméticas Armazenamento de dados – Movimentação de dados de/para registrador ou locais de memória. Movimentação de dados – Instruções de E/S Controle – Instruções de teste e desvio. Números de endereços Uma arquitetura pode ser descrita pela quantidade de endereços contidos em uma instrução Instruções aritméticas e lógicas tendem a exigir mais operandos Praticamente todas as operações de aritmética e lógica são unárias (um operando de origem) ou binárias (dois operandos de origem) É necessário mais um operando para armazenar o resultado, e outro para o endereço da próxima instrução (nas arquiteturas atuais, o último é obtido pelo registrador PC). Na maioria das arquiteturas, casa instrução possui um, dois ou três endereços de operando. Podem ocorrer instruções de zero endereços, aplicadas a pilhas. Números de endereços Programas para executar Instrução Comentário SUB Y, A, B MPY T, D, E ADD T, T, C DIV Y, Y, T Y ← A – B T ← D X E T ← T + C Y ← Y / T Instruções com três endereços Instrução Comentário MOVE Y, A SUB Y, B MOVE Y, D MPY T, E ADD T, C DIV Y, T Y ← A Y ← Y – B T ← D T ← T X E T ← T + C Y ← Y / T Instruções com dois endereços Instrução Comentário LOAD D MPY E ADD C STOR Y LOAD A SUB B DIV Y STOR Y AC ← D AC ← AC X E AC ← AC + C Y ← AC AC ← A AC ← AC - B AC ←AC / T Y ← AC Instruções com um endereço * AC = Acumulador Projeto do conjunto de instruções Questões básicas de projeto: Repertório de operações: Quantas e quais operações deve oferecer, e com que complexidade Tipos de dados sobre os quais as operações são realizadas Formato da instrução: tamanho em bits, nº de endereços, tamanho dos campos... Registradores: Numero de registradores do processador que podem ser referenciados pelas instruções e seu uso Endereçamento: O modo ou modos pelos quais o endereço de um operando é especificado Tipos de operandos Principais tipos de dados Endereços (reais ou virtuais, são representados como inteiros sem sinal) Números Caracteres Dados lógicos Números Tipos mais comuns: Inteiros binários (ponto fixo binário) Ponto flutuante binário Decimal Representação mais comum: Decimal agrupado (quatro bits representando um número ou sinal. Ex: 0 = 0000, 1 = 0001 ... 8 = 1000, 9 = 1001, + = 1100 e - = 1101) Usado para evitar overhead na conversão binário/decimal, em operações que utilizem mais E/S do que cálculos. Caracteres Texto representado como string de caracteres É necessário um “padrão” de representação Formatos mais comuns: IRA (International Reference Alfabet), conhecido como ASCII (American Standard Code for Information Interchange) EBCDIC (Extended Binary Coded Decimal Interchange Code) <number> Dados Lógicos Normalmente, cada palavra (ou outra unidade endereçável, como byte, meia palavra, etc) é tratada como uma única unidade de dados Porém, pode ser possível ter uma unidade de n bits, onde cada bit corresponde a um item de dado. Quando vistos dessa forma, são considerados dados lógicos. Essa representação é mais eficiente para armazenar arrays de dados booleanos. Dados lógicos 0 1 1 0 1 1 1 0 Dado comum Dados lógicos Unidade de dados 0 1 1 0 1 1 1 0 Unidades de dados Tipos de operações Tipos de operações Transferência de dados Aritmética Lógica Conversão E/S Controle do sistema Transferência de controle Transferência de dados Realiza as seguintes tarefas (ou quase todas): Calcula o endereço de memória, com base no modo de endereço Se o endereço se referir à memória virtual, traduzir de endereço virtual para real. Determinar se o item endereçado está na cache Se não, emitir um comando para o módulo de memória. Transferência de dados Operação Descrição Move (transferir) Transfere palavra ou bloco da origem ao destino Store (armazenar) Transfere palavra do processador para a memória Load (carregar) Transfere palavra da memória para o processador Exchange Troca o conteúdo da origem e do destino Clear (reset) Transfere palavra de 0s para o destino Set Transfere palavra de 1s para o destino Push Transfere palavra da origem para o topo da pilha Pop Transfere palavra do topo da pilha para o destino Operações aritméticas Operações aritméticas básicas (adição, subtração, subtração e divisão) para várias formas de representação de números (inteiros/ponto fixo, ponto flutuante e decimal agrupado) Outras operações possíveis: Absolute – Valor absoluto do operando Negate – Inverte o sinal do operando Increment – Soma 1 ao operando Decrement – Subtrai 1 do operando Operações lógicas Manipulam bits individuais, e são inspiradas na lógica booleana. Mais conhecidas: NOT (Complemento) AND OR NAND NOR XOR Operações lógicas Operação Descrição Test Testa condição especificada; define flag(s) com base no resultado Compare Faz comparação lógica ou aritmética de dois ou mais operandos; Define flag(s) com base no resultado Set control variables Classe de instruções para definir controles para fins de proteção, tratamento de interrupção, controle de tempo, etc. Shift Desloca o operando para a esquerda/direita, introduzindo constantes na extremidade Rotate Desloca ciclicamente (o bit que seria descartado na shift é alocado na posição que ficaria vazia) o operando para a esquerda/direita de uma extremidade à outra Operações de conversão Mudam o formato, ou operam sobre o formato dos dados. (Ex: decimal → binário) Operação Descrição Translate Traduz valores em uma seção da memória com base em uma tabela de correspondências Convert Converte o conteúdo de uma palavra de uma forma para outra (por exemplo, de decimal agrupado para binário) *Wololo não relacionado Operações de entrada/saída Operação Descrição Input (leitura) Transfere dados da porta de E/S ou dispositivo especificado para o destino (por exemplo, memória principal ou registrador do processador) Output (escrita) Transfere dados da origem especificada para porta de destino ou E/S Start I/O Transfere instruções para o processador de E/S para iniciar operações de E/S Test I/O Transfere instruções destatusde sistema de E/S para destino especificado Operações de transferência de controle Alteram a sequencialidade da execução de instruções, permitindo o uso de desvios condicionais, saltos, loops, chamadas a procedimentos, etc. Operações de transferência de controle Operação Descrição Jump (Desvio) Transferência incondicional; carrega PC com endereço especificado Jump conditional Testa condição especificada; ou carrega PC com endereço especificado ou não faz nada, com base na condição Jump to subroutine Coloca informação de controle do programa atual em local conhecido; salta para endereço especificado Return Substitui conteúdo do PC por outro registrador de local conhecido Execute Busca operando do local especificado e executa como instrução; Não modifica o PC Skip Incrementa o PC para saltar para a próxima instrução Skip conditional Testa condição especificada; ou salta ou não faz nada, com base na condição Halt Termina a execução do programa Wait (hold) Termina a execução do programa; testa condição especificada repetidamente; retoma a execução quando a condição é satisfeita No operation Nenhuma operação é realizada, mas a execução do programa continua Endereçamento Endereçamento Questões importantes: Como é especificado o endereço de um operando? Como são organizados os bits de uma instrução para definir o endereço do operando e a operação dessa instrução? Como especificar uma grande faixa de endereços em diversas localizações, usando campos de endereço relativamente pequenos? Tipos de endereçamento Imediato Direto Indireto Registrador Indireto por registrador Deslocamento Pilha Endereçamento Todas as arquiteturas de computadores oferecem mais que uma forma de endereçamento, ficando o processador responsável por decidir qual está sendo usada na instrução. Para isso são usados “campos de modo” bits extras que dizem qual a forma de endereçamento. Na interpretação do endereço efetivo: Em sistemas sem memória virtual, o endereço efetivo é um endereço da Memória principal ou um registrador Em sistemas com memória virtual, o endereço efetivo é um endereço virtual ou um registrador Endereçamento imediato Forma mais simples de endereçamento, onde o valor do operando está presente na instrução Geralmente usado para definir e utilizar constantes ou definir valores iniciais de variáveis Vantagem: não precisa de nenhuma referência à memória além da carga da instrução em si. Desvantagem: o tamanho do número é limitado ao do campo de endereço, valor pequeno se comparado ao tamanho da palavra. Endereçamento imediato Operando Instrução Endereçamento direto O campo de endereço contém o endereço efetivo do operando. Já foi comum nas primeiras gerações de computadores, mas não é mais utilizado devido ao espaço de endereços limitado. Endereçamento direto A Instrução Memória Operando Endereçamento indireto O campo de endereço não referencia diretamente o operando, mas sim uma palavra na memória que, por sua vez, tem o endereço completo do operando. Vantagem: se o tamanho da palavra é N, temos um espaço de endereçamento de tamanho 2N. Desvantagem: Uso de mais uma referência à memória. Endereçamento indireto Instrução Memória Operando A Endereçamento de registradores Mesmo princípio do endereçamento direto, mas faz referência a um registrador ao invés de um endereço da MP. Vantagens: campo de endereço pequeno; não há necessidade de referências à memória que consumam tempo. Desvantagem: espaço de endereçamento limitado. Os valores que permanecerão nos registradores por mais tempo devem ser definidos de maneira eficiente pelo compilador. Endereçamento de registradores R Instrução Memória Operando Endereçamento indireto por registradores Semelhante ao endereçamento indireto, mas o campo de endereço referencia um local de memória ou um registrador. Mesmas vantagens e desvantagens do endereçamento indireto comum. Endereçamento indireto por registradores Instrução Memória Operando R Endereçamento por deslocamento Combinação de endereçamento direto e endereçamento indireto de registradores. A instrução possui dois campos de endereço, dos quais pelo menos um é explícito. O outro aponta para algum valor que é somado ao primeiro e produz o endereço real. Endereçamento por deslocamento R A Instrução Memória + Registradores Endereçamento de pilha Vetor linear de posições. Lista LIFO. Endereçamento implícito (instruções de máquina não precisam incluir uma referência de memória, e sim operar no topo da pilha. Endereçamento de pilha Instrução Topo da pilha de registradores Implícito Formatos de instruções Tamanho da instrução Deve considerar: Quantidade de instruções e espaço de endereçamento desejada pelos programadores X desperdício no armazenamento e aumento no tráfego das instruções. O tamanho da instrução deve ser múltiplo do tamanho de um caractere (normalmente 8 bits), e do tamanho de números de ponto fixo. Deve ser também relacionado ao tamanho de transferência da memória. Alocação de bits Os bits da instrução devem ser distribuídos de acordo com: Número de modos de endereçamento Número de operandos Registrador vs. Memória Número de conjuntos de registradores Intervalo de endereços Granulidade do endereço (endereçar bytes ou palavras, dependendo do projeto)
Compartilhar