Arquitetura de Computadores Nível da linguagem de montagem III
Introdução básica a linguagem Assembly Será apresentado nesta aula uma introdução ao assembly do processador 8088. Tal assembly é baseado no Microsoft MASM, porém possui algumas modificações existentes no assembly utilizado nos SOs baseados no UNIX. Para podermos entender a sintaxe da linguagem, serão apresentados os seguintes aspectos do MASM: Organização da memória; Registradores acessíveis; Modos de endereçamento; Instruções; Pseudo-instruções;
Organização da memória A memória do 8088 consiste apenas em um vetor de bytes de 8 bits endereçáveis. Essa memória é utilizada para armazenamento de instruções, pilha e dados. O 8088 separa a memória em 4 segmentos de 65.536 bytes cada: Código; Dados; Pilha; Extra;
Registradores Está disponível para o programador assembly o acesso a o seguinte grupo de registradores: Registradores gerais; Registradores de segmento; Registradores de ponteiro e índice; Registradores de flag.
Registradores gerais
Registradores gerais AX BX CX DX Acumulador. Comumente usado em operações matemáticas e de E/S. BX Base. Comumente usado como uma base ou registrador apontador. CX Contador. Usado freqüentemente em loops. DX Deslocamento. Similar ao registrador de base.
Registradores gerais Estes registradores são definidos como registradores de uso geral, pois podemos realmente armazenar qualquer coisa que quisermos neles. São também registradores de 16 bits, o que significa que podemos armazenar um inteiro positivo de 0 a 65535, ou um inteiro com sinal de -32768 to 32768. AX tem um intervalo de 0 até FFFF. Isto significa que existe um intervalo de 0 até FF para AH e AL. Se tivermos de armazenar A61D em AX, AH conterá A6, e AL conterá 1D.
Registradores de segmento
Registradores de segmento CS Segmento de código. O bloco de memória onde o código é armazenado. DS Segmento de dados. A área na memória onde os dados são armazenados. Durante operações de bloco, quando grandes blocos de dados são movidos, este é o segmento a que a CPU comumente se refere. ES Segmento extra. Apenas outro segmento de dados, mas este é comumente usado quando se quer acessar o vídeo. SS É o segmento de pilha, em que a CPU armazena endereços de retorno de sub-rotinas.
Registradores de ponteiro e índice
Registradores de ponteiro e índice SI Índice de fonte. Freqüentemente usado para movimentações de blocos de instruções. Este é um ponteiro que, com um segmento, geralmente DS, é usado pela CPU para leitura. DI Índice de destino. Novamente, você o usará muito. Um outro ponteiro que, com um segmento, geralmente ES, é usado para escrita pela CPU. BP Apontador da base, usado em conjunto com o segmento de pilha. SP Apontador da pilha, comumente usado com o segmento de pilha.
Registradores de flags
Registradores de flags Funcionam como sinalizadores. As flags são apenas um bit de memória e se localizam dentro do processador. Como cada flag é apenas um bit, num dado momento elas só podem ser 1 ou 0 ("setada" ou "zerada"). Existem seis flags usadas para indicar o resultado de certas instruções. Um uso comum das flags é o de desviar a execução para um ponto em particular do código usando instruções de salto condicinal. Estas instruções farão o salto ou não dependendo do estado de uma ou mais flags. Apenas cinco das flags podem ser usadas deste modo - zero, sinal, carry, overflow e paridade. A sexta flag (carry auxiliar) e a sétima flag (flag de direção) são lidas por outro tipo de instrução.
Registradores de flags SF - Flag de Sinal; ZF - Flag de Zero; AF - Flag Auxiliar; PF - Flag de Paridade. CF - Flag de Carry (vai um).
Modos de endereçamento
Modos de endereçamento
Instruções
Instruções
Instruções
Pseudo instruções
Rastreador