aula teórica 2 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/teoricas/teorica03.doc · web viewnão existem...

8
Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa Aula Teórica 3 Sumário: Descrição das arquitecturas 8086, 80286, 80386, 80486 e família Pentium. Leitura Recomendada: Capítulos 2, 3, 4, 5, 8, 10, 12, 13 e 14 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley. Capítulo 1 e 2 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press. NOTA : Grande parte dos conteúdos dos capítulos do livro The Indispensable PC Hardware Book são demasiado técnicos. Só se recomenda a sua leitura para efeitos de cultura geral do aluno, não sendo essencial para a disciplina. O processador O processador é a parte mais importante de um PC. No CPU são executadas todas as operações lógicas e aritméticas. Em geral, o processador lê os dados da memória, processa-os da forma definida por um comando (uma instrução de um programa) e escreve o resultado de novo na memória. Figura nº 1 – Estrutura geral de um microprocessador. Retirado do livro “The Indispensable PC Hardware Book”, Hans-Peter Messmer, Addison-Wesley, página 67. Para realizar as operações lógicas e aritméticas, o microprocessador tem uma unidade de bus (bus unit (BU)), uma unidade de instrução (instruction unit (IU)), uma unidade de execução (execution unit (EU)) e uma unidade de endereçamento (addressing unit (AU)). A unidade de execução é responsável pelo processamento dos dados (adição, comparação, etc.) e para esse propósito tem uma unidade de 1

Upload: truongkiet

Post on 07-Feb-2019

213 views

Category:

Documents


0 download

TRANSCRIPT

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Aula Teórica 3

Sumário:Descrição das arquitecturas 8086, 80286, 80386, 80486 e família Pentium.

Leitura Recomendada:Capítulos 2, 3, 4, 5, 8, 10, 12, 13 e 14 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley. Capítulo 1 e 2 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

NOTA: Grande parte dos conteúdos dos capítulos do livro The Indispensable PC Hardware Book são demasiado técnicos. Só se recomenda a sua leitura para efeitos de cultura geral do aluno, não sendo essencial para a disciplina.

O processador

O processador é a parte mais importante de um PC. No CPU são executadas todas as operações lógicas e aritméticas. Em geral, o processador lê os dados da memória, processa-os da forma definida por um comando (uma instrução de um programa) e escreve o resultado de novo na memória.

Figura nº 1 – Estrutura geral de um microprocessador. Retirado do livro “The Indispensable PC Hardware Book”, Hans-Peter Messmer, Addison-Wesley, página 67.

Para realizar as operações lógicas e aritméticas, o microprocessador tem uma unidade de bus (bus unit (BU)), uma unidade de instrução (instruction unit (IU)), uma unidade de execução (execution unit (EU)) e uma unidade de endereçamento (addressing unit (AU)).

A unidade de execução é responsável pelo processamento dos dados (adição, comparação, etc.) e para esse propósito tem uma unidade de controlo (control unit (CU)), uma unidade aritmética e lógica (arithmetic and logical unit (ALU)) e vários registos.

A unidade de bus estabelece a ligação com o mundo exterior e consiste do bus de dados, bus de endereços e bus de controlo.

A unidade de bus vai buscar as instruções do programa e coloca-as no prefetch queue. A unidade de instrução lê a instrução do prefetch queue, descodifica-a e transfere a instrução já descodificada para a unidade de execução. Na unidade de execução, a instrução é executada pela ALU. A unidade de controlo supervisiona os registos e a ALU para assegurar que a execução decorre sem problemas.

Ler e escrever dados é realizado através da unidade de bus. Através do bus de dados o microprocessador lê/escreve dados de/para a memória. A localização da memória a ler/escrever é acedida por um endereço. O processador calcula o endereço na unidade de endereçamento e envia-o à memória através do bus de endereços.

1

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

A memória é endereçada da mesma forma para ir buscar uma instrução a ser executada. A diferença é que a instrução é colocada no prefetch queue, enquanto os dados normais são colocados nos registos na unidade de execução.

Um ponto importante é perceber que as instruções dos programas e os dados que vão manipular residem na mesma memória, não existe separação entre memória de dados e memória de instruções, ou seja, cada chip de memória pode servir para armazenar dados ou instruções.

Arquitectura do 8086

O 8086 tem uma arquitectura de 16 bits e um conjunto de cerca de 123 instruções.Tem um bus de endereços de 20 bits e só consegue operar em modo real.Tem um bus de dados de 16 bits, registos de 16 bits e um prefetch queue de 6 bytes.Tem 40 pins.

A importância do 8086

Porquê o 8086 é tão importante, ainda hoje:1. Pela simplicidade da sua arquitectura. É virtualmente impossível dominar a tecnologia de um

Pentium III, por exemplo, sem uma grande experiência adequada.2. Não existem problemas de compatibilidade. Um Pentium III, e todos os outros microprocessadores

que surgiram depois do 8086, podem trabalhar como se fossem um 8086.3. Os programas escritos para o 8086 são mais claros e fáceis de compreender, e são ideais como ponto

de partida para aprender a trabalhar com os CPU´s.

Endereçamento de memória do 8086

A quantidade de chips de memória instalados num computador e a capacidade de cada chip determina a quantidade de memória disponível para armazenamento de programas e dados. Mas esta é apenas a visão física da memória.

Mais importante é a visão lógica, a forma como a memória é vista e usada por um programa.Na visão lógica, a memória é vista não como uma colecção de chips, mas como um conjunto de milhares ou milhões de células de armazenamento, cada uma com um byte de tamanho e com um endereço único.

células com 1 byteinformação

endereço 0 1 2 … 1 MByte

O 8086 pode endereçar até 1 MByte (1024 KBytes ou exactamente 1,048,576 bytes de memória).Este é o número máximo de endereços (de bytes individuais) porque o 8086 tem um bus de endereçamento de 20 bits:

220 = 1 MByte

Como o 8086 endereça a memória (endereçamento segmentado)

Segmento

O 8086 divide a memória endereçável (1 MByte) em segmentos, cada um contendo 64 KBytes de memória. Cada segmento começa num endereço divisível por 16.

Principais tipos de segmentos:Code segment – contem as instruções a serem executadasData segment – contem os dados a que o programa acedeStack – contem dados e endereços que é necessário guardar temporariamente

2

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Offset

Para aceder aos bytes ou words individuais, dentro do segmento (dentro dos 64 Kbytes), utiliza-se o offset. O offset é a distância em bytes que vai do endereço de segmento (que indica o início do segmento) a uma outra localização de memória.Um offset de 16 bits pode ir de 0000H a FFFFH (de 0 a 65,355).Como os offsets são sempre relativos ao início do segmento, também são chamados endereços relativos.

Endereço lógico

Assim um endereço de memória é composto por um endereço de segmento de 16 bits e por um endereço de offset também de 16 bits. Assim, o endereço lógico é indicado pelo par segmento:offset (1230H:0321H)

Como transformar num endereço físico de 20 bits?

É só deslocar o endereço de segmento 4 bits para a esquerda e depois adicionar o endereço de offset.

12300H (segmento shiftado 4 bits)+0321H

12621H (endereço físico de 20 bits)

Formato dos dados e seu armazenamento

Dados

O 8086 só é capaz de trabalhar com 4 formatos de dados numéricos, todos valores inteiros. São eles:

unsigned byte – 0 a 255 (28)signed byte – -128 a +127 (27)unsigned word – 0 a 65535signed word – -32768 a +32767

Figura nº 2 – Formato dos dados no 8086.

3

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Os caracteres ASCII ocupam um byte.Byte, em C é representado pelo tipo de dados char, que ocupa um byte.Word, em C é representada pelo tipo de dados integer, que ocupa dois bytes.

Armazenamento

1 byte – é a unidade elementar, é armazenado directamente na célula.1 word (2 bytes) – é armazenada em dois bytes adjacentes. O byte menos significativo é armazenado na localização de memória mais baixa e o byte mais significativo na localização mais alta.1 doubleword (4 bytes) – tem a mesma regra de cima.

Figura nº 3 –Modo de armazenamento dos dados em memória .

Em C, as funções para acesso à memória já fazem o tratamento destas trocas, no entanto, se se aceder directamente à memória, é preciso ter presente esta regra.

Os registos do 8086

O 8086 foi desenhado para ir buscar instruções à memória e executá-las, efectuar operações aritméticas e lógicas sobre os dados e trocar dados com a memória.

Para realizar estas tarefas, usa um total de 14 registos, cada um com 16 bits, que podem ser considerados localizações de memória que se encontram no próprio processador, em vez de estarem na RAM. A vantagem é que estes registos podem ser acedidos muito mais rapidamente que a RAM.

4

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

Figura nº 4 – Os 14 registos do processador 8086.

Dos 14 registos, cada um tem uma utilidade especial.

Quatro registos gerais ou de dados: AX, BX, CX e DX. São usados para armazenamento de dados e passagem de parâmetros para as funções da BIOS ou do sistema operativo.

AX – normalmente acumula os resultados de um cálculo. Obrigatório quando se fazem multiplicações e divisões. (Acumulador)

BX – pode ser usado como operando ou para guardar um endereço base a partir do qual se calcula um offset. (Base)

CX – usado em funções que fazem operações repetidas vezes. Guarda o número de vezes que as operações devem ser repetidas. (Contador)

DX – guarda dados de uso geral. (Dados)

?X - ?H ?L

byte alto byte baixo

Quatro registos de segmento: CS, DS, SS e ES. Endereçam um segmento de dados, de código ou de stack. São assumidos 4 zeros à sua direita.

5

Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa

CS – endereço de início do segmento de código. Quando adicionado ao offset do registo IP, fornecem o endereço da próxima instrução a ser executada. (Código)

DS – endereço de início do segmento de dados. Associa-se ao registo SI. (Dados)

SS – endereço de início do segmento da stack do programa. Quando adicionado ao registo SP, indica a word na stack que está a ser endereçada. (Stack)

ES – usado por algumas operações com strings. Nesse caso é associado ao registo DI. Pode ter outras utilizações.

Cinco registos de offset: IP, SP, BP, SI e DI.

IP ou program counter – offset da próxima instrução a ser executada.

SP e BP – Offsets relativos ao segmento da stack, ou seja, permitem o acesso à stack. SP indica a localização do topo da stack e BP referência qualquer dado na stack.

SI e DI – usados para endereçamento geral de dados e para manipulação de strings. SI é associado ao registo DS. DI é associado ao registo ES.

Registo de flag. É uma colecção de bits de estado e controlo do sistema. Tem 6 bits (flags) de estado, 3 flags de controlo (DF,IF, TF) e 7 bits não usados.

As flags mais importantes para nós são carry flag (CF) e zero flag (ZF), e indicam erros que surgiram no decorrer das operações. Teremos oportunidade de trabalhar com elas.

6