1 Os microprocessadores 8086/8088

Transcrição

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

Documentos relacionados

Arquitetura dos Microprocessadores

Arquitetura dos Microprocessadores 3- A máquina deve ler na memória o primeiro valor (5) e posicionar os controles R e P dos blocos de seleção. 4- Através de um ciclo de clock o registrador 2 para que este armazene o valor (5) Porta...

Leia mais