You are on page 1of 4

Disciplina de Organizao e Arquitetura de Computadores ca Introduo aos processadores x86 ca Prof. Dr.

Luciano Jos Senger e

Os microprocessadores 8086/8088

O microprocessador 8086 da Intel um microprocessador de 16 bits, de forma que sua unidade lgica e aritmtica, os e o e seus registradores internos, e a maior parte das suas instruoes foram projetados para trabalhar com palavras de 16 bits. c Alm disso o 8086 tem um barramento de dados de largura 16 bits, ou seja, pode ler e escrever na memria ou nos portos de e o E/S utilizando 16 bits de uma s vez. O barramento de endereos de 20 bits, de forma que o 8086 pode enderear 1 MB o c e c (220 ) posioes de memria. Cada uma destas posioes de memria ocupada por um Byte. c o c o e A arquitetura do 8086 pode ser organizada em duas unidades distintas: a BIU (Bus Interface Unit ) e a EU (Execution Unit ). A BIU envia endereos para o barramento de endereos, l instruoes da memria, l e escreve dados nas portas e na c c e c o e memria. Assim, a BIU a unidade responsvel por todas as transferncias de dados e endereos atravs dos barramentos. o e a e c e Por sua vez, a EU diz ` BIU onde que h-de ir buscar instruoes ou dados, decodica e executa as instruoes. a e a c c O processador 8086 de 16 bits foi lanado em junho de 1978 e operava a 4,77 MHz. Para o seu primeiro microcomputador, c a IBM resolveu usar o 8088 por dois motivos: manter os custos do PC reduzidos e manter a compatibilidade com chips perifricos: o 8088 aceitava um barramento interno de 16 bits (como o 8086), mas seu barramento externo era de 8 bits. O e processador 8088 foi implementado com 29.000 transistores e compactado num pacote de 40 pinos - dif imaginar quando cil comparado a processadores atuais de milhes de transistores e centenas de pinos. o O estudo da arquitetura do 8088 (ou 8086) permite entender a arquitetura dos processadores mais modernos. O modelo de programaao bsico muito similar aos processadores mais modernos e todos os recursos em n de aplicativos, como c a e vel registradores, tipos de dados e modo de endereamento, so extenses do conjunto de recursos do 8086 original. c a o No diagrama de blocos da Figura 1 esto ilustrados os componentes principais do microprocessador 8088: registradores, a unidade lgica e aritmtica e os barramentos. Destaca-se tambm a interface com a memria, com sua unidade somadora e o e e o o sistema de controle de execuao. c

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 so chamados a de uso geral e tambm podem ser usados como registradores de 8 bits. Para isso, tais registradores devem ser referenciados e como, por exemplo, AH e AL, que so, respectivamente, o Byte high e o low do registrador AX. Esta nomenclatura tambm a e se aplica para os registradores BX, CX e DX. Os registradores do processador 8088 esto ilustrados na Tabela 1. a

AX BX CX DX DS ES SS CS BP SI DI SP IP F

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 Cdigo o Registrador Apontador da Base Registrador de Indice Fonte Registrador de Indice Destino Registrador Apontador de Pilha Registrador Apontador da Prxima Instruao o c Registrador de Flag

1.1

Utilizao do programa DEBUG ca

O DEBUG um programa que tem sua origem no sistema operacional MS-DOS, e serve para a criaao e depuraao de e c c programas. Atravs do DEBUG, pode-se vericar os registradores do sistema, realizar consultas na memria do sistema e o e o desenvolvimento e alteraao de programas simples. c O DEBUG pode apenas criar arquivos com a extenso .COM, e por causa das caracter a sticas deste tipo e programa, eles no podem exceder os 64 KB, e tambm devem iniciar no endereo de memria 0100H dentro do segmento espec a e c o co. Programas .COM, de acordo com o software bsico do MS-DOS e posteriormente Windows, no so realocveis em memria. a a a a o Os comandos principais programa DEBUG esto ilustrados na Tabela 2. a Tabela 2: Comandos do programa DEBUG Montar instruoes simblicas em cdigo de mquina c o o a Mostrar o conte do de uma regio da memria u a o Entrar dados na memria, iniciando num endereo espec o c co Executar um programa executvel na memria a o Dar nome a um programa Proceder, ou executar um conjunto de instruoes relacionadas c Sair do programa DEBUG Mostrar o conte do de um ou mais registradores u Executar passo a passo as instruoes c Desmontar o cdigo de mquina em instruoes simblicas o a c o Gravar um programa em disco

A D E G N P Q R T U W

E poss visualizar os valores dos registradores internos da UCP usando o programa DEBUG. vel C:/>DEBUG [Enter] - Voc pode notar ento a presena de um h e a c fen no canto inferior esquerdo da tela. Esse o prompt do programa. Para e visualizar o conte do dos registradores, experimente: u -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 Atravs desse comando, so mostrados o conte do de todos os registradores internos da CPU; um modo alternativo para e a u visualizar um unico registrador usar o comando r seguido do parmetro que faz referncia ao nome do registrador: e a e -rbx BX 0000 : Este comando mostrar o conte do do registrador BX e mudar o indicador do DEBUG de - para :. Tal prompt signica a u a que poss e vel, embora no obrigatria, a mudana do valor contido no registrador, bastando digitar o novo valor e pressionar a o c [Enter]. Pressionando apenas [Enter], o valor antigo se mantm. e

Linguagem de montagem

Nas linhas do cdigo em Linguagem Assembly h duas partes: a primeira a instruao a ser executada; a segunda, os o a e c parmetros da instruao. Por exemplo: a c add ah, bh Aqui add o comando a ser executado, neste caso uma adiao, e ah bem como bh so os parmetros. Nota-se que as e c a a instruoes para os processadores x86 apresentam no mximo dois operandos, sendo que o primeiro operando tambm o c a e e destino, caso a operaao representada seja uma instruo aritmtica. Existem instruoes de um operando e instruoes de c ca e c c nenhum operando. Isso caracteriza uma diferena em arquiteturas regulares como o MIPS, onde as instruoes tem sempre o c c mesmo tamanho e quase sempre a mesma quantidade de operandos. Por exemplo: mov al, 25 No exemplo acima, a instruao mov serve para mover o valor 25 para o registrador al. O nome das instruoes na linguagem c c Assembly constitu de 2, 3 ou 4 letras. Estas instruoes so chamadas mnemnicos ou cdigos de operaao, representando e do c a o o c a funao que o processador executar. Exemplo: c a add al,[170] Os colchetes no segundo parmetro indica-nos que vamos trabalhar com o conte do da clula de memria de n mero a u e o u 170, ou seja, com o valor contido no endereo 170 da memria e no com o valor 170: isto conhecido como endereamento c o a e c direto.

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 e DEBUG. Para montar um programa no DEBUG, usado o comando a (assemble); quando usamos esse comando, podemos e especicar um endereo inicial para o nosso programa como o parmetro, mas opcional. No caso de omisso, o endereo c a e a c inicial o especicado pelos registradores CS:IP, geralmente 0100h, o local em que programas com extenso .COM devem e a iniciar. Este ser o local que usaremos, uma vez que o DEBUG s pode criar este tipo de programa. Embora neste momento a o no seja necessrio darmos um parmetro ao comando a, isso recomendvel para evitar problemas, logo: a a a e a 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 u registradores ax e bx, guardando o resultado em ax e nalmente a instruao nop (nenhuma operaao) naliza o programa. c c No programa DEBUG, a tela se parecer com: a 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 instruoes: c -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

BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC

Vemos o valor 0002 no registrador AX.

-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 CX=0000 DX=0000 SS=0D62 CS=0D62 NOP SP=FFEE IP=0108

BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PO NC

BP=0000 SI=0000 DI=0000 NV UP EI PL NZ NA PE NC

E poss que os outros registradores apresentem valores diferentes, mas AX e BX devem conter os mesmos valores acima vel descritos. Para sair do DEBUG usamos o comando q (quit ).

Exerc cios
Responda as questes abaixo: o 1. Qual a diferena em utilizar a parte alta e a parte baixa dos registradores, por exemplo AH e AL? Um valor atribu e c do ao registrador AH altera o valor do registrador AL? Crie um programa simples no DEBUG para vericar essa situaao c 2. Atravs de comandos do DEBUG, altere o valor do registrador AX para 5. e 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, verique qual o tamanho em Bytes ocupado na memria para cada instruao em Assembly. e o c 5. Qual a diferena das duas instruoes de mquina abaixo? Quais so os modos de endereamento utilizados? c c a a c mov ah, 12 mov al, [12] 6. Qual a funao do registrador IP? e c 7. Qual a funao do registrador CS? e c 8. Existe uma razo espec a ca para a frequncia do 8080 ser igual a 4, 77 MHz, e no 5 MHz? e a Anota~es co

You might also like