8088 Assembly
Software Básico
Mitsuo Takaki
Processador 8088

Versão simplificada do processador 8086.

Usa registradores de 16 bits, invés de 32 bits.

Criado devido ao alto custo de produção do 8086.

Usado na versão original do IBM PC.

Base do Pentium.
Processador 8088

Possui 1mb de memória.



Registradores não possuem bits suficientes para
endereçar toda memória.
Divide a memória em segmentos de 64kb.
Seriam necessários 20 bits para endereçar toda
memória.
Ciclo do Processador

A execução de uma única instrução segue as
seguintes etapas:
1.Buscar instrução na memória no segmento de
código usando PC.
2.Incrementar o PC.
3.Decodificar a instrução buscada.
4.Buscar os dados necessários na memória e/ou nos
registradores do processador.
5.Executar a instrução.
6.Armazenar os resultados da instrução na memória
e/ou registradores.
Registradores
Registradores

Possui registradores do seguinte tipo:

De propósito geral.

De ponteiros.

De flag.

De segmento.

Não deixa de ser um ponteiro.
Registradores – Propósito Geral

AX (AH, AL)

É denominado registrador acumulador.

Usado para coletar resultados.

Alvo de muitas instruções.

Geralmente é o destino implicito de instruções.

Ex. instrução de multiplicação.
Registradores – Propósito Geral

BX (BH, BL)

Conhecido como registrador de base.

Pode conter endereços.

AX não é capaz de armazenar endereços.
MOV AX,BX
O conteúdo de BX é copiado
para AX.
MOV AX,(BX)
O conteúdo da posição de
memória apontada por BX é
copiado para AX.
Registradores – Propósito Geral

CX (CH, CL)

Conhecido como registrador de contadores.

É usado na contagem de loops.


É automaticamente decrementado na instrução
LOOP.
Os loops, geralmente, são encerrados quando CX
chega a zero.
Registradores – Propósito Geral

DX (DH, DL)


Chamado de registrador de dados.
Usado em conjunto com AX em instruções de
comprimento de palavra dupla (32 bits).


DX contém os 16 bits de ordem alta.
AX contém os 16 bits de ordem baixa.
Registradores - Ponteiros

PC

Program Counter, aponta para a próxima instrução
a ser executada.

Conhecido também como IP (Instruction Pointer).

Sempre aponta para o segmento de código.

Não é endereçado pelas instruções.

Incrementado antes da instrução ser executada.

Já aponta para a próxima instrução.
Registradores - Ponteiros

SP



Conhecido como registrador de ponteiro de
pilha.
Aponta para o topo da pilha.
Incrementado/decrementado após instruções que
modificam a pilha.


MOV e CALL decrementam o valor de SP.
POP incrementa o valor SP.
Registradores - Ponteiros

BP




Conhecido como registrador de base.
Geralmente contém um endereço dentro do
segmento de pilha.
Enquanto SP armazena o topo, BP armazena o
início da pilha.
O quadro de pilha é delimitado por BP e SP.
Registradores - Ponteiros

SI


Índice de fonte.
DI

Índice de destino.

Usados em conjunto com BP.


Endereça dados na pilha.
Usados em conjunto com BX.

Calcula os endereços de localização de dados na
memória.
Registradores - Flag



É na verdade um conjunto de registradores de
um bit.
A maioria está relacionada ao resultados de
instruções aritméticas.
Nem todos os bits são usados.

Estão ligados, eletricamente, ao valor zero.
Registradores - Flag
Z – Resultado é zero.
S – Resultado é negativo (bit de sinal).
V – Resultado gerou um excesso.
C – Resultado gerou um “vai-um”.
A - “vai-um” auxiliar (vai-um do bit 3).
P – paridade do resultado.
I – Habilita interrupção.
T – Habilita modo rastreamento (depuração).
D – Direção das operações de cadeia.
Registradores - Segmento

CS



Code Segment
Informa onde o segmento de código começa dentro
da memória.
Um novo segmento pode ser ativado com uma
simples mudança do valor armazenado no
registrador.
Registradores - Segmento

DS



Data Segment
Informa onde o segmento de dados começa dentro
da memória.
Pode ser alterado para acessar dados fora do
segmento correspondente.
Registradores - Segmento

SS


Stack Segment
Informa onde o segmento de pilha começa dentro
da memória.
Registradores - Segmento

ES


Extra Segment
Informa onde o segmento extra começa dentro da
memória.
Registradores - Segmento


Geralmente não são alterados.
Na prática, o segmento de dados e de pilha
usam a mesma porção de memória.

O segmento de dados na parte inferior.

Segmento de pilha no topo.
Memória



Não é capaz de endereçar toda a memória.

Divide a memória em segmentos.

Utiliza segmentos de 64kb.
Consiste de um vetor de bytes de 8 bits
endereçáveis.
Usada para armazenamento de instruções,
dados e pilha.
Memória

É dividida nos seguintes segmentos:

Código.

Dados.

Pilha.

Extra.
Segmento de Código



Contém as instruções do programa.
O conteúdo do PC é sempre interpretado como
um endereço de memória no segmento de
código.
Um PC de valor zero, se refere ao endereço
mais baixo do segmento de código.

Não se refere ao endereço absoluto zero.
Segmento de Dados


Contém os dados do programa.

Inicializados.

Não-inicializados.
Quando BX contém um ponteiro, aponta
sempre para o segmento de dados.
Segmento de Pilha



Contém variáveis locais e resultados
intermediários.
Os endereços de SP e BP estão sempre dentro
deste segmento.
Composto por palavras de 2 bytes.

SP deve conter número par.

SP incrementa/decrementa de 2.
Pilha (Stack)


A pilha contém informações de contexto sobre
o programa em execução.
Geralmente quando um procedimento é
chamado, uma parte da pilha é reservada para:

Variáveis locais do procedimento.

Endereço de retorno.

Outras informações de controle.
Pilha (Stack)


A porção da pilha relativa a um procedimento é
chamada de quadro de pilha.
Quando um procedimento chama outro
procedimento, um quadro adicional é alocado.


Normalmente, logo abaixo do quadro corrente.
Geralmente cresce do endereço mais alto para
o mais baixo.

Endereço mais baixo é chamado de topo da pilha.
Segmento Extra


Registrador de segmentos avulsos.
Pode ser alocado em qualquer lugar da
memória onde seja necessário.
Memória


Registradores de segmento sempre indicam
múltiplos de 16, em um espaço de endereço de
20 bits.
Endereços dentro do segmento pode ser
convertido em endereços reais.

Multiplica-se o registrador de segmento por 16 e,
então, soma o deslocamento.
Download

registrador de base