aula 3 - o nível isa - 11ago10 - .:: walderson shimokawa...

20
PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br 1 - Aula 3 - O NÍVEL DA ARQUITETURA DO CONJUNTO DAS INSTRUÇÕES (ISA) (Nível Convencional de Máquina) 1. INTRODUÇÃO Este é o nível responsável por fazer a ligação entra a parte de hardware e a parte de software de um sistema computacional, é um nível convencional de máquina. Figura 1 - Níveis Os computadores foram divididos em diversas camadas para simplificar o desenvolvimento de aplicações e reduzir custos de produção. O entendimento dessas diferentes camadas permite entender o funcionamento interno do computador. Este nível está localizado entre o nível da microarquitetura e o nível de Sistema Operacional e foi desenvolvido antes de qualquer outro nível. Nos primeiros computadores só existiam nível de lógica digital e ISA. Este é o nível mais próximo do hardware em que o usuário pode programar. Conseqüência disso é que programar neste nível não é muito amigável. A solução para isso é trabalhar em camadas. Observe a figura abaixo:

Upload: buidiep

Post on 12-Nov-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

1

- Aula 3 -

O NÍVEL DA ARQUITETURA DO CONJUNTO DAS INSTRUÇÕES (ISA) (Nível Convencional de Máquina)

1. INTRODUÇÃO

Este é o nível responsável por fazer a ligação entra a parte de hardware e a parte de software de um sistema computacional, é um nível convencional de máquina.

Figura 1 - Níveis

Os computadores foram divididos em diversas camadas para simplificar o desenvolvimento

de aplicações e reduzir custos de produção. O entendimento dessas diferentes camadas permite entender o funcionamento interno do computador.

Este nível está localizado entre o nível da microarquitetura e o nível de Sistema Operacional e foi desenvolvido antes de qualquer outro nível. Nos primeiros computadores só existiam nível de lógica digital e ISA.

Este é o nível mais próximo do hardware em que o usuário pode programar. Conseqüência disso é que programar neste nível não é muito amigável. A solução para isso é trabalhar em camadas. Observe a figura abaixo:

Page 2: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

2

Figura 2 - Interface software-hardware

Como pode ser observado, cada nível da organização possui uma linguagem associada. À

medida que a organização evolui em direção ao usuário, a linguagem se torna mais conveniente para ele. Assim, o usuário escreve um programa fonte em linguagem de alto nível ou em linguagem de montagem, mais amigáveis. O programa fonte é traduzido para programa objeto em uma linguagem intermediária (Linguagem de Máquina). Por fim, as instruções de máquina são interpretadas pelo Hardware. O hardware deve ser capaz de executar programas de nível ISA diretamente.

Isto ocorre da mesma forma com que Java converte a codificação de alto nível para Bytecode.

2. METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS

Os programas em diversas linguagens de alto nível são traduzidos para uma mesma linguagem intermediária (nível ISA) para serem então executados em um hardware construído para executar diretamente instruções do nível ISA. Este nível define o aspecto da máquina para um programador da linguagem de máquina.

O nível ISA define, ainda, a interface entre os compiladores e o hardware. Sendo assim, os compiladores devem saber transformar uma linguagem alto nível para uma linguagem do nível ISA. Para que haja este entendimento o nível ISA define como a máquina se apresenta a um programador de linguagem de máquina:

- Quais as instruções disponíveis; - Qual modelo de memória utilizado; - Quais e quantos registrados existem; - Quais os tipos de dados suportados. As instruções do nível ISA são aquelas para as quais o compilador deve gerar

código, que por sua vez gera chamadas adicionais ao Sistema Operacional para gerar um programa executável. Assim sendo, um projetista deve conhecer o conjunto de informações que definem o nível ISA.

Page 3: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

3

Figura 3 - Nível ISA

Em termos práticos a comparação entre as linguagens de cada nível será a seguinte: - Linguagem de alto nível: A=5; - Linguagem de montagem: MOVE A, #5; - Linguagem de máquina: 0011001100000101 A linguagem de montagem e a linguagem de máquina possuem uma relação de uma para

um, ou seja, cada instrução de montagem possui uma instrução de máquina equivalente. A diferença entre elas é que a primeira é uma representação simbólica da segunda, que é puramente numérica;

A linguagem de alto nível utiliza instruções que operam sobre estruturas de dados complexas. A compilação de uma seqüência de instruções em linguagem de alto nível geralmente gera uma seqüência maior de instruções ISA que operam sobre estruturas de dados mais simples e diversas daquelas presentes no programa fonte. 2.1. Modos de Utilização

Este nível provê, no mínimo, dois modos de utilização: - Modo núcleo ou modo kernel. - Modo usuário.

2.1.1. MODO NÚCLEO O Sistema Operacional é executado neste modo. Permite executar qualquer instrução, sem restrições. 2.1.2. MODO USUÁRIO Executa programas do usuário. Possui acesso restrito a algumas instruções importantes e não é possível usar as instruções que manipulam a cache, por exemplo.

Page 4: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

4

2.2. Características de projeto do nível ISA

No nível de linguagem de máquina está definida a interface entre software e hardware: - Deve ser o mais simples possível, para facilitar projeto do hardware. - Deve facilitar a geração de código por parte do compilador. - Deve dar suporte aos níveis superiores, possibilitando o uso de estruturas de dados, tais

como procedimentos, variáveis locais, variáveis globais, constantes, etc., utilizados pelas linguagens de alto nível.

O conjunto de informações que definem o nível ISA são: a. Modelo de Memória da Máquina; b. Quais registradores são implementados; c. Tipos de dados utilizados; d. Quais instruções são disponíveis e o que cada uma executa; e. Fluxo de controle.

Na maioria das arquiteturas, o nível ISA é especificado por meio de um documento

formal, com seções normativas e informativas, visto que esta é uma obrigação das fabricantes de hardware. Este documento deve informar:

a. O modelo de memória adotado; b. Quantos e quais registradores estão implementados; c. O que cada instrução faz;

3. MODELOS DE MEMÓRIA

Antes de o programa ser executado em linguagem de máquina ele é armazenado na

memória principal. A Memória é dividida em células referenciadas por endereços consecutivos, onde cada célula pode ter qualquer tamanho. Atualmente as memórias são formadas por grupos de 4 bytes (32 bits) ou de 8 bytes (64 bits). As palavras de 4 ou 8 bytes podem estar alinhadas ou não alinhadas com as fronteiras naturais da memória, como mostrado na figura abaixo. O acesso a memórias alinhadas são mais eficientes, porém a leitura de 1 endereço arbitrário requer um hardware mais sofisticado e mais caro. Mesmo quando alinhadas, os acessos a memória podem ser não alinhados devido a manutenção de compatibilidade com arquiteturas antigas (máquinas de 8 ou 16 bits).

Isso é importante, pois antes de ser executado o programa em linguagem de máquina é armazenado na memória principal. As CPU's costumam transferir os bytes de uma palavra de uma só vez. Freqüentemente, a arquitetura utiliza apenas endereços múltiplos do tamanho da palavra. Neste caso, dados desalinhados teriam que ser buscados em duas referências à memória e os dados teriam de ser reconstruídos a partir das duas palavras lidas.

Page 5: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

5

Figura 4 - Alinhamento da memória

4. REGISTRADORES

Os registradores são memórias rápidas usadas em execução de instruções dentro do

processador com o objetivo de minimizar os acessos às memórias externas pelo processador. Todos os processadores têm um conjunto de registradores visíveis no nível ISA. Em geral, os registradores visíveis no nível de microarquitetura, não são visíveis para o nível ISA.

O nível ISA disponibiliza um conjunto de registradores visíveis ao programador e podem ser classificados em duas categorias:

a) Registradores de propósito específicos: cumprem funções específicas, como:

- PC (Contador de Programa): ponteiro que armazena o endereço da próxima instrução a ser executada;

- SP (Apontador de Pilha): aponta para o endereço no topo da pilha. - Registrador de Status (PSW - Program Status Word): contém bits necessários à operação

do processador. Exemplo: habilitação de interrupções, modo de execução da máquina, códigos de condição, etc.

Alguns só são usados pelo processador.

b) Registradores de propósito geral: usados para armazenar variáveis locais e resultados intermediários; são, em geral, simétricos e intercambiáveis (usados indistintamente).

É comum que os Sistemas Operacionais e compiladores adotem convenções sobre o uso

dos registradores. Alguns podem ser utilizados para armazenar parâmetros de procedimentos e outros como

registradores transitórios. Sem uma convenção os registradores que armazenam uma variável local pode perder seu conteúdo após um procedimento e o endereço de retorno pode ser perdido.

Page 6: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

6

4.1. Registradores da arquitetura 8086 da Intel Registradores de Uso Geral Segmento Registradores AH/AL AX (EAX) Acumulador CS Segmento de Código BH/BL BX (EBX) Base DS Segmento de Dados CH/CL CX (ECX) Contador SS Segmento da Pilha DH/DL DX (EDX) Dados ES Segmento Extra (FS) 386 e mais novos (Exx) indica registrador 386+ 32 bits (GS) 386 e mais novos Registradores Ponteiro Registradores de Pilha SI (ESI) Índice da Origem SP (ESP) Ponteiro da Pilha DI (EDI) Índice do Destino BP (EBP) Ponteiro da Base IP Ponteiro da Instrução Registradores de Estado |11|10|F|E|D|C|B|A|9|8|7|6|5|4|3|2|1|0| | | | | | | | | | | | | | | | | | `--- CF Flag de Carry | | | | | | | | | | | | | | | | `--- 1

| | | | | | | | | | | | | | | `--- PF Flag de Paridade

| | | | | | | | | | | | | | `--- 0

| | | | | | | | | | | | | `--- AF Flag Auxiliar | | | | | | | | | | | | `--- 0

| | | | | | | | | | | `--- ZF Flag Zero

| | | | | | | | | | `--- SF Flag de Sinal | | | | | | | | | `--- TF Flag Armadilha (Trap Flag para Single Step) | | | | | | | | `--- IF Flag de Interrupção

| | | | | | | `--- DF Flag de Direção | | | | | | `--- OF Flag de Overflow

| | | | `----- IOPL Nível de Privilégio I/O (apenas 286+) | | | `----- NT Flag de Tarefa Aninhada (Nested Task, apenas 286+) | | `----- 0

| `----- RF Flag de Continuação (Resume Flag - apenas 386+) `------ VM Flag de Modo Virtual (apenas 386+) Registradores Especiais (apenas 386+) CR0 Registrador de Controle 0 CR2 Registrador de Controle 2 CR3 Registrador de Controle 3 DR0 Registrador de Debug 0 DR1 Registrador de Debug 1 DR2 Registrador de Debug 2 DR3 Registrador de Debug 3 DR6 Registrador de Debug 6

Page 7: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

7

DR7 Registrador de Debug 7 TR4 Registrador de Teste 4 TR5 Registrador de Teste 5 TR6 Registrador de Teste 6 TR7 Registrador de Teste 7 Registrador Segmento Default Overrides Válidos BP SS DS, ES, CS SI ou DI DS ES, SS, CS DI strings ES Nenhum SI strings DS ES, SS, CS

4.2. Uso dos Registradores É comum que Sistemas Operacionais e compiladores adotem convenções sobre o uso dos registradores. Alguns podem ser utilizados para armazenar parâmetros de procedimentos e outros como registradores transitórios. Sem uma convenção os registradores que armazenam uma variável local pode perder seu conteúdo após um procedimento, dessa forma o endereço de retorno pode ser perdido.

Os registradores de propósito específicos são usados apenas pelo Sistema Operacional e são acessados em modo núcleo. Compiladores e usuários não necessitam saber que eles existem.

Figura 5 - Registradores do Pentium 4

Page 8: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

8

5. TIPOS DE DADOS

Embora o hardware possa ser “tipado” ele não verifica compatibilidade de tipos. Os tipos suportados vão depender da utilização do computador. Neste caso, a disponibilização de registros de precisão dupla pode ser implementado em software se seu uso for raro, não sendo necessária sua implementação em hardware.

Os tipos de dados mais comuns são: - Numéricos: inteiros, ponto-flutuante, BCD - Não numéricos: ASCII e UNICODE, Strings, Booleanos, Ponteiros.

Algumas instruções são específicas para tratar ou ajudar o tratamento desses tipos. No

Pentium II temos os seguintes tipos de dados, que variam desta para outras arquiteturas: - Números inteiros em complemento de dois. - Números inteiros sem sinal. - Números decimais codificados em binário (BCD). - Números em ponto flutuante padrão IEEE 754. - Strings de caracteres ASCII de comprimento conhecido. - Strings de caracteres ASCII de comprimento desconhecido (final da string marcado por

caractere especial).

Tabela: Tipos de dados do Pentium II Tipo 8 Bits 16 Bits 32 Bits 64 Bits

Inteiro com sinal X X X Inteiro sem sinal X X X Inteiro BCD X Ponto flutuante X X

Figura 6 - formato de dados (números Inteiros)

6. FORMATO DAS INSTRUÇÕES

Em geral as instruções pequenas são mais atraentes do que as grandes, pois a banda

passante (número de bits por segundo que a memória é capaz de liberar) da memória tem crescido menos que a velocidade dos processadores. As memórias atuais não têm a capacidade de suprir instruções e operandos na velocidade que o processador pode consumi-las.

Um programa feito com instruções de 16 bits gasta metade do espaço de memória de um programa com instruções de 32 bits. Assim, deve-se considerar, também, a taxa de crescimento do preço de memória e a taxa de crescimento do tamanho dos programas. Por outro lado, a

Page 9: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

9

minimização do tamanho das instruções pode dificultar muito a sua decodificação. O projetista é obrigado a usar um conjunto restrito de códigos para as instruções e o projeto pode não ser flexível para aumento da quantidade de instruções. Importante:

� O tamanho ideal de uma instrução deve considerar, além do preço da memória, o tempo de decodificação e de execução de uma instrução.

� Como os processadores modernos são capazes de executar várias instruções no mesmo ciclo de clock, torna-se imperativo um mecanismo de busca de várias instruções em cada ciclo de clock (memórias cache).

� Quando uma instrução tem endereços, o tamanho do endereço deve ser compatível com o tamanho máximo da memória do computador. No entanto, memórias maiores requerem endereços mais longos, resultando em instruções maiores.

São dois os campos essenciais em uma instrução:

- Código de operação (OP CODE): identifica a operação a ser realizada pelo processador. Deve identificar de forma única cada ação a ser executada pelo processador. Pode ser de tamanho fixo ou variável.

- Endereço: indica a localização do dado (operando) a ser manipulado pela instrução. Em geral indica um endereço de memória ou de um registrador onde está contido o dado, ou onde ele será armazenado. Cada instrução pode possuir 0, 1, 2 ou mais campos de endereço.

Figura 6 – Formato Típico de Instrução

Na prática os formatos de instrução são bem mais complexos. O conjunto de instruções pode possuir formatos diferentes e o comprimento das instruções também pode ser variável, geralmente múltiplo ou submúltiplo do tamanho da palavra.

- Instruções menores que uma palavra; - Instruções maiores que uma palavra; - Instruções do tamanho de uma palavra.

Page 10: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

10

Figura 7 – Relação entre instrução e palavra

Uma instrução com código de operação de 4-bits e três campos de endereços de 4-bits seria representada conforme figura abaixo.

Figura 8 - Código de Operação expandido

Figura 9 - Código de operação expandido

Os campos xxxx, yyyy, and zzzz correspondem aos 4-bits de endereços.

7. ENDEREÇAMENTO

Em geral, as instruções utilizam pequena quantidade de bits para o código de operação, grande quantidade para especificar endereços dos dados, como por exemplo: instrução de adição:

- Precisa dos endereços dos dois valores a serem somados. - Precisa do endereço do local onde o valor deve ser armazenado.

Page 11: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

11

- Supondo que os endereços de memória sejam de 32 bits: são necessários 96 bits de endereços.

- Os endereços dos operandos na memória principal devem ser determinados em tempo de compilação. 7.1. Modos de Endereçamento 7.1.1. ENDEREÇAMENTO IMEDIATO

Parte da instrução contém o operando, não requerendo referência extra à memória. É

limitado pelo tamanho do campo.

Exemplo: Instrução imediata para carregar 4 no registro 1:

MOV R1 4

7.1.2. ENDEREÇAMENTO DIRETO

Parte da instrução contém o endereço do operando e a instrução acessa sempre a mesma posição na memória, podendo ser usado para acessar variáveis globais. O conteúdo da memória pode ser alterado, mas não o endereço. Exemplo: Soma o valor 9 ao no endereço de memória (4).

ADD (4) 9

7.1.3. ENDEREÇAMENTO POR REGISTRADOR

Similar ao endereçamento direto, mas utiliza um registrador ao invés de uma posição de memória. Muito útil quando necessita−se diversas vezes da mesma variável. A vantagem é que o acesso ao registrador é mais rápido, contudo o número de registradores é limitado.

MOV AL BH

Page 12: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

12

7.1.4. ENDEREÇAMENTO INDIRETO POR REGISTRADOR

O endereço de uma variável é armazenado em um registrador. Registrador funciona como um ponteiro. Usa o conceito de memória de rascunho, onde está armazenado o endereço do dado na memória principal. O endereço intermediário é que é chamado de ponteiro. Quando esse se encontra em um registrador é possível acessar um endereço de memória através de um endereço de registrador.

MOV AL [BX]

7.1.5. ENDEREÇAMENTO INDEXADO

A palavra da memória é referenciada pela soma de dois registradores. Endereço fornecido por registrador_base + registrador (+offset). Permite acessar palavras da memória a partir de um deslocamento conhecido (índice), a partir de um determinado endereço base (offset).

7.1.6. ENDEREÇAMENTO POR PILHA

O objetivo é fazer com que as instruções fiquem tão curtas quanto possível. Instruções baseadas em pilha não precisam usar “endereços” e as operações são realizadas sobre os operandos que estão no topo da pilha. Pilhas são usadas para suporte a procedimentos, cálculo de expressões, etc.

Utiliza um registrador Ponteiro de Pilha (SP - Stack Pointer) que aponta para o topo da pilha (último item armazenado). As instruções para gerenciar a pilha são:

PUSH X Empilha X SP := SP+1; (SP) := X;

POP Y Desempilha em Y Y := (SP); SP := SP -1;

Algumas instruções de pilha não necessitam especificar endereço. Os dados são buscados a

partir de SP.

Page 13: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

13

Figura 10 - Funcionamento da pilha

Exemplo:

Adição de dois valores usando endereçamento via estrutura de Pilha: - Dois valores são desempilhados, - Os valores são somados. - O resultado é empilhado.

8. TIPOS DE INSTRUÇÕES As instruções representam a principal característica do nível ISA. Sempre existem instruções aritméticas, booleanas, LOAD, STORE, MOVE, etc. As instruções do nível ISA podem ser agrupadas segundo suas funcionalidades:

8.1. Instruções de Movimento de Dados

Compreende, na verdade, uma duplicação de dados. Cria-se um novo objeto, com a

mesma configuração de bits do objeto original. O conteúdo original da memória não é apagado (pelo menos de imediato). É preciso especificar o endereço de origem e destino.

8.2. Operações Diádicas

Operações diádicas são aquelas que combinam dois operandos para produzir um

resultado. São exemplos operações aritméticas (adição, subtração, multiplicação e divisão), funções

booleanas (AND, OR, NOR, NAND, ...)

Page 14: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

14

8.3. Operações Monádicas

Operações monádicas são aquelas que utilizam apenas um operando e produzem um único resultado, como por exemplo o NOT lógico, negação, deslocamento, rotação e incremento.

Instruções de movimentação de dados

MOV DST, SRC Move SRC para DST PUSH SRC Coloca SRC na pilha POP DST Tira valor da pilha e armazena em DST XCHG DS1, DS2 Troca DS1 com DS2

Instruções aritméticas

ADD DST, SRC Soma DST (destino) com SRC (fonte) SUB DST, SRC Subtrai DST de SRC MUL SRC Multiplica o valor de EAX por SRC INC DST Soma uma unidade a DST DEC DST Subtrai uma unidade de DST NEG DST Nega DST (subtrai seu valor de 0)

Instruções booleanas AND DST, SRC AND booleano entre SRC e DST OR DST, SRC OR booleano entre SRC e DST XOR DST, SRC EXCLUSIVE OR booleano entre SRC e DST NOT DST Substitui DST por seu complemento a 1

Instruções de deslocamento/rotação

SAL/ DST, #N SAR Desloca DST para esquerda/direita #N bits ROL/ DST, #N ROR Rotaciona DST para esquerda/direita #N bits

8.4. Exemplo de Instruções de Transferência de Dados

Observe na figura abaixo os registradores AC e MQ. Eles são usados como operando em toda operação aritmética ou lógica executada.

Page 15: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

15

Figura 11 - Organização IAS

Tabela: Instruções de Transferências de Dados: opcode mnemônico Significado

00001010 LOAD MQ AC ← MQ 00001001 LOAD MQ,M(X) MQ ← mem(X) 00100001 STOR M(X) mem(X) ← AC 00000001 LOAD M(X) AC ← mem(X) 00000010 LOAD – M(X) AC ← –mem(X) 00000011 LOAD |M(X)| AC ← abs(mem(X)) 00000100 LOAD –|M(X)| AC ← -abs(mem(X))

Tabela: Instruções de Desvio Incondicional:

opcode mnemônico Significado 00001101 JUMP M(X,0:19) prox. instr.: metade esq. de mem(X) 00001110 JUMP M(X,20:39) prox. instr.: metade dir. de mem(X)

Tabela: Instruções de Desvio Condicional:

opcode mnemônico Significado

00001111 JUMP +(X,0:19) se AC >= 0, prox. instr.: metade esq. de mem(X)

00010000 JUMP +M(X,20:39) se AC >= 0, prox. instr.: metade dir. de mem(X)

Page 16: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

16

Tabela: Instruções Aritméticas: opcode mnemônico Significado

00000101 ADD M(X) AC ← AC + mem(X) 00000111 ADD |M(X)| AC ← AC + |mem(X)| 00000110 SUB M(X) AC ← AC – mem(X) 00001000 SUB |M(X)| AC ← AC – |mem(X)| 00001011 MUL M(X) AC:MQ ← MQ * mem(X) 00001100 DIV M(X) MQ:AC ← AC / mem(X) 00010100 LSH AC ← AC * 2 (shift esq.) 00010101 RSH AC ← AC / 2 (shift dir.)

Tabela: Instruções de Alteração de Endereço:

opcode mnemônico Significado

00010010 STOR M(X,8:19) Subst. o campo de endereço a esq. De mem(X) pelos 12 bits mais a dir. de AC

00010011 STOR M(X,28:39) subst. o campo de endereço a dir. de mem(X) pelos 12 bits mais a esq. de AC

8.5. Comparações e Desvios Condicionais

Os programas precisam ter a capacidade de testar seus dados e alterar a seqüência de execução de suas instruções com base nos resultados desses testes. Instruções em linguagem de máquina geralmente testam algum bit da máquina e desviam para um label (rótulo) de acordo com o valor do bit testado.

Figura 12 - Uso de Instruções de Comparação e Desvio

CMP SRC1, SRC2 Liga os flags com base em SRC1 e SRC2 JMP ADDR Desvia para ADDR Jxx ADDR Desvia condicionalmente para ADDR

Page 17: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

17

8.6. Instruções de Chamadas a Procedimento

Um procedimento (sub-rotina, método ou função) pode ser definido como um grupo de instruções que realizam uma determinada tarefa e que podem ser chamadas (invocadas) a partir de diversas posições de um programa (inclusive de outro procedimento ou do mesmo procedimento - recursão).

Quando um procedimento é chamado através de instrução de chamada de procedimento (CALL), o programa é desviado para a primeira instrução do procedimento. Quando o procedimento termina sua tarefa o programa é desviado para a instrução imediatamente seguinte a instrução de sua chamada através de instrução de retorno de procedimento (RET). O endereço de retorno pode ser armazenado numa pilha, permitindo que um procedimento chame outro procedimento. Se o procedimento é terminado o endereço de retorno é desempilhado e colocado no PC.

CALL ADDR Chama o procedimento em ADDR RET Retorno de procedimento

8.7. Controle de Loop

Todos os esquemas de instruções para implementar um controle de loop baseiam-se em um contador que cresce ou decresce de uma constante, sempre que se completar uma passagem pelo loop.

É possível dois tipos de implementação: com teste no final ou com teste no inicio do laço.

8.8. Entrada/Saída (E/S)

Atualmente existem 3 esquemas diferentes para a realização de operações de E/S em computadores pessoais:

Page 18: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

18

a. E/S programada com espera ocupada � Mais simples de todos os métodos � Comumente implementada nos microprocessadores de baixa performance (sistemas

embarcados ou em sistemas em tempo real) � Esses processadores tem, em geral, uma única instrução de saída. � Na operação de E/S, um único caractere é transferido entre um registrador fixo do

processador e o dispositivo de E/S selecionado na instrução. � Existe um tempo de espera para que um bit de controle avise que um caractere pode ser

lido ou escrito de, ou para, um dispositivo de E/S. Essa metodologia é conhecida como espera ocupada1.

� Instruções IN e OUT são providas para ler e escrever nos registradores

b. E/S dirigida por interrupção � Neste método o processador apenas inicia uma operação de E/S com um dispositivo e sai

do processo, levando o dispositivo a interrompê-lo ao término da operação. � A desvantagem deste método é que existe a necessidade de se gerar uma interrupção

para cada caractere transmitido, pois o processamento de interrupções é caro.

c. E/S com acesso direto a memória (DMA) � Neste esquema agrega-se um componente ao processo de E/S programada, um chip

controlador conhecido como DMA (Direct Memory Access - Acesso Direto à Memória). Este dispositivo tem acesso direto ao barramento.

� O DMA recebe informações sobre o um endereço de memória, a quantidade de bytes a ser transferido, o número do dispositivo a ser acessado e a direção (leitura ou escrita) dos dados.

� Com essas informações o DMA é capaz de transferir dados entre a memória e o dispositivo de E/S, via barramento, sem intervenção do processador. Assim o processador fica livre para realizar outras operações.

8.9. Fluxo de Controle

Entende-se por fluxo de controle a seqüência na qual as instruções são dinamicamente executadas.

O fluxo de controle normal é alterado por desvios, chamadas de procedimentos, co-rotinas, armadilhas (traps) e interrupções.

8.9.1. FLUXO SEQÜENCIAL DE CONTROLE E DESVIOS

A execução da maioria das instruções de uma máquina não altera o fluxo de controle. Em geral, o processador vai à memória para buscar a instrução armazenada no endereço seguinte àquela que acabou de ser executada.

1 Espera Ocupada: mantém o processador ocioso enquanto realiza operação de entrada ou saída.

Page 19: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

19

8.9.2. PROCEDIMENTOS Uma chamada a procedimento altera o fluxo de controle exatamente do mesmo modo

que um desvio. Mas, o procedimento, ao contrário do desvio, quando termina sua tarefa retorna o controle para o comando ou a instrução seguinte à instrução de chamada. Mais ainda, o corpo de um programa pode ser visualizado como uma instrução de nível mais alto. Um tipo especial de procedimento é o procedimento recursivo, um procedimento que chama a si próprio, de forma direta ou indireta, via uma cadeia de chamadas a outros procedimentos. Para implementar procedimentos recursivos precisamos de uma pilha para armazenar parâmetros e variáveis locais para cada chamada. Cada vez que o procedimento é chamado, um novo quadro de pilha é alocado para o procedimento, e esse quadro é colocado no topo da pilha.

8.9.3. CO-ROTINAS

Considere um procedimento A, que chama outro procedimento B, como mostra a Figura abaixo. Esta figura ilustra o funcionamento de um procedimento A que chama B várias vezes. Neste caso, sempre que B é chamado ele é executado do início ao fim e depois o controle é retornado ao procedimento A (na instrução seguinte à chamada de B).

Figura 13 - Co-rotinas

Quando um procedimento é chamado, sua execução sempre começa por sua primeira

instrução.

Page 20: Aula 3 - O Nível ISA - 11Ago10 - .:: Walderson Shimokawa ::.walderson.com/2012-2/plc/aula3-plc-nisa.pdf · METODOLOGIA EMPREGADA NOS SISTEMAS COMPUTACIONAIS Os programas em diversas

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

20

8.9.4. TRAPS Um trap é uma espécie de chamada a procedimento automático, iniciado sempre que

ocorrer alguma condição específica causada pela execução de um programa. O Overflow é um bom exemplo de uma dessas condições. Quando há ocorrência de um trap o fluxo de controle é alterado para um endereço fixo de memória em vez de para a instrução seguinte. Nesse endereço fixo há uma instrução de desvio para um procedimento, conhecido como procedimento de tratamento do trap, que executa algumas ações convenientes, como, por exemplo, a impressão de uma mensagem de erro.

Quando ocorre uma trap, o fluxo de controle é alterado para uma posição fixa da memória, que contém uma chamada para uma rotina de tratamento de trap. É importante saber que as traps são causadas pelo próprio programa.

As traps são ditas síncronas, já que, na medida em que toda vez que um programa é executado com uma mesma entrada, a trap é gerada sempre no mesmo ponto. 8.9.5. INTERRUPÇÕES

As interrupções são modificações no fluxo de controle de um programa causadas por um evento externo ao processamento do programa, usualmente eventos relacionados a operações de E/S. Como nos traps, as interrupções também param o processamento do programa atual e transferem o controle para uma rotina de tratamento de interrupção, que executa ações apropriadas. A diferença essencial entre um trap e uma interrupção é que os traps são síncronos e as interrupções assíncronas. Os traps acontecem sincronamente porque resultam da execução do próprio programa enquanto que as interrupções podem ser causadas por agentes externos (Exemplo: o apertar de uma tecla do teclado). 8.10. Instruções mais comuns na família de processadores Intel

Tabela: Instruções mais comuns na família Intel x86

Instrução Frequência para Inteiros

Load 22% Desvio condicional 20% Comparação 16% Store 12% Add 8% And 6% Sub 5% trasf. registrador-registrador 4% call (chamada de procedimento) 1% return (retorno de procedimento) 1% Total 96%