Microprocessador 80386
-
Upload
lucas-de-ramos-araujo -
Category
Documents
-
view
190 -
download
3
Transcript of 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
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
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
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
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
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
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
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
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