1 Os microprocessadores 8086/8088
Transcrição
1 Os microprocessadores 8086/8088
Disciplina de Organização e Arquitetura de Computadores Introdução aos processadores x86 Prof. Dr. Luciano José Senger 1 Os microprocessadores 8086/8088 O microprocessador 8086 da Intel é um microprocessador de 16 bits, de forma que sua unidade lógica e aritmética, os seus registradores internos, e a maior parte das suas instruções foram projetados para trabalhar com palavras de 16 bits. Além disso o 8086 tem um barramento de dados de largura 16 bits, ou seja, pode ler e escrever na memória ou nos portos de E/S utilizando 16 bits de uma só vez. O barramento de endereços é de 20 bits, de forma que o 8086 pode endereçar 1 MB (220 ) posições de memória. Cada uma destas posições de memória é ocupada por um Byte. A arquitetura do 8086 pode ser organizada em duas unidades distintas: a BIU (Bus Interface Unit ) e a EU (Execution Unit ). A BIU envia endereços para o barramento de endereços, lê instruções da memória, lê e escreve dados nas portas e na memória. Assim, a BIU é a unidade responsável por todas as transferências de dados e endereços através dos barramentos. Por sua vez, a EU diz à BIU onde é que há-de ir buscar instruções ou dados, decodifica e executa as instruções. O processador 8086 de 16 bits foi lançado em junho de 1978 e operava a 4,77 MHz. Para o seu primeiro microcomputador, a IBM resolveu usar o 8088 por dois motivos: manter os custos do PC reduzidos e manter a compatibilidade com chips periféricos: o 8088 aceitava um barramento interno de 16 bits (como o 8086), mas seu barramento externo era de 8 bits. O processador 8088 foi implementado com 29.000 transistores e compactado num pacote de 40 pinos - difı́cil imaginar quando comparado a processadores atuais de milhões de transistores e centenas de pinos. O estudo da arquitetura do 8088 (ou 8086) permite entender a arquitetura dos processadores mais modernos. O modelo de programação básico é muito similar aos processadores mais modernos e todos os recursos em nı́vel de aplicativos, como registradores, tipos de dados e modo de endereçamento, são extensões do conjunto de recursos do 8086 original. No diagrama de blocos da Figura 1 estão ilustrados os componentes principais do microprocessador 8088: registradores, unidade lógica e aritmética e os barramentos. Destaca-se também a interface com a memória, com sua unidade somadora e o sistema de controle de execução. Figura 1: Diagrama de blocos do processador 8088 A UCP tem 4 registradores internos, cada um de 16 bits, chamados de AX, BX, CX e DX. Esses registradores são chamados de uso geral e também podem ser usados como registradores de 8 bits. Para isso, tais registradores devem ser referenciados como, por exemplo, AH e AL, que são, respectivamente, o Byte high e o low do registrador AX. Esta nomenclatura também se aplica para os registradores BX, CX e DX. Os registradores do processador 8088 estão ilustrados na Tabela 1. AX BX CX DX DS ES SS CS BP SI DI SP IP F 1.1 Tabela 1: Registradores Registrador Acumulador Registrador Base Registrador Contador Registrador de Dados Registrador de Segmento de Dados Registrador de Segmento Extra Registrador de Segmento de Pilha Registrador de Segmento de Código Registrador Apontador da Base Registrador de Índice Fonte Registrador de Índice Destino Registrador Apontador de Pilha Registrador Apontador da Próxima Instrução Registrador de Flag Utilização do programa DEBUG O DEBUG é um programa que tem sua origem no sistema operacional MS-DOS, e serve para a criação e depuração de programas. Através do DEBUG, pode-se verificar os registradores do sistema, realizar consultas na memória do sistema e o desenvolvimento e alteração de programas simples. O DEBUG pode apenas criar arquivos com a extensão .COM, e por causa das caracterı́sticas deste tipo e programa, eles não podem exceder os 64 KB, e também devem iniciar no endereço de memória 0100H dentro do segmento especı́fico. Programas .COM, de acordo com o software básico do MS-DOS e posteriormente Windows, não são realocáveis em memória. Os comandos principais programa DEBUG estão ilustrados na Tabela 2. A D E G N P Q R T U W Tabela 2: Comandos do programa DEBUG Montar instruções simbólicas em código de máquina Mostrar o conteúdo de uma região da memória Entrar dados na memória, iniciando num endereço especı́fico Executar um programa executável na memória Dar nome a um programa Proceder, ou executar um conjunto de instruções relacionadas Sair do programa DEBUG Mostrar o conteúdo de um ou mais registradores Executar passo a passo as instruções Desmontar o código de máquina em instruções simbólicas Gravar um programa em disco É possı́vel visualizar os valores dos registradores internos da UCP usando o programa DEBUG. C:/>DEBUG [Enter] - Você pode notar então a presença de um hı́fen no canto inferior esquerdo da tela. Esse é o prompt do programa. Para visualizar o conteúdo dos registradores, experimente: -r[Enter] AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0100 NV UP EI PL NZ NA PO NC 0D62:0100 2E CS: 0D62:0101 803ED3DF00 CMP BYTE PTR [DFD3],00 CS:DFD3=03 Através desse comando, são mostrados o conteúdo de todos os registradores internos da CPU; um modo alternativo para visualizar um único registrador é usar o comando r seguido do parâmetro que faz referência ao nome do registrador: -rbx BX 0000 : Este comando mostrará o conteúdo do registrador BX e mudará o indicador do DEBUG de - para :. Tal prompt significa que é possı́vel, embora não obrigatória, a mudança do valor contido no registrador, bastando digitar o novo valor e pressionar [Enter]. Pressionando apenas [Enter], o valor antigo se mantém. 2 Linguagem de montagem Nas linhas do código em Linguagem Assembly há duas partes: a primeira é a instrução a ser executada; a segunda, os parâmetros da instrução. Por exemplo: add ah, bh Aqui add é o comando a ser executado, neste caso uma adição, e ah bem como bh são os parâmetros. Nota-se que as instruções para os processadores x86 apresentam no máximo dois operandos, sendo que o primeiro operando é também o destino, caso a operação representada seja uma instrução aritmética. Existem instruções de um operando e instruções de nenhum operando. Isso caracteriza uma diferença em arquiteturas regulares como o MIPS, onde as instruções tem sempre o mesmo tamanho e quase sempre a mesma quantidade de operandos. Por exemplo: mov al, 25 No exemplo acima, a instrução mov serve para mover o valor 25 para o registrador al. O nome das instruções na linguagem Assembly é constituı́do de 2, 3 ou 4 letras. Estas instruções são chamadas mnemônicos ou códigos de operação, representando a função que o processador executará. Exemplo: add al,[170] Os colchetes no segundo parâmetro indica-nos que vamos trabalhar com o conteúdo da célula de memória de número 170, ou seja, com o valor contido no endereço 170 da memória e não com o valor 170: isto é conhecido como endereçamento direto. 3 Criando um programa simples em assembly O programa a seguir realiza a soma de dois valores, armazenados nos registradores ax e bx. O primeiro passo é iniciar o DEBUG. Para montar um programa no DEBUG, é usado o comando a (assemble); quando usamos esse comando, podemos especificar um endereço inicial para o nosso programa como o parâmetro, mas é opcional. No caso de omissão, o endereço inicial é o especificado pelos registradores CS:IP, geralmente 0100h, o local em que programas com extensão .COM devem iniciar. Este será o local que usaremos, uma vez que o DEBUG só pode criar este tipo de programa. Embora neste momento não seja necessário darmos um parâmetro ao comando a, isso é recomendável para evitar problemas, logo: a 100[enter] mov ax,0002[enter] mov bx,0004[enter] add ax,bx[enter] nop[enter][enter] O programa move o valor 0002 para o registrador ax, move o valor 0004 para o registrador bx, adiciona o conteúdo dos registradores ax e bx, guardando o resultado em ax e finalmente a instrução nop (nenhuma operação) finaliza o programa. No programa DEBUG, a tela se parecerá com: C:\>DEBUG -a 100 0D62:0100 0D62:0103 0D62:0106 0D62:0108 0D62:0109 mov ax,0002 mov bx,0004 add ax,bx nop O comando t serve para executar passo a passo as instruções: -t AX=0002 BX=0000 DS=0D62 ES=0D62 0D62:0103 BB0400 CX=0000 DX=0000 SP=FFEE SS=0D62 CS=0D62 IP=0103 MOV BX,0004 Vemos o valor 0002 no registrador AX. BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC -t AX=0002 BX=0004 DS=0D62 ES=0D62 0D62:0106 01D8 -t AX=0006 BX=0004 DS=0D62 ES=0D62 0D62:0108 90 CX=0000 DX=0000 SP=FFEE SS=0D62 CS=0D62 IP=0106 ADD AX,BX BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC CX=0000 DX=0000 SS=0D62 CS=0D62 NOP BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PE NC SP=FFEE IP=0108 É possı́vel que os outros registradores apresentem valores diferentes, mas AX e BX devem conter os mesmos valores acima descritos. Para sair do DEBUG usamos o comando q (quit ). 4 Exercı́cios Responda as questões abaixo: 1. Qual é a diferença em utilizar a parte alta e a parte baixa dos registradores, por exemplo AH e AL? Um valor atribuı́do ao registrador AH altera o valor do registrador AL? Crie um programa simples no DEBUG para verificar essa situação 2. Através de comandos do DEBUG, altere o valor do registrador AX para 5. 3. Execute passo a passo o programa abaixo: mov mov mov add mov mov add nop ax, ah, al, ax, bx, bl, bx, 0 2 2 ax ax 0 bx 4. Para o programa acima, verifique qual é o tamanho em Bytes ocupado na memória para cada instrução em Assembly. 5. Qual a diferença das duas instruções de máquina abaixo? Quais são os modos de endereçamento utilizados? mov ah, 12 mov al, [12] 6. Qual é a função do registrador IP? 7. Qual é a função do registrador CS? 8. Existe uma razão especı́fica para a frequência do 8080 ser igual a 4, 77 MHz, e não 5 MHz? Anotaç~ oes
Documentos relacionados
Arquitetura dos Microprocessadores
3- A máquina deve ler na memória o primeiro valor (5) e posicionar os controles R e P dos blocos de seleção. 4- Através de um ciclo de clock o registrador 2 para que este armazene o valor (5) Porta...
Leia mais