Microprocessador 80386

13
1. HISTÓRICO Em 1985 a INTEL anunciou seu microprocessador de 32 bits de dados, o 80386, mas devido a uma série de falhas e defeitos ele só foi comercializado no ano seguinte. Ao ser lançado, chamava-se 80386 e seu preço inicial era de 299 dólares. Isto ocorreu em meados dos anos 80, mas somente por volta de 1990 tornaram-se comuns os PCs que utilizavam este microprocessador. O 80386 abriu a era dos 32 bits em micros da classe PC. Durante o seu ciclo de vida, foi lançado em versões de 16, 20, 25, 33 e finalmente 40 MHz. Entre 1992 e 1993, quando começou a popularização do micro no Brasil, eram muito comuns os equipados com o 386DX-40. Faz parte da terceira geração de processadores Intel, que foi outra grande evolução de performance em relação a segunda geração. Até aqui a Lei de Murphy, está totalmente correta: Murphy praticamente profetizou que a cada 18 meses a performance dos processadores duplicaria. Até aqui ele está correto, o que não ocorre nos dias atuais. HISTÓRICO DOS PROCESSADORES INTEL Tipo Geração Lançamento 80386DX Terceira 1985 80386SX Terceira 1988 Foi por volta desta geração que se começou a apelidar os processadores carinhosamente como os "oitões". O 386 era e ainda é conhecido como o "três-oitão". Os Primeiros 386 operavam a 12,5Mhz, mas logos foram substituídos pelos DX, 16, 20, 25, 33, 40 e 50 Mhz. A Intel também lançou uma versão para notebooks que era 386SL. 2. CARACTERÍSTICAS O microprocessador 386 era constituído por 275,000 transistores (mais de 100 vezes que o 4004 original), com medida de 1 mícron cada, o mesmo que 1 milésimo de milímetro ou 1000 nm (nanômetros). Foi com este chip que tudo verdadeiramente começou. Com este chip os PC´s passaram a ser ferramentas de trabalho bastante úteis. O 386 foi o primeiro processador de 32 bits para PC´s. Podia, por conseguinte, consumir o dobro de informação em cada ciclo de relógio e conseguia trabalhar com placas de também 32 bits. Um grande passo depois da 80286 foi o i80386 DX (Double Word), a primeira versão do "três - oitão", pois até aí o acesso à memória estava restrito a 16384 segmentos de 64 K. Também foi o primeiro processador totalmente de 32 bits de barramento, ou seja, ele operava tanto internamente quanto externamente a 32 bits, gravando ou lendo 32 bits de dados em cada vez. Possui 14 registradores do 8086, com 32 bits, e mais 2 registradores de segmento. Todos os registradores e instruções podem manipular 8, 16 ou 32 bits igualmente. 386 DX O modo protegido foi fabricado com tecnologia muito mais avançada dos outros, mas também era totalmente compatível com linha da Intel pois continuou a ter uma modalidade real, ou seja, programas projetadas para processadores mais antigos funcionavam nos mais novos. De fato, códigos escritos para o 8008 podem ainda rodar no mais recente Pentium-pró. Ele pode emular tanto o 8086 quanto o 80286, tornando possível executar uma grande quantidade de software existente (incluindo sistemas operacionais) sem qualquer modificação. Este processador possuiu muitos versões diferentes com varias freqüências de funcionamento. Foi a partir do 386 que se formou o conjunto de instruções padrão x86. Desde então, mínimas mudanças ocorreram no x86. As capacidades de memória também cresceram. Com 32 terminais de endereços, era possível acessar, teoricamente, 10 32 = 4 gigabytes de memória real RAM (versus 16 megabytes do 80286) e 64 trilhões de bytes de memória virtual, permitindo programas com uma memória virtual de 246 bytes (versus 232 no 80286). Aliada a 1

Transcript of Microprocessador 80386

Page 1: Microprocessador 80386

1. HISTÓRICO

Em 1985 a INTEL anunciou seu microprocessador de 32 bits de dados, o 80386, mas devido a uma série de falhas e defeitos ele só foi comercializado no ano

seguinte.

Ao ser lançado, chamava-se 80386 e seu preço inicial era de 299 dólares. Isto ocorreu em meados dos anos 80, mas somente por volta de 1990 tornaram-se

comuns os PCs que utilizavam este microprocessador. O 80386 abriu a era dos 32 bits em micros da classe PC. Durante o seu ciclo de vida, foi lançado em versões de

16, 20, 25, 33 e finalmente 40 MHz. Entre 1992 e 1993, quando começou a popularização do micro no Brasil, eram muito comuns os equipados com o 386DX-40.

Faz parte da terceira geração de processadores Intel, que foi outra grande evolução de performance em

relação a segunda geração. Até aqui a Lei de Murphy, está totalmente correta: Murphy praticamente profetizou

que a cada 18 meses a performance dos processadores duplicaria. Até aqui ele está correto, o que não ocorre

nos dias atuais.

HISTÓRICO DOS PROCESSADORES INTEL

Tipo Geração Lançamento

80386DX Terceira 1985

80386SX Terceira 1988

Foi por volta desta geração que se começou a apelidar os processadores carinhosamente como os "oitões". O 386 era e ainda é conhecido como o "três-oitão".

Os Primeiros 386 operavam a 12,5Mhz, mas logos foram substituídos pelos DX, 16, 20, 25, 33, 40 e 50 Mhz. A Intel também lançou uma versão para notebooks

que era 386SL.

2. CARACTERÍSTICAS

O microprocessador 386 era constituído por 275,000 transistores (mais de 100 vezes que o 4004 original), com medida de 1 mícron cada, o mesmo que 1

milésimo de milímetro ou 1000 nm (nanômetros). Foi com este chip que tudo verdadeiramente começou. Com este chip os PC´s passaram a ser ferramentas de

trabalho bastante úteis. O 386 foi o primeiro processador de 32 bits para PC´s. Podia, por conseguinte, consumir o dobro de informação em cada ciclo de relógio e

conseguia trabalhar com placas de também 32 bits.

Um grande passo depois da 80286 foi o i80386 DX (Double Word), a primeira versão do "três - oitão", pois até aí o acesso à memória estava restrito a 16384

segmentos de 64 K. Também foi o primeiro processador totalmente de 32 bits de barramento, ou seja, ele operava tanto internamente quanto externamente a 32 bits,

gravando ou lendo 32 bits de dados em cada vez. Possui 14 registradores do 8086, com 32 bits, e mais 2 registradores de segmento. Todos os registradores e

instruções podem manipular 8, 16 ou 32 bits igualmente.

386 DXO modo protegido foi fabricado com tecnologia muito mais avançada dos outros, mas também era totalmente compatível com linha da Intel pois continuou a ter

uma modalidade real, ou seja, programas projetadas para processadores mais antigos funcionavam nos mais novos. De fato, códigos escritos para o 8008 podem ainda

rodar no mais recente Pentium-pró. Ele pode emular tanto o 8086 quanto o 80286, tornando possível executar uma grande quantidade de software existente (incluindo

sistemas operacionais) sem qualquer modificação.

Este processador possuiu muitos versões diferentes com varias freqüências de funcionamento. Foi a partir do 386 que se formou o conjunto de instruções padrão

x86. Desde então, mínimas mudanças ocorreram no x86.

As capacidades de memória também cresceram. Com 32 terminais de endereços, era possível acessar, teoricamente, 10 32= 4 gigabytes de memória real RAM

(versus 16 megabytes do 80286) e 64 trilhões de bytes de memória virtual, permitindo programas com uma memória virtual de 246 bytes (versus 232 no 80286).

Aliada a capacidade de processar 32 bits de uma vez só, o 386 se tornou capaz de executar programas muito mais complexos. Dando um exemplo no mundo dos

games, Doom foi um dos primeiros jogos a ser 100 % 32 bits, e por isso que ele tinha toda aquela complexidade.

Ao contrario do 286, ele pode alternar entre o modo real e o modo protegido. Foram então desenvolvidos vários sistemas operacionais como o Windows 3.1,

OS/2, Windows 95 e Windows NT que funcionavam usando o modo protegido do 386.

O 386 era muito rápido para as memórias RAM existentes na época. Por isso, muitas vezes ele tinha que ficar "esperando" os dados serem liberados pela

memória RAM para poder concluir suas tarefas, perdendo muito em desempenho. Para solucionar esse problema, foram inventadas as memórias cache (SRAM) que

são utilizadas em pequena quantidade na grande maioria das placas mãe para micros 386 e superiores. Esta memória cache é um tipo de memória ultra-rápida que

armazena os dados da memória RAM mais usados pelo processador, de modo que mesmo uma pequena quantidade dela melhora bastante a velocidade da troca de

dados entre o processador e a RAM. O microprocessador pesquisa qual a região da memória DRAM onde provavelmente serão feitas as próximas operações e copia

todo o conteúdo daquela área para outra memória mais rápida (SRAM); quando ocorre um erro na previsão ele recalcula nova região de prováveis operações e a copia

na memória rápida, em substituição à anterior.

A Intel adicionou um novo modo de operação, o modo 86 virtual. Foi a partir daqui que começaram a aparecer os sistemas operacionais multitarefa, como o

OS/2. O Windows 386 também usou esta habilidade para poder executar vários programas DOS em separado, protegidos um da capacidade destrutiva do outro. Os

sistemas operacionais gráficos só se tornaram possíveis com este novo recurso do 386.

Em termos grosseiros de velocidade de computação, ele é comparável a um pequeno mainframe. A velocidade dos 386 da Intel variou somente entre 12.5MHz e

33MHz. Foi preciso que alguns clones aparecessem para que ele fosse mais longe. Além da Intel, vários outros fabricantes produziram microprocessadores 386SX e

386DX. Os clones da AMD e da Cyrix atingiram um máximo de 40 MHZ. A AMD lançou versões de 16, 20, 25, 33 e 40 MHz. O motivo de a Intel ter se limitado a

1

Page 2: Microprocessador 80386

esta velocidade parece ser receio de que um 386 fosse mais potente que um 486. De fato, um bom 386 de MHZ poderia ser comparado a um 486 dos mais simples. Os

primeiros 386DX lançados tinham um bug na instrução de multiplicação 32 bits do modo protegido.

Alguns dos processadores possuíram um soquete diferente com pinos de baixo do processador este tipo de soquete foi usado para os próximos lançamentos.

CARACTERÍSTICAS DOS SOQUETES

Tipo Nº de pinos Tensão Processadores Encapsulamento

Soquete 3 237 5 a 3,0 V 486 DX, SX, DX2, DX4 PGA

Os chips 386 foram desenhados para serem user friendly. Todos os chips desta família eram compatíveis pino-por-pino e também eram compatíveis a nível dos

binários com as anteriores famílias dos 186, significando isto que os utilizadores não precisavam de comprar novo software para os usar. Ainda, os 386 tinham a

capacidade de poupar energia pois trabalhavam a baixa voltagem e usavam o System Management Mode(SMM) que podia desligar alguns dos componentes para

poupar energia. Globalmente, este chip foi um grande avanço no desenvolvimento dos chips. Foi ele que definiu o padrão para os chips que se seguiram, pois tinha

um desenho simples com o qual os investigadores conseguiam facilmente trabalhar. Com este processador entrou no mercado o Cache de Memória e

multiprocessamento.

No microprocessador 80386 existe uma TLB, que é uma pequena memória associativa que retém os últimos e mais freqüentes endereços de página acessado, ou

seja, uma pequena cache de endereços físicos. Possui também endereço físico ou virtual, com memória virtual segmentada (sempre) e paginada (opcional), ambas

apenas no modo protegido.

Enfim, todos os microprocessadores hoje disponíveis em micros compatíveis com PC utilizam o funcionamento do 80386 como ponto de partida. Isso

aconteceu por pelo menos três motivos técnicos. Primeiro, 0 80386 não tem a limitação do 80286 em relação

ao seu modo protegido. Outro é a criação do modo virtual 8086, que permitiu que programas escritos para o

8086 pudessem ser utilizados diretamente dentro do modo protegido. E por último, o 80386 manipula dados de

32 bits e tem instruções mais poderosas. Além disso, estando em seu modo protegido, o 80386 consegue

acessar até 4 GB de memória RAM.

INFORMAÇÕES GERAIS

Fabricante Intel AMD, Cyrix

Nome da Família 80386DX

Geração do Processador Terceira

Geração da Placa Mãe Terceira

Versões 80386DX-16 80386DX-20 80386DX-25 80386-33 80386-40

Lançamento Out. 1985 Fev. 1987 Abril 1988 Abril 1989 ?

ESPECIFICAÇÕES DE VELOCIDADE

Velocidade do Barramento de Memória (MHZ)

16 20 25 33 40

Multiplicador de Clock do Processador

1.0

Velocidade do Processador (MHZ)

16 20 25 33 40

BENCHMARKSClassificação iCOMP ~29 ~38 49 68 ~85

Norton SI ~15 ~20 ~25 35 ~43

CARACTERÍSTICAS FÍSICAS

Tecnologia do Processo CMOS

Tamanho do Circuito (microns) Originalmente 1.5, agora 1.0

Transístores (milhões) 0.275

VOLTAGEM, FORÇA E RESFRIAMENTO

Voltagem Externa ou de E/S (V) 5

Voltagem Interna ou do Núcleo (V)

5

Gerenciamento de Força Nenhum

Necessidades de Resfriamento Nenhuma

CAPSULAMENTOTipo de Capsulamento PGA de 132-Pinos

Interface da Placa Mãe Soquete de 132-Pinos

ARQUITETURA EXTERNA

Largura do Barramento de Dados (bits)

32

Largura de Banda Máxima do Barramento de Dados (Mbytes/seg)

66 80 100 133 160

Largura de Barramento Endereçável (bits)

32

Memória Endereçável Máxima 4 GB

Tipo de Cache Nível 2 Nenhum

2

Page 3: Microprocessador 80386

Multiprocessamento Não

ARQUITETURA INTERNA

Conjunto de Instruções x86

Suporte a MMX Não

Modos do Processador Real, Protegido, x86 Virtual

Método de Execução x86 Nativo

COMPONENTES INTERNOS

Tamanho do Registro (bits) 32

Profundidade de Pipeline (estágios)

4

Tamanho do Cache Nível 1 Nenhum

Unidades de Inteiros 1

Unidade de Ponto Flutuante / Coprocessador Aritmético

Coprocessador 80386 Opcional

Decodificadores de Instruções 1

Tamanho do Buffer de Previsão de Desvio / Precisão

Nenhum

3. 80386DX vs. 80386SX

Apesar de ser tecnologicamente mais avançado que o 80286, o 80386 passou pelo mesmo problema sofrido pelo 8086: a dificuldade na transição para um maior

número de bits. Um processador que trabalha com dados de 32 bits necessita de circuitos periféricos de apoio que trabalhem também com dados de 32 bits, que eram

muito caros na época. Toda a arquitetura de micros classe "PC AT" era voltada para 16 bits: memórias de 16 bits, placas de expansão de 16 bits, chips auxiliares de 16

bits.

A solução dada pela Intel foi semelhante a usada com o 8086: para baratear o custo de produção de microcomputadores baseados no 80386, a Intel resolveu

compatibilizar o processador aos circuitos de apoio já existentes. Esses circuitos integrados de apoio eram os mesmos amplamente utilizados em projetos de placas-

mãe baseadas no 80286, portanto capazes de trabalhar com dados de 16 bits.

Para diferenciá-la do 80386 original, a Intel teve de nomeá-la de alguma forma. E isso se deu na forma de sufixo "SX". Para não haver confusão, o 80386

original passou a ser chamado de 386 DX. Sempre que citarmos o processador 80386, estamos nos referindo ao modelo 80386DX.

386 SX

O 80386 SX (Single Word) é uma versão mais barata e reduzida, com barramento externo de 16 bits ( comunicava com as placas por um caminho de 16 bits) e

versão OverDrive para os usuários com placas mãe antigas.

MICROPROCESSADOR BITS INTERNOS BITS EXTERNOS

80386 SX 32 16

80386 DX 32 32

O 80386 SX internamente trabalhava à 32 bits, porém externamente funcionava à 16 bits, possibilitando a fabricação de placas mãe mais baratas usando

basicamente os mesmos componentes das placas de 286.

O 80386SX continha somente 24 linhas de endereçamento, enquanto que o 80386DX tinha 32 linhas. Contudo, do ponto de vista do software, eram idênticos.

Possui os mesmos circuitos e executa as mesmas instruções, de 8, 16 e 32 bits. A diferença estava na largura da interface para barramento de dados , que opera

com 16 bits, ao invés dos 32 bits usados pelo 80386 original, que passou a chamar-se 386DX. Além do

barramento de dados com 16 bits, existe ainda mais uma diferença: seu barramento de endereços, apesar de

possuir 32 bits, utiliza apenas 24, o que limita seu espaço de endereçamento a apenas 16 MB. Isto não chegou

a ser nenhum problema, pois na sua época, raros eram os PCs que usavam mais de 4 MB de memória.

MICROPROCESSADOR Nº BITS DE ENDEREÇO CAPACIDADE DE ENDEREÇAMENTO

80286, 386 SX 24 16 MB

386 DX 32 4 GB

O 386SX é sensivelmente mais lento que o 386DX. Ao fazer a leitura de dados da memória, o 386DX recebe 32 bits de uma só vez. O 386SX precisa realizar

duas leituras consecutivas para completar os 32 bits. Apesar do acesso à memória ser mais demorado, o processamento é feito na mesma velocidade que o 386DX.

Enquanto uma instrução está sendo executada, outra instrução é buscada na memória. Como em muitas instruções, o tempo de execução é maior que o tempo de

busca, na maioria delas o tempo adicional causado pelo barramento de 16 bits não chega a causar impacto muito forte no desempenho.

4. PINAGEM

A pinagem do 80386 é similar à do 80286. Internamente, o 80386 trabalha com palavras de 32 bits, e todas as referências à memória devem ser alinhadas em

limites de 4 bytes. Assim, a CPU pode buscar palavras nos endereços 0, 4, 8 etc., mas não palavras nos endereços 1, 2, 3. Como resultado, todos os endereços de

memória são múltiplos de quatro, e assim os dois bits de baixa ordem do endereço são sempre 0, e A0 e A1 não existem.

3

Page 4: Microprocessador 80386

Apesar disso, existem instruções para armazenar quantidades de 8 e 16 bits na memória; assim, o problema resolvido pelo BHE no 80286 também existe aqui,

mas pior. Ele foi resolvido de uma forma direta, simplesmente provendo quatro sinais, BE0-BE3 (Bus Enable - habilitação de barramento), que apenas indicam, para

cada byte na palavra, quais devem ser utilizados.

Com um barramento de endereço de controle, o encapsulamento de 68 pinos utilizado no 80286 era muito pequeno; assim, a Intel foi para um padrão maior.

Este encapsulamento consiste em uma grade quadrada de 14x14 = 196 pinos, com a subgrade do meio de 8x8 = 64 ausente, dando um total de 132 pinos. Muitos deles

são duplicatas de outros pinos, ou não são usados.

Pinagem do 80386DX/386DX (PGA-132) Pinagem 80386SX/386SX (PQFP-100)Com o 80386, a Intel mantém a tradição de redefinir todos os sinais de controle do barramento a cada nova pastilha. Desta vez eles são chamados W/R

(Write/Read), D/C (Data/Code) e M/IO (Memory/IO). Entretanto, alguém finalmente achou uma tabela com as potências de 2 e descobriu que 7 (23, e assim apenas

três sinais são usados para os sete tipos de ciclos de barramento necessários (leitura de código, leitura de dados, escrita de dados, leitura de E/S, escrita de E/S,

reconhecimento e halt).

LOCK e READY não foram modificados, mas três novos sinais de controle de barramento estão presentes no 80386. ADS (Adress Status - status de endereço)

indica que um endereço válido está no barramento. Quando a memória vê este sinal, ela sabe que o endereço e as linhas de controle do barramento são válidos, e então

ela pode começar a trabalhar imediatamente.

BS16 (Bus Size 16) é uma entrada que pode ser ativada para dizer ao 80386 que o sistema contém pastilhas de E/S (antigas) e 16 bits. Quando o 80386 vê este

sinal, ele realiza as transferências de 32 bits como uma seqüência de duas transferências consecutivas de 16 bits.

Enquanto BS16 é usado para reduzir a velocidade do sistema, NA (Next Address - próximo endereço) é usado para acelerá-lo. Ativando NA, a memória pode

informar ao 80386 que ela está preparada para aceitar o próximo endereço de memória, mesmo que não tenha ainda ativado READY para o ciclo de barramento

corrente. Esta característica permite um maior pipeline, uma vez que a memória começa a preparar o próximo ciclo antes que a CPU tenha terminado de processar o

corrente.

Os sinais INTR, NMI, HOLD, HLDA, PEREQ, BUSY, ERROR e RESET estão também presentes como no 80286 e têm a mesma função. Não existe

PEACK porque o 80386 pode acessar seu co-processador diretamente.

5. O MODO PROTEGIDO E SUPERIORES

O modo protegido do 80386 apresenta diversos recursos importantes. Entre esses, podemos citar:

· Memória virtual: Com esse esquema podemos simular um computador com mais memória RAM do que ele realmente possui. A memória extra conseguida

através dessa técnica é armazenada em um arquivo do disco rígido, chamado arquivo de troca.

· Proteção de memória: Como o processador acessa muita memória, podemos carregar diversos programas simultaneamente. Através da proteção de memória,

o processador é capaz de isolar cada programa em uma área de memória bem-definida.

· Multitarefa: Por causa da proteção de memória, o processador é capaz de saber exatamente onde se encontra cada programa carregado em memória. Dessa

forma, ele pode executar automaticamente uma instrução de cada programa, parecendo que os programas estão sendo executados simultaneamente.

· Modo virtual 8086: O modo protegido é incompatível com o modo real. Poderíamos, então, executar programas de modo real em modo protegido através do

modo virtual 8086, pois o processador pode trabalhar como se fosse vários processadores 8086 com 1 MB de memória simultaneamente. Isso significa que podemos

ter, ao mesmo tempo, um ou mais programas de modo real sendo executados simultaneamente dentro do modo protegido.

5.1. Memória Virtual

No momento em que desejamos armazenar mais dados do que realmente cabem na memória RAM, o sistema operacional apresenta uma mensagem de erro.

Devemos, então, fechar um ou mais aplicativos para liberarmos memória.

Quando o processador está em modo protegido, podemos fazer com que ele "pense" que há mais memória RAM instalada do que realmente existe, fazendo com

que o erro de "estouro" de memória seja menos comum.

Dessa forma, podemos configurar u micro que, por exemplo, possua apenas 8 MB de memória RAM com 20 MB de memória virtual, de modo que os

programas "pensem" que há 28 MB de memória RAM instalada.

A memória virtual é feita através de um arquivo no disco rígido, chamado arquivo de troca.

Quando a memória RAM real do micro "estoura", o processador comanda uma troca entre uma área da memória RAM que esteja sendo menos utilizada com

uma área do arquivo de troca que esteja vazia. Dessa forma, uma porção da memória RAM passará a ficar vazia, e não será emitida mensagem de erro informando que

não há memória disponível.

No momento em que o processador necessitar de um dado na memória virtual, ele comanda uma troca, de forma a recuperar o dado armazenado.

Esse processo continua até o arquivo de troca também ficar cheio. Nesse momento irá aparecer a mensagem de erro por causa da falta de memória.

A técnica de memória virtual nos traz uma solução, mas também nos traz um outro problema. Como o disco rígido é muito mais lento que o processaodor, cada

troca comandada não é instantânea. Quanto menos memória RAM um micro tiver, mais vezes serão necessárias trocas com o disco rígido. Instalando-se mais

memória RAM no micro, menos vezes ocorrerá o problema de falta de memória.

Quando mais memória RAM tiver, menos lento será o micro, pois utilizará menos a memória virtual.

 5.2. Proteção de memória

O processador necessita isolar cada aplicativo em sua própria área de memória, para que uma aplicação não sobreponha a área que uma outra esteja utilizando.

Para isso não ocorrer, o processador protege, em memória, cada aplicativo carregado.

Entretanto, nem todos os sistemas operacionais utilizam o recurso de proteção de memória.

4

Page 5: Microprocessador 80386

Fica fácil entender o porquê de travamentos constantes e erros da Falha Geral de Proteção que ocorrem freqüentemente no Windows 3.x e no Windows 9x.

Como esses sistemas não utilizam ou nem sempre utilizam o recurso de proteção de memória, é muito comum um aplicativo invadir a área de outro.

5.3. Multitarefa

O processador é capaz de executar um pouco de cada aplicativo por vez, dando a impressão de que todos são executados simultaneamente.

Para que a multitarefa seja executada pelo processador, é obrigatório que os aplicativos estejam protegidos em memória. Dessa forma, somente sistemas

operacionais que utilizem proteção de memória têm multitarefa.

5.4. Modo Virtual

O uso do processador 80386 aumentou ainda mais a capacidade de endereçamento e introduziu o modo virtual (V86). O modo V86 veio permitir a execução dos

programas mais antigos em máquinas virtuais (VM ou Virtual Machines) como se fosse em modo real, conjuntamente com outros programas em modo protegido.

Como o modo real é incompatível em software com o modo protegido, seria impossível executar diretamente um programa escrito para o modo real mantendo o

processador em modo protegido.

Para que isso não ocorresse, foi criado um modo de operação chamado Virtual 8086. Podemos abrir quantas sessões Virtual 8086 quisermos, cada uma emulará

um processador 8086 com 1 MB de memória. Cada programa que seja executado em uma sessão Virtual 8086 "pensará" que está sendo executado em um micro 8086

só para ele. Além disso, cada sessão destas é protegida automaticamente em memória.

6. O DOS E O MODO PROTEGIDO

O DOS é um sistema operacional de modo real. Entretanto, há duas maneiras básicas para fazermos o DOS trabalhar em modo protegido: através do Windows

3.x ou de algum programa DPMI.

Windows 3.x: Como ele trabalha em modo protegido, pode operar com a memória virtual e com o modo Virtual 8086. Como o seu sistema operacional ainda é o

DOS, não pode utilizar proteção de memória e, conseqüentemente, não permite multitarefa.

A Microsoft estipulou uma padronização para que programas de modo protegido fossem escritos para o DOS. Essa padronização chama-se DPMI. Um exemplo

clássico de programa DPMI é o DOS4GW. Diversos programas o utilizam de modo a trabalharem em modo protegido mesmo no DOS. O DOS4GW fica sendo um

"chaveador": ele traz o processador para o modo protegido. Quando o programa necessita de alguma instrução de modo real ou do sistema operacional, o DOS4GW

comanda a volta para o modo real e, ao término dessa instrução, ao modo protegido novamente.

7. BUGS

Por ser um projeto grandioso demais para a época (1985), apareceram alguns bugs. Os mais conhecidos bugs do 80386 são:

· As primeiras versões do 80386 não conseguiam chavear para o modo protegido.

· Essaas mesmas verões não conseguiam executar a instrução de multiplicação de 32 bits corretamente.

· Além dos outros dois erros, nas primeiras verões do 80386 após uma instrução chamada STOSB, o registrador EDI era "zerado" ao invés de ser incrementado.

· Uma instrução chamada POPAD não preservava corretamente o valor do registrador EAX. Ao contrário dos outros três bugs, esse bug demorou muito tempo

para ser descoberto.

8. CO-PROCESSADORES MATEMÁTICOS

A complexidade dos novos softwares também exigiam a presença do co-processador numérico. Como os processadores Intel anteriores, o 386 pode trabalhar em

conjunto com um co-processador matemático chamado 387, com 73 instruções básicas (67+7- 1).

O co-processador a ser utilizado depende do modelo de processador que está sento utilizado. Uma placa-mãe 386SX tem como opção utilizar o co-processador

80387SX e uma placa-mãe 386DX tem a opção de utilizar o co-processador 80387DX. A pinagem utilizada pelos co-processadores citados são diferentes, por isso

não há como encaixar um no local de outro.

Na instalação de um co-processador matemático devemos observar a sua freqüência de operação máxima, que deverá ser igual ou superior à freqüência de

operação do processador principal.

Existe uma grande diferença em cálculos quando o micro passa a ter um co-processador matemático.

O pipeline do 80386 é 4, executando simultaneamente 4 etapas diferentes de 4 respectivas instruções. Com ele é obrigatório o uso do co-processador matemático

80387.

A INTEL desenvolveu em 1989 um projeto colocando internamente na pastilha do processador 80386 o co-processador 80387, o controlador de cache 82385 e 8

KBytes de memória RAM de cache, denominando-o microprocessador 80486 . Este projeto inicial do 80486 tinha mais de 1 milhão de transistores integrados na

pastilha, operando em 25 MHz. A dissipação de calor era muito grande, provocando falhas e problemas de design de placas e gabinetes. A solução foi rebaixar a

tensão de alimentação do CI, dos tradicionais 5 Volts para 3,3 Volts.

9. O CACHE DE MEMÓRIA

A partir do 80386, a memória RAM do micro começa a ficar lenta em relação ao processador. Por ser mais lenta que o processador, quando um segundo dado

for enviado, ela ainda estará armazenando o primeiro dado, portanto ainda não estará pronta para recebê-lo. O processador precisará esperar (wait state) e essa espera

ordena que o processador espere n pulsos de clock depois do envio ou recebimento de dados à memória.

O processador está constantemente acessando a memória, logo irá utilizará wait states em todo momento. A utilização constante de wait states faz com que o

desempenho do micro seja reduzido, já que o processador não ficará fazendo absolutamente nada, esperando somente a memória ficar pronta para receber dados.

A verdadeira solução para o acesso à lenta memória RAM é a utilização de um recurso chamado cache de memória. Ele utiliza na placa-mãe uma pequena

porção de memória de alta velocidade (memória cache) e um circuito controlador especial, o controlador de cache.

O controlador de cache lê o conteúdo da RAM e copia uma pequena porção para a memória cache. Quando o processador precisar ler algum dado da memória,

lerá a cópia existente na memória cache, não necessitando utilizar wait states para a leitura.

5

Page 6: Microprocessador 80386

Assim o micro ganha velocidade e fica mais rápido. Em pelo menos 80% das vezes que o processador faz um acesso à memória RAM, os dados são lidos do

cache de memória.

Normalmente não encontramos o recurso de cache de memória em micros 386SX.

10. PLACAS-MÃE

10.1. Placas-mãe 386SX:

Encontra-se nesse tipo de placa-mãe:· Processador 386SX · Soquete PLCC para co-processador 387SX· Slots ISA· Soquetes para módulos de memória SIMM-

30· Não encontrará circuito de cache de memória

10.2. Placas-mãe 386DX:

Encontra-se nesse tipo de placa-mãe:· Processador 386DX· Soquete PGA para co-processador 387DX· Slots ISA· Soquetes para módulos de memória SIMM-

30· Cache de memória

11. ENDEREÇAMENTO

11.1. Modos de endereçamento com registradores

O processador 80386 (e posteriores) possuem registradores de 32 bits. Os oito registradores de propósito geral possuem equivalentes com 32 bits. São eles eax,

ebx, ecx, edx, esi, edi, ebp e esp. Estes registradores podem ser utilizados como operandos de muitas instruções 80386.

11.2. Modos de endereçamento à memória

O processador 80386 generalizou os modos de endereçamento à memória. Enquanto o 8086 só permitia usar bx ou bp como registradores de base e si ou di

como registradores de índice, o 80386 permite que praticamente todos os registradores de propósito geral de 32 bits seja usado como um registrador de base ou de

índice. Além do mais, o 80386 novos modos de endereçamento indexado em escala que simplificam o acesso a elementos de arrays. Além do aumento para 32 bits, os

novos modos de endereçamento são, provavelmente, o maior progresso do chip em relação a processadores anteriores.

Como os modos de endereçamento do 80386 são mais ortogonais, eles são mais fáceis de memorizar do que os modos de endereçamento do 8086. Para

programadores trabalhando com o processador 80386 sempre existe a tentação de deixar os modos de endereçamento do 8086 de lado e usar unicamento o conjunto

do 80386. Entretanto, veremos no próximo módulo que os modos de endereçamento do 8086 são mais eficientes que os comparáveis do 80386. Portanto, é importante

conhecer todos os modos de endereçamento e escolher o modo apropriado para cada situação.

Quando se usa os modos de endereçamento base/indexado e base/indexado/deslocamento no 80386, sem a opção de escala (isto é, deixando a escala padrão em

"*1"), o primeiro registrador que aparece no modo de endereçamento é o registrdor base e, o segundo registrador, é o registrador índice. Este é um aspecto importante

porque a escolha do segmento padrão é determinada pela escolha do registrador base. Se o registrador base for ebp ou esp, o 80386 usa como padrão o segmento de

dados, mesmo se o registrador índice for ebp. Se usarmos o operador índice de escala ("*n") com um registrdor, este registrador sempre será o registrador índice,

independentemente de onde aparecer no modo de endereçamento:

11.3. Modos de endereçamento indireto com registradores

No 80386 é possível especificar qualquer registrador de 32 bits de propósito geral quando se usa o modo de endereçamento indireto com registradores. Tanto

[eax], [ebx], [ecx], [edx], [esi] como [edi] fornecem deslocamentos, como padrão, para o segmento de dados. Os modos de endereçamento [ebp] e [esp] usam o

segmento da pilha como padrão.

Note que, rodando em modo real de 16 bits no 80386, os deslocamentos nestes registradores de 32 bits precisam continuar dentro do limite de 0 a 0FFFFh. Não

é possível usar valores maiores que isto para acessar mais do que 64K num segmento. Note também que é preciso usar o nome de 32 bits dos registradores (eax ao

invés de ax, por exemplo). As instruções seguintes mostram todas as formas válidas:

11.4. Modos de endereçamento indexado, base com índice, base com índice com deslocamento

Os modos de endereçamento indexado (registrador indireto mais um deslocamento) permitem misturar um registrador de 32 bits com uma constante. Os modos

de endereçamento base/indexado permitem associar dois registradores de 32 bits. Finalmente, os modos de endereçamento base/indexado/deslocamento permitem

combinar uma constante e dois registradores para formar o endereço efetivo. Lembre-se de que o deslocamento produzido pelo cálculo do endereço efetivo precisa ser

de 16 bits quando se opera no modo real.

No 80386 os termos registrador base e registrador índice ampliam o sentido. QUando se combina dois registradores de 32 bits num modo de endereçamento, o

primeiro registrador é o registrador base e o segundo o registrador índice. Isto é verdadeiro, independentemente dos nomes dos registradores. Note que o 80386

permite usar o mesmo registrador como base e como índice, o que pode ser útil em várias ocasiões. As instruções seguintes fornecem exemplos representativos dos

vários modos de endereçamento base e indexado, junto com suas variações sintáticas:

As instruções seguintes usam o modo de endereçamento base+indexado. O primeiro registrador no segundo operando é o registrador base, o segundo é o

registrador de índice. Se o registrador base for esp ou ebp, o endereço efetivo é relativo ao segmento de pilha. Nos outros casos, o endereço efetivo é relativo ao

segmento de dados. Note que a escolha do registrador índice não afeta a escolha do segmento padrão.

É claro que podemos adicionar um deslocamento aos modos de endereçamento acima citados para produzir o modo de endereçamento

base+indexado+deslocamento. As instruções seguintes são uma amostra representativa dos modos de endereçamento possíveis:

Existe uma restrição em relação ao uso do registrador índice no 80386: não se pode usar o registrador esp como um registrador índice. Ele pode ser usado como

registrador base, mas não como registrador índice.

11.5. Modos de endereçamento indexado em escala

Os modos de endereçamento indexado, bas/indexado e base/indexado/deslocamento descritos acima, na realidade são instâncias especiais dos modos de

endereçamento indexado em escala do 80386. Estes modos de endereçamento são particularmente úteis para acessar elementos de arrays, apesar de não estarem

limitados a este propósito. Estes modos permitem multiplicar o registrador índice por um, dois, quatro ou oito. A sintaxe geral é:

6

Page 7: Microprocessador 80386

onde "base" e "índice" representam qualquer registrador de propósito geral de 32 bits do 80386 e "n" é o valor de um, dois, quatro ou oito.

O 80386 calcula o endereço efetivo somando desloc, base e índice*n. Por exemplo, se ebx contiver 1000h e esi contiver 4, então

Note que os modos de endereçamento ampliados indexado, base/indexado e base/indexado/deslocamento do 80386 na realidade são casos especiais deste modo

de endereçamento indexado em escala com "n" igual a um. Isto é, os pares de instruções seguintes são absolutamente idênticos:

É claro que o MASM permite uma porção de variações destes modos de endereçamento. A seguir uma pequena amostra destas possibilidades:

12. FORMATO DE INSTRUÇÃO

O 386 possui 153 instruções básicas, sendo 44 instruções extras.

O formato de instrução no 386 é também muito complicado, sendo a instrução mais curta de 1 byte e a mais comprida até 17 bytes.

Há pouca estrutura ou regularidade no formato, exceto talvez nos 2 últimos bits do opcode:

O bit da direita do opcode indica se o endereço de memória, se usado, é fonte ou destino da operação.

O penúltimo bit da direita do opcode indica se o operando é tipo byte ou word.

O formato geral está mostrado na primeira figura. A segunda figura mostra os campos opcode e mode. SIB é presente apenas no Motorola 68030, para dar um

byte adicional ao modo.

Formato de instrução no Intel 80386

Campos opcode e mode

12.1 A instrução MOV 80x86

Os exemplos do texto usarão com muita frequência a instrução mov 80x86. Além disso, a instrução mov é a instrução de máquina mais comum do 80x86.

Portanto, compensa gastar um pouco de tempo discutindo o funcionamento desta instrução. A instrução mov é muito simples e tem a seguinte forma:

mov destino, fonte

mov faz uma cópia da fonte e armazena este valor no destino. Esta instrução não afeta o conteúdo original da fonte. Ela sobrepõe o valor anterior do destino. A

operação desta instrução pode descrita pela seguinte declaração Pascal:

destino := fonte;

Esta instrução tem muitas limitações. Seremos confrontados com ela no nosso estudo da linguagem Assembly 80x86. Para entender porque estas limitações

existem, é preciso dar uma olhada no código de máquina das várias formas desta instrução. Um alerta: eles nunca chamam o CISC (Complex Instruction Set

Computer) do 80386. A codificação da instrução mov provavelmente é a mais complexa do conjunto de instruções. Isto significa que, se não estudarmos o código de

máquina desta instrução, não seremos capazes de avaliá-la e não seremos capazes de escrever código otimizado usando esta instrução. Agora você vai entender

porque trabalhamos com os processadores x86 (os "de mentira") nos módulos anteriores ao invés de usar as instruções 80x86.

Instrução MOV

Existem diversas versões da instrução mov. O menumônico mov descreve mais de uma dúzia de instruções diferentes no 80386. A forma mais usada tem a

seguinte codificação binária (veja a Fig.13).

Os oito primeiros bits da instrução são o opcode. Os bits zero e um definem a largura da instrução (8, 16 ou 32 bits) e a direção da transferência. Quando forem

analisadas instruções específicas neste texto, os valores de d e w estarão sempre preenchidos. Outros textos, com frequência, costumam pedir que estes valores sejam

preenchidos pelo leitor.

O opcode seguinte é o byte do modo de endereçamento, carinhosamente chamado de byte "mod-reg-r/m" pela maioria dos programadores. Este byte escolhe

qual das 256 combinações possíveis de operandos a instrução genérica mov permite. A instrução mov genérica assume três formas diferentes na linguagem Assembly:

mov reg, memória

mov memoria, reg

mov reg, reg

Observe que pelo menos um dos operandos é sempre um registrador de propósito geral. O campo reg no byte mod/reg/rm especifica este registrador (ou um dos

registradores se usarmos a terceira forma). O bit d (de direção) do opcode decide se a instrução deve armazenar dados nos registradores (d=1) ou na memória (d=0).

Os bits do campo reg permitem selecionar um de oito registradores diferentes. O 8086 permite oito registradores de 8 bits e oito registradores de propósito geral

de 16 bits. O 80386 também permite oito registradores de propósito geral de 32 bits. A CPU decodifica o significado do campo reg da seguinte maneira:

Para diferenciar registradores de 16 e de 32 bits, o processador 80386 e posteriores usam um byte especial de prefixo no opcode das instruções com registradores

de 32 bits. No restante, as codificações das instruções são as mesmas para os dois tipos de instrução.

O campo r/m, juntamente com o campo mod, escolhe o modo de endereçamento. A codificação do campo mod é a seguinte:

7

Page 8: Microprocessador 80386

O campo mod escolhe entre mover de registrador para registrador e mover da memória para registrador. Também escolhe o tamanho do deslocamento (zero, um,

dois ou quatro bytes) que segue a instrução dos modos de endereçamento de memória. Se MOD=00, significa que se trata de um dos modos de endereçamento sem

deslocamento (indireto via registrador ou base/indexado). Note o caso especial onde MOD=00 e r/m=110. Normalmente corresponderia ao modo de endereçamento

[bp]. O 8086 usa esta codificação para o modo de endereçamento apenas por deslocamento. Isto mostra que não existe um modo de endereçamento por [bp]

verdadeiro no 8086.

Para entender porque é possível usar o modo de endereçamento por [bp], analise os MOD=01 e MOD=02 da tabela acima. Estes padrões de bits ativam os

modos de endereçamento desloc[reg] e desloc[reg][reg]. Aparentemente não correspondem a um modo de endereçamento [bp], mas considere as seguintes

instruções:Estas declarações, que usam os modos de endereçamento indexado, realizam as mesmas operações que as correspondentes indiretas por registradores

(obtidas removendo-se o deslocamento das instruções acima). A única diferença real entre as duas formas é que o modo de endereçamento indexado é um byte mais

longo (se MOD=01 e dois bytes mais longo se MOD=10), o qual contém o deslocamento zero. Por serem maiores, estas instruções também são um pouco mais lentas.

Esta característica do 8086 - de permitir duas ou mais maneiras de realizar a mesma coisa - ocorre em todo o conjunto de isntruções. Na verdade, veremos vários

outros exemplos antes de terminarmos a análise da instrução mov. O MASM geralmente escolhe a melhor forma automaticamente. Se escrevêssemos o código acima

e o submetêssemos ao MASM, ele geraria o modo de endereçamento indireto por registradores para todas as instruções, exceto para mov ah,0[bp]. Mesmo neste caso,

emitiria apenas um byte para um deslocamento zero. Note que o MASM não exige que se indique 0[bp]. Podemos usar apenas [bp] que o MASM automaticamente

supre o byte zero.

Se MOD for diferente de 11b, o campo r/m codifica o modo de endereçamento à memória da seguinte forma:

Não se esqueça de que os modos de endereçamento envolvendo bp usam o segmento da pilha (ss) como padrão. Todos os outros usam o segmento de dados (ds)

como padrão.

Se você já ficou perdido com esta explicação, ainda não sabe do pior. Lembre-se de que estes são apenas alguns dos modos de edereçamento 8086 e ainda é

preciso conhecer todos os modos de endereçamento do 80386. Agora começa a ficar claro o que o pessoal quiz dizer com computador de instruções complexas.

Entretanto, o conceito importante que deve ser notado é que é possível construir instruções 80x86 da mesma forma como foram construídas as instruções do x86 no

capítulo 3 - criando as instruções bit a bit.

Existem vários fatos importantes, relacionados à instrução mov, que devem ser lembrados. Antes de mais nada, não existem movimentos da memória para a

memória. Por alguma razão, os iniciantes da linguagem Assembly têm uma certa dificuldade de lembrar deste aspecto. Apesar de existirem algumas instruções que

realizam movimentos da memória para a memória, carregar um registrador e depois armazenar este valor na memória é quase sempre mais eficiente. Outro fato

importante é que existem muitas instruções mov diferentes que realizam a mesma coisa. Também existem vários modos de endereçamento diferentes que podem ser

usados para a mesma posição na memória. Se você tiver interesse em escrever programas mais curtos e mais rápidos possíveis na linguagem Assembly, será preciso

observar constantemente as vantagens e desvantagens de instruções equivalentes.

A análise deste capítulo refere-se principalmente às instruções mov genéricas para realçar a maneira como os processadores 80x86 codificam os modos de

endereçamento de memória e de registradores numa instrução mov. Outras formas da instrução mov permitem transferir dados entre os registradores de 16 bits de

propósito geral e os registradores de segmento. Outras ainda permitem carregar registradores ou posições de memória com uma constante. Estas variações da

instrução mov usam opcodes diferentes.

Na tabela abaixo estão as principais instruções MOV e suas respectivas codificações em binário:

Existem várias instruções mov adicionais no 80386 que permitem carregar os registradores de propósito especial do 80386. Eles não serão analisados neste

texto. No 80x86 também existem algumas instruções para strings, as quais realizam operações da memória para a memória. Estas instruções aparecem no próximo

capítulo, mas não são boas substituitas da instrução mov.

13. EFLAGS

No 80386, o registrador FLAGS foi expandido de 16 para 32 bits e passou a se chamar EFLAGS. O bit 18 do registrador EFLAGS não foi definido e não poderá

ser ativado. No 80486 este bit tornou-se o Alignment Check (AC), utilizado para capturar acessos à memória não-alinhados (tentativas de ler uma palavra num

endereço que reside nos limites de um byte).

Desta forma, o programa lê o registrador EFLAGS e tenta ativar o bit AC. Se o valor do bit não puder ser alterado, o programa pode concluir que a máquina é

um 80386 e responde de acordo.

14. 80386 vs. 68030

As pastilhas 80386 e 68030 são ambas processadores de 32 bits de alto desempenho com aproximadamente o mesmo poder computacional. É, entretanto,

interessante compará-los para ver como projetistas diferentes tomam decisões diferentes no nível de hardware.

Ambas as pastilhas utilizam endereços de 32 bits, mas os do 80386 têm sempre os 2 bits de baixa ordem iguais a 0, alinhando transferências em limites de

palavras. O 68030 não tem esta limitação e pode endereçar a memória começando em qualquer byte. Ambas as pastilhas têm um barramento de dados de 32 bits. Não

há nenhuma diferença aqui.

Os sinais de controle do barramento são de alguma forma diferentes. O 68030 tem sinais, ECS e OCS, que indicam o início de um ciclo de barramento e um

ciclo de operando, respectivamente, facilitando aos dispositivos externos o sincronismo com a CPU. Com o 80386, os dispositivos de E/S têm que sincronizar

monitorando o barramento. Ambas as pastilhas possuem sinais (ADS e AS) que indicam que o barramento de endereço está válido, mas somente o 68030 possui um

sinal similar (DS) para o barramento de dados. Ambas usam um código de 3 bits para especificar o tipo de ciclo de barramento, e ambas têm uma forma explícita de

deixar que na memória e dispositivos de E/S sinalizem o término de um ciclo (READY e DSACKx). Ambas possuem também uma maneira de travar o barramento

para operações de múltiplos ciclos (LOCK e RMC).

8

Page 9: Microprocessador 80386

O tratamento de interrupções é ligeiramente diferente. O 80386 possui apenas duas prioridades, mascarável e não-mascarável, enquanto o 68030 tem sete. Eles

também diferem na arbitragem de barramento, com o 68030 permitindo que um segundo dispositivo requisite o barramento antes que o primeiro termine, algo que o

80386 não permite.

Embora ambos os microprocessadores possuam co-processadores de ponto flutuante, a forma de interfaceá-los é ligeiramente diferente. O 80386 considera seu

co-processador como sendo algo especial, e tem sinais específicos para comunicar-se com ele. Ao contrário, o 68030 considera seu co-processador como

simplesmente outro dispositivo de E/S e, se comunica com ele através de ciclos de barramento normais. Esta abordagem torna mais fácil ligar co-processadores

adicionais ao 68030. O processador 68030 foi, de fato, projetado com a idéia de que os usuários pudessem construir suas próprias placas co-processadoras.

Ambas as pastilhas possuem uma unidade de gerência de memória sofisticada interna, mas apenas o 68030 possui um cache de dados substancial. Ambas usam

pipeline para melhorar seu desempenho. Em resumo, as duas pastilhas são mais parecidas do que diferentes. Ambos os times de projeto tiveram acesso à mesma

tecnologia, ambos tiveram os mesmos objetivos e ambos estavam tentando conquistar os mesmos consumidores, de modo que não deve ser surpresa que os produtos

resultantes sejam similares.

9