Prévia do material em texto
SISTEMAS DIGITAIS Ruahn Fuser Microprocessador comercial: funcionamento e conjunto de instruções Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: Identificar a arquitetura básica de um microprocessador Intel. Descrever a operação de barramento multiplexado do microproces- sador Intel. Relacionar os grupos de instruções do microprocessador Intel. Introdução Um microprocessador é caracterizado por um sistema digital formado por um conjunto de transistores, subdividido em alguns blocos deno- minados recursos básicos, tais como: registradores, unidade lógica e aritmética (ULA) e contadores para controle de endereços. Capaz de realizar instruções por meio de uma notação legível de código de má- quina, esse sistema pode ser classificado como um chip programável. Ele aceita algoritmos em diferentes linguagens de programação por meio de compiladores específicos. Na década de 1970, foi criada uma calculadora a partir do chip Intel 4004 de 4 bits, primeiro sistema eletrônico a utilizar um microprocessador comercial. O Intel 4004 foi construído com 2.300 transistores, com um barramento de 4 bits e capacidade para endereçar 640 bytes de memória. Ele trabalhava a 740 kHz e era capaz de realizar até 92 mil instruções por segundo. Atualmente, os microprocessadores estão presentes na maioria dos dispositivos eletrônicos, como televisores, notebooks, videogames, sistemas automotivos e controladores para automação industrial. U N I D A D E 4 C08_Sistemas_Digitais.indd 1 23/08/2018 15:31:15 Neste capítulo, você vai estudar o dispositivo Intel 8086, que é uma evolução do Intel 4004 e vem sendo muito utilizado em sistemas ele- trônicos. Para isso, você vai ver alguns detalhes do dispositivo, como arquitetura básica e recursos disponíveis, barramentos de fluxo de in- formações e microinstruções. Arquitetura básica do Intel 8086 Também conhecida como arquitetura x86, a organização dos processadores da família 8086 foi baseada na arquitetura CISC (Complex Instruction Set Com- puter ou computador com conjunto complexo de instruções). A organização do hardware que realiza os processos pode ser subdividida em duas partes bem defi nidas: EU (Execution Unit ou unidade de execução) e BIU (BUS Interface Unit ou unidade de interface de barramento). Unidade de execução Essa unidade é responsável por processar as instruções. Nela estão presentes os recursos para decodifi cação e execução das tarefas. Ela é composta por registradores de dados ou de propósito geral, ponteiros, registradores de estados ou fl ags, barramento de dados de 16 bits e unidade lógica e aritmética. Registradores de dados ou propósito geral A unidade de execução possui quatro registradores de 16 bits que podem ser utilizados nas operações lógicas e aritméticas. Tais registradores podem ser utilizados com 16 ou 8 bits, pois são subdivididos da seguinte forma. AX: conhecido como “acumulador”, é utilizado em operações aritmé- ticas e lógicas, em instruções de entrada/saída, conversões, etc. Pode ser dividido em dois registradores de 8 bits com acesso independente: AH, o byte mais significativo, e AL, o byte menos significativo. BX: conhecido como “base”, é utilizado para referenciar posições de memória, gerenciamento de tabelas, etc. Pode ser dividido em dois registradores de 8 bits com acesso independente: BH, o byte mais significativo, e BL, o byte menos significativo. CX: conhecido como “contador”, é utilizado como índice em operações de repetição, podendo ser incrementado ou decrementado. Pode ser Microprocessador comercial: funcionamento e conjunto de instruções2 C08_Sistemas_Digitais.indd 2 23/08/2018 15:31:15 dividido em dois registradores de 8 bits com acesso independente: CH, o byte mais significativo, e CL, o byte menos significativo. O CL pode ser visto como um contador de 8 bits. DX: conhecido como “dados”, é utilizado em operações aritméticas e lógicas, em instruções de entrada/saída, conversões, etc. Pode ser dividido em dois registradores de 8 bits com entrada independente: DH, o byte mais significativo, e DL, o byte menos significativo. Em alguns casos, o DX é utilizado como uma extensão do AX para armazenar valores de 32 bits. Por exemplo, no caso de instrução de multiplicações, é possível armazenar um resultado de 32 bits pode meio de AX concatenado com DX. Outro exemplo é o caso de divisão em que o DX é utilizado para armazenar o resto da operação. Além disso, o DX também pode ser utilizado para especificar o endereço de portas de entrada/saída. Ponteiros A unidade de execução possui quatro registradores de 16 bits que são utilizados como ponteiros para indicar algum local de uma memória específi ca ou o acesso aos dados no segmento da pilha. Veja a seguir. SP (Stack Pointer): é o apontador de pilha. É o índice que aponta para o topo da pilha utilizada para armazenar endereços da memória de programa quando o código é desviado a partir de uma interrupção ou uma chamada de função. BP (Base Pointer): é o apontador de base. É utilizado para endereça- mento de memória, indexando o endereço inicial de uma tabela que será manipulada pela CPU. Geralmente é utilizado em conjunto com a SS e permite acesso de dados dentro do segmento de pilha. SC (Source Index): é o índice fonte. É utilizado em conjunto com o DS para realizar endereçamento indireto, ou seja, pode apontar para a origem de dados que se deseja movimentar. DI (Destination Index): é o índice destino. É utilizado em conjunto com o ES para realizar endereçamento indireto, ou seja, pode apontar para o destino dos dados que serão movimentados. 3Microprocessador comercial: funcionamento e conjunto de instruções C08_Sistemas_Digitais.indd 3 23/08/2018 15:31:15 A utilização dos ponteiros SI e DI em conjunto facilita a movimentação de dados sequenciados entre posições fonte, indicadas por SI, e destino, indicadas por DI. Os ponteiros são muito utilizados em operações com strings. Registrador de estado ou flags Também conhecido como PSW (Program Status Word), possui um registrador de 16 bits, utilizado como bits individuais que indicam propriedades do sistema. Veja a organização do registrador de estado na Figura 1. Figura 1. Organização do registrador de estado. Fonte: Adaptada de Carvalho (2000, documento on-line). A seguir, você pode ver o significado das flags. X: não utilizado e geralmente inicializado como zero. OF (Overflow Flag): é o erro de transbordamento. Indica um estouro na capacidade de um registrador: ■ 1 = houve erro de transbordamento; ■ 0 = não houve erro de transbordamento. DF (Direction Flag): é a flag de direção. Indica a direção em que as operações com os registradores SI e DI estão sendo realizadas: ■ 1 = os registradores SI e DI estão sendo decrementados; ■ 0 = os registradores SI e DI estão sendo incrementados. IF (Interrupt Flag): é a flag de interrupção. Indica se as interrupções estão habilitadas: ■ 1 = interrupções habilitadas; ■ 0 = interrupções desabilitadas. TG (Trap Flag): é a armadilha. Utilizada para depuração de programas, colocando o chip em modo de debug: ■ 1 = indica que após a próxima instrução ocorrerá uma interrupção. A própria interrupção limpa essa flag; ■ 0 = caso contrário. Microprocessador comercial: funcionamento e conjunto de instruções4 C08_Sistemas_Digitais.indd 4 23/08/2018 15:31:15 SG (Sign Flag): é a flag de sinal. Indica se o resultado de uma operação é positivo ou negativo em termos de aritmética de complemento de 2 (a operação dessa flag é dependente de OF): ■ 1 = resultado negativo; ■ 0 = resultado positivo. ZF (Zero Flag): é a flag de zero. Indica se o resultado da última operação lógica ou aritmética é igual a zero: ■ 1 = igual a zero; ■ 0 = diferente de zero. AF (Auxiliar Carry Flag): é a flag de carry auxiliar. Utilizada em instruções com códigos BCD: ■ 1 = quando ocorre umcarry ou “vai um” do bit 3 para o bit 4 em uma operação de soma, ou o não empréstimo do bit 4 para o bit 3 em uma subtração; ■ 0 = caso contrário. PF (Parity Flag): é a flag de paridade. Indica um número par de números 1 no byte inferior do resultado de alguma operação lógica ou aritmética: ■ 1 = número par; ■ 0 = número ímpar. CF (Carry Flag): é a flag de “vai um”. Indica que em uma operação de soma ou subtração sobrou um bit. Na soma, o bit é definido como “vai um”; na subtração, como “empréstimo”. Também é utilizada em algumas instruções de rotação e deslocamento, quando o último bit do registrador possui nível lógico 1: ■ 1 = nível lógico do bit sobrando deve ser tratado; ■ 0 = não houve necessidade de tratamento na operação. Unidade de interface de barramento Essa unidade faz a intermediação entre a EU e os barramentos de dados e de endereços do meio externo. Além disso, é capaz de controlar a transmissão de sinais de endereços, dados e controle, gerenciando a sequência de busca e execução de instruções. Para isso, é composta por cinco registradores de 16 bits, uma fi la de armazenamento de até 4 bytes de instruções e um sistema que faz o endereçamento de 20 bits a partir de registradores de 16 bits. Você pode conhecer melhor tais recursos a seguir. 5Microprocessador comercial: funcionamento e conjunto de instruções C08_Sistemas_Digitais.indd 5 23/08/2018 15:31:15 Registradores de segmentos São registradores de 16 bits utilizados para endereçamento de memória, tanto para instruções quanto para dados e pilhas. Os segmentos são blocos de me- mória endereçáveis de 64 Kbytes. Durante a execução de um procedimento, há ao menos quatro segmentos ativos, descritos a seguir. CS (Code Segment): é o segmento de código. Endereça o segmento onde estão as instruções que serão executadas pela CPU. SS (Stack Segment): é o segmento de pilha. Endereça o segmento reservado à pilha para gerenciamento de chamadas de sistema. DS (Data Segment): é o segmento de dados. Endereça o segmento onde estão os dados que são manipulados pela CPU. ES (Extra Segment): é o segmento de dados extras. Endereça um seg- mento extra para dados. É geralmente utilizado para manipulação de tabelas e strings. Ponteiros Essa unidade possui um registrador de 16 bits dedicado a trabalhar junto ao program counter. IP (Instruction Pointer): é o ponteiro de instruções. É utilizado em conjunto com o CS para saber o endereço da próxima instrução a ser executada. É automaticamente incrementado em função do tamanho em bytes da instrução executada, de modo a apontar sempre para a instrução seguinte. Fila de instruções Essa unidade possui uma fi la com seis registradores de 16 bits para armazenar instruções que serão executadas pela CPU. É esse recurso que permite o pipeline durante a execução do programa. Unidade de geração de endereços É uma unidade que transforma os endereços contidos nos registradores de segmentos de 16 bits em valores de 20 bits. Esse circuito faz a interface entre os circuitos internos e externos do sistema. Microprocessador comercial: funcionamento e conjunto de instruções6 C08_Sistemas_Digitais.indd 6 23/08/2018 15:31:16 Dinâmica do barramento multiplexado A BIU realiza a interface entre os sinais de dados, endereços e controle in- ternos e os periféricos externos ao componente. Porém, para trabalhar com uma quantidade de pinos reduzida, o Intel 8086 possui um barramento que utiliza os mesmos pinos para endereço e dados. Para entender melhor como funciona o barramento multiplexado, você deve primeiro observar quais são os pinos disponíveis para essa função. Na Figura 2, a seguir, você pode ver a disposição física dos pinos. Figura 2. Pinos do Intel 8086. Fonte: Adaptada de Intel (1990, documento on-line). Pinos de dados e endereços do barramento multiplexado Os pinos de dados e endereços são compartilhados para enviar e receber informações conforme a confi guração do pino ALE. 7Microprocessador comercial: funcionamento e conjunto de instruções C08_Sistemas_Digitais.indd 7 23/08/2018 15:31:16 AD15 – AD0: esses pinos são o barramento multiplexado propriamente dito. Eles integram os 16 bits que transportam os dados e os endereços. A19 – A16: esses pinos transportam os 4 bits restantes do endereço. Porém, eles têm uma segunda função: indicar o status em algumas operações. : transporta um sinal que indica que os dados contidos nos 8 bits mais significativos do barramento são dados válidos. Pino Esse pino tem a importante função de defi nir o modo de operação do proces- sador. Existem dois modos de operação, como você pode ver a seguir. Modo mínimo: o processador gera todos os sinais de controle para o barramento multiplexado (HLDA, WR, M/IO, DT/R, DEN, ALE e INTA), além de possuir uma entrada de controle denominada HOLD. Você vai conhecer melhor todos esses sinais de controle adiante. Modo máximo: o processador não gera os sinais de controle, que devem ser gerados por outro processador que trabalha em conjunto. Ou seja, esse modo é utilizado para sistemas que contam com coprocessadores. Pinos de controle Os pinos de controle servem para gerenciar as operações realizadas por dis- positivos externos. Cada pino possui funções específi cas, descritas a seguir. QS0 (ALE) No modo mínimo, assume o address latch enable (endereço habilitado). Já no modo máximo, representa queue status 0 (estado da fi la 0). Modo mínimo: ■ ALE = 1 — indica que o barramento multiplexado está sendo usado para transportar um endereço; ■ ALE = 0 — caso contrário. Modo máximo: ■ QS0 — é utilizado junto ao QS1 para indicar o estado da fila em bytes na entrada da EU. Microprocessador comercial: funcionamento e conjunto de instruções8 C08_Sistemas_Digitais.indd 8 23/08/2018 15:31:16 No modo mínimo, assume o data transmit/receive (transmissão e recepção de dados). Já no modo máximo, representa a linha de status S1. Modo mínimo: ■ = 1 — indica que o processador está transmitindo dados; ■ = 0 — indica que o processador está recebendo dados. Modo máximo: ■ — é utilizado junto ao e ao para indicar qual operação está sendo executada. No modo mínimo, assume o write (escrita). Já no modo máximo, representa locked (trancado). Modo mínimo: ■ = 1 — caso contrário; ■ = 0 — indica que o processador está executando uma operação de escrita. Modo máximo: ■ = 1 — caso contrário; ■ = 0 — indica que outros processadores não devem tentar tomar o barramento de sistema pois o 8086 não atenderá a uma solicitação HOLD. No modo mínimo, assume o memory/InputOutput (memória/EntradaSaída). Já no modo máximo, representa a linha de status S2. Modo mínimo: ■ = 1 — indica que as linhas de endereço se referem ao espaço de endereçamento de memória; ■ = 0 — indica que as linhas de endereço se referem ao espaço de endereçamento de I/O. Modo máximo: 9Microprocessador comercial: funcionamento e conjunto de instruções C08_Sistemas_Digitais.indd 9 23/08/2018 15:31:16 ■ — é utilizado junto ao e ao para indicar qual operação está sendo executada. No modo mínimo, assume o data enable (dados habilitados). Já no modo máximo, representa a linha de status S0. Modo mínimo: ■ — indica que o barramento está sendo utilizado para transportar dados ou status. Modo máximo: ■ — é utilizado junto ao e ao para indicar qual operação está sendo executada. RD Conhecido como read (leitura), indica que o processador está executando uma operação de leitura. READY Em português, ready signifi ca “pronto”. Indica que o processador já pode concluir uma operação de leitura ou escrita. Pode ser usado para solicitar à CPU um tempo de espera para executar toda a operação. Os barramentos são normalmente utilizados para interconectar vários periféricos, oferecendo assim uma carga considerável. As CPUs são projetadas para fornecer, pelo barramento, um tipo de sinal específico,não possuindo alta capacidade de corrente. Logo, para suportar as intercomunicações entre dispositivos, são necessários ampli- ficadores de correntes intermediários denominados drivers, que fornecem a corrente necessária para a CPU entregar seus sinais ao barramento, e receivers, utilizados para retirar os sinais do barramento. Para linhas bidirecionais, são utilizados um driver e um receiver, conjunto denominado transceiver. Microprocessador comercial: funcionamento e conjunto de instruções10 C08_Sistemas_Digitais.indd 10 23/08/2018 15:31:16 Pinos de arbitragem do barramento Os pinos de controle servem para gerenciar as operações realizadas por dis- positivos externos. Cada pino possui funções específi cas, como você pode ver a seguir. RQ0/GT0 (HOLD) No modo mínimo, assume o hold (manter) e permite que um periférico controle o barramento. Quando habilitado, todos os sinais de controle são confi gurados como alta impedância. Já no modo máximo, representa request/grant (solicitar/ conceder) e funciona de forma bidirecional, com a função de conceder ou solicitar o controle do barramento. RQ1/GT1 (HLDA) No modo mínimo, apresenta a resposta para a solicitação de HOLD. Já no modo máximo, representa request/grant (solicitar/conceder) e funciona de forma bidirecional, com a função de conceder ou solicitar o controle do barramento. Além dos pinos de controle do barramento multiplexado, existem alguns poucos que não foram devidamente apre- sentados nesta seção. O datasheet do microprocessador Intel 8086 apresenta todos os elementos descritos de forma sucinta e prática. Vale a pena conferir no link ou código a seguir. https://goo.gl/Nkga2c Microinstruções assembly A microinstrução do Intel 8086 é baseada em arquitetura CISC, como você já viu. Dessa forma, as microinstruções podem assumir tamanhos variados. A seguir, você vai conhecer alguns detalhes da programação em linguagem de montagem do 8086. 11Microprocessador comercial: funcionamento e conjunto de instruções C08_Sistemas_Digitais.indd 11 23/08/2018 15:31:17 Sintaxe assembly Alguns pontos são importantes para um melhor entendimento durante a exe- cução de programas em linguagem assembly. Veja: A linguagem assembly não é case-sensitive, ou seja, não diferencia letra maiúscula de letra minúscula. Uma sugestão para os códigos é usar letra maiúscula para o código e letra minúscula para os comentários. As instruções, que serão definidas a seguir, com seus respectivos mne- mônicos e operandos, são convertidas por meio de seus opcodes (códigos de operações) para linguagem de máquina. As diretivas são auxiliares de organização. São utilizadas pelo com- pilador e auxiliam na montagem, sempre realizando alguma tarefa específica, tal como: alocar espaços de memória, criar sub-rotinas, definir valores fixos, etc. Uma linha de comentário é iniciada com “;” e é utilizada para docu- mentação durante um código. É importante inserir comentários sucintos que auxiliem, posteriormente, na manutenção dos algoritmos. A declaração de uma instrução pode assumir diferentes formatos e, as- sumindo diferentes formatos, pode ser utilizada com objetivos distintos. O formato base para a declaração é: [LABEL:] [MNEMÔNICO] [OPERANDOS] [; comentário] A label (rótulo) é utilizada para a organização do código, e o montador a traduzirá posteriormente para um endereço de memória de programa. Os operandos podem assumir zero, um ou dois valores distintos, conforme o mnemônico utilizado. É esse detalhe que torna o assembly com tamanhos de opcodes variados. NOP ; sem operandos: não realiza nada. DEC DX ; um operando: decrementa 1 de DX. SUB DX, 8d ; dois operandos: subtrai 8 de DX e guarda o resultado em DX. Microprocessador comercial: funcionamento e conjunto de instruções12 C08_Sistemas_Digitais.indd 12 23/08/2018 15:31:17 Já os mnemônicos são os códigos dos operadores, ou as microinstruções possíveis contidas no papel de dados do microprocessador. Tal linguagem de montagem está subdividida, no Intel 8086, em seis grupos principais: transferência de dados, funções aritméticas, funções lógicas, manipulação de strings, controle de fluxo e controle de processador. Você pode conhecer melhor os grupos a seguir. Transferência de dados Utilizada para a manipulação de dados durante um procedimento, como mover, desempilhar, carregar, etc. Estrutura: MOV DESTINO, FONTE MOV D0, D1 ; move o valor contido na variável D1 para a variável D0. MOV DX, Ah ; move o valor decimal 10 para o registrador DX. Funções aritméticas São responsáveis por realizar a matemática com registradores. Usualmente, em mi- croprocessadores estão disponíveis operações matemáticas com números binários. Estrutura: ADD DESTINO, FONTE ADD D0, D1 ; soma o valor contido na variável D1 à variável D0 e guarda o resultado ; em D0. ADD DX, Fh ; soma o valor decimal 15 ao registrador DX e guarda em DX. 13Microprocessador comercial: funcionamento e conjunto de instruções C08_Sistemas_Digitais.indd 13 23/08/2018 15:31:17 Funções lógicas São operações lógicas realizadas entre registradores. É importante tomar cui- dado, pois tais operações são realizadas bit a bit com os valores de registradores. Estrutura: NOT REGISTRADOR NOT D0 ; inverte o valor contido no registrador D0. Manipulação de strings São instruções dedicadas à manipulação de strings. Essas instruções são interligadas diretamente com os registradores de segmentos apresentados no item BIU. Estrutura: MOVS MOVSB ; move um byte do segmento [DS:SI] para o segmento [ES:DI]. MOVSW ; move uma word do segmento [DS:SI] para o segmento [ES:DI]. Microprocessador comercial: funcionamento e conjunto de instruções14 C08_Sistemas_Digitais.indd 14 23/08/2018 15:31:17 Controle de fluxo Tais instruções geralmente manipulam o program counter do processador. Servem para gerenciar o fl uxo do programa e realizar algumas estratégias de programação. Além disso, permitem a chamada de funções e o desvio da sequência natural da execução do programa. Estrutura: JMP DESTINO JMP LABEL ; pula para o endereço de memória de programa contido em label. JMP 00h ; pula para o vetor de reset (endereço 00h) do microprocessador. Controle de processador Realiza algumas funções especiais para o gerenciamento do processador. Estrutura: CLC CLC ; essa instrução limpa a flag carry. Para programar em assembly, é importante conhecer todas as microins- truções do microprocessador em uso. Para isso, acesse a folha de dados do dispositivo e procure pelo descritivo de microinstruções para conhecer o restante das instruções. 15Microprocessador comercial: funcionamento e conjunto de instruções C08_Sistemas_Digitais.indd 15 23/08/2018 15:31:17 Microprocessador comercial: funcionamento e conjunto de instruções16 C08_Sistemas_Digitais.indd 16 23/08/2018 15:31:17 CARVALHO, M. B. Os microprocessadores 8086/88: hardware. [2000?]. Disponível em: . Acesso em: 21 ago. 2018. INTEL. 8086 16-BIT HMOS microprocessor 8086/8086-2/8086-1. 1990. Disponível em: . Acesso em: 22 ago. 2018. Leituras recomendadas BARRETTO, M. Microprocessadores. 2000. Disponível em: . Acesso em: 22 ago. 2018. INTEL. 4004 single chip 4-BIT P-channel microprocessor. 1987. Disponível em: . Acesso em: 22 ago. 2018. PANNAIN, R. Arquitetura do microprocessador 8086. [2000]. Disponível em: . Acesso em: 22 ago. 2018. WEBER, R. F. Fundamentos da arquitetura de computadores. 4. ed. Porto Alegre: Book- man, 2012.