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 ▫ 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