Apostila Assembly UFRN
88 pág.

Apostila Assembly UFRN


DisciplinaOrganização de Computadores6.345 materiais119.382 seguidores
Pré-visualização26 páginas
operandos, nos locais onde possam existir ambigüidades. 
 
 Apesar das declarações poderem ser escritas começando em qualquer posição na linha, a 
Figura 37 ilustra a convenção de alinhamento mais utilizada. 
 
N om e
(Coluna 1)
Soma DW 5 DUP (?) ; vetor soma
O pcode
(Coluna 9)
O perando
(Coluna 17)
Com entário
(Coluna 41)
 
Figura 37 Convenção para alinhamento de declarações 
 
 As instruções e diretivas de um programa Assembly podem ser escritas em maiúsculas ou 
minúsculas (Assembly é uma linguagem não case-sensitive); entretanto, as seguintes sugestões são 
dadas de forma a tornar o programa mais legível: 
\uf077 palavras reservadas (instruções e diretivas) devem ser escritas em letras maiúsculas; e 
\uf077 nomes em geral (comentários e variáveis) podem ser utilizadas letras minúsculas ou 
maiúsculas, dando-se preferência às minúsculas. 
 
5.1.1 Sintaxe dos Comentários 
 
 Os comentários podem ser utilizados de três formas diferentes: 
\uf077 como uma linha em branco; 
\uf077 como uma linha iniciada com o caractere ponto e vírgula (;) e seguida de texto; ou 
\uf077 depois de uma instrução, bastando adicionar o caractere (;) para delimitar o início do 
comentário. 
 
Exemplos de comentários: 
; comentario como uma linha iniciada com ponto e virgula 
 MOV AX, 1234H ; comentario depois de uma instrucao 
 Programação em Linguagem Assembly 
© Anna Catharina/CEFET-RN/2000 42 
5.1.2 Sintaxe das Instruções e Diretivas do Assembly 
 
 Para os montadores MASM (Macro ASseMbler) e TASM (Turbo ASseMbler), as 
instruções devem ser escrita, obrigatoriamente, uma por linha, podendo ter até quatro campos, 
delimitados de acordo com a seguinte ordem: 
 
 [label:] mneumônico [operando(s)] [; comentário] 
 
onde label é o rótulo dado ao endereço da instrução (no segmento de código), mneumônico 
representa a instrução, operandos são os dados operados pela instrução e comentário é qualquer texto 
escrito para elucidar ao leitor do programa o procedimento ou objetivo da instrução. Destes, 
apenas o campo mneumônico é sempre obrigatório. O campo operandos depende da instrução 
incluída na linha e os campos label e comentário são sempre opcionais. Todos os valores numéricos 
estão, por default, em base decimal, a menos que outra base seja especificada. 
 
5.1.3 Modelo de Programa Assembler Simplificado (.EXE) 
 
 
; definição do modelo desejado 
; **************************************************************************** 
 DOSSEG 
 .MODEL modelo 
 
; definição da base numérica desejada 
; **************************************************************************** 
 [.RADIX base] 
 
; definição do segmento de pilha 
; **************************************************************************** 
 .STACK [tamanho] 
 
; área de definição de equivalências 
; **************************************************************************** 
 ; equivalências 
 
; criação do segmento de dados 
; **************************************************************************** 
 .DATA 
 ; variáveis 
 
; início do segmento de código 
; **************************************************************************** 
 .CODE 
 
; procedimento principal 
; **************************************************************************** 
Principal PROC NEAR ; início do procedimento principal 
 
 MOV AX, @DATA ; instruções para que DS e ES 
 MOV DS, AX ; apontem para a área de 
 MOV ES, AX ; dados criada 
 
 
 ; corpo do programa principal 
 
 
 MOV AH, 4Ch ; função para término de programa 
 INT 21h ; através da INT 21h 
 
Principal ENDP ; final do procedimento principal 
 END Principal ; final do programa 
 
 Programação em Linguagem Assembly 
© Anna Catharina/CEFET-RN/2000 43 
Observação: Quando um programa é carregado, os registradores de dados DS e ES não vêm 
apontando para os segmentos de dados, devendo ser implementado através das instruções 
(primeira linha do código do programa principal): 
MOV AX, @DATA ; copia para AX o endereço da área de dados 
MOV DS, AX ; faz DS apontar para a área de dados 
MOV ES, AX ; faz ES apontar para a área de dados 
 
5.1.4 Diretivas Simplificadas de Definição de Segmentos 
 
 O compilador implementa uma forma simplificada de definição de segmentos, a qual 
pode ser usada na maioria dos programas .exe. Muitos defaults assumidos são os mesmos usados 
pelos compiladores das linguagens de alto nível, facilitando a criação de módulos que serão 
ligados a programas criados em outras linguagens. Para que o montador assuma uma dada 
estrutura, é suficiente a definição de um modelo. As principais diretivas utilizadas no modelo 
simplificado são: DOSSEG, .MODEL, .STACK, .DATA, .CODE. 
 
DOSSEG, .MODEL: 
 A diretiva .MODEL é usada em conjunto com a diretiva DOSSEG para definir um 
modelo e ao mesmo tempo especificar ao ligador (ou linkador, ou linkeditor) que os segmentos 
devem ser agrupados na ordem convencional adotada pelo sistema operacional para programas 
escritos em linguagens de alto nível. 
 Sintaxe: 
 DOSSEG 
 .MODEL [modelo] 
 
 Os modelos possíveis são: 
\uf077 TINY, no qual um único segmento de 64 kbytes será definido para acomodar o 
código, a pilha e os dados do programa. Programas com características de .com; 
\uf077 SMALL, modelo default, no qual todo o código será agrupado num mesmo segmento 
de 64KB, enquanto os dados e a pilha estarão num outro segmento de 64KB; 
\uf077 MEDIUM, no qual o código poderá ser maior que 64KB, mas os dados e a pilha 
estarão num mesmo segmento; 
\uf077 COMPACT, no qual o código é menor que 64KB e dados e pilha podem ser 
maiores que 64KB; 
\uf077 LARGE, no qual tanto o código quanto os dados podem ser maiores que 64KB. 
\uf077 HUGE, semelhante ao LARGE, porém permite a criação de tabelas (matrizes) de 
dados maiores que 64KB; e 
\uf077 FLAT, onde todos os dados e o código estão num único segmento de 4 Gbytes 
(disponível apenas para operações em modo protegido). 
 
Tabela 4 Atribuições default para os modelos de programa 
Modelo de 
Memória 
Atributo para 
o Código 
Atributo 
para Dados 
Sistema Operacional 
Segmento 
Único 
TINY NEAR NEAR DOS Sim 
SMALL NEAR NEAR DOS e Windows Não 
MEDIUM FAR NEAR DOS e Windows Não 
COMPACT NEAR FAR DOS e Windows Não 
LARGE FAR FAR DOS e Windows Não 
HUGE FAR FAR DOS e Windows Não 
FLAT NEAR NEAR Windows NT Sim 
 Programação em Linguagem Assembly 
© Anna Catharina/CEFET-RN/2000 44 
.STACK: Permite a criação de um segmento de pilha. O tamanho default é 1 kbyte, podendo ser 
alterado na própria diretiva. 
 Sintaxe: .STACK [tamanho_da_pilha] 
 
.DATA: Marca o início do segmento de dados, no qual todas as variáveis, tabelas e mensagens 
devem ser colocadas. 
 Sintaxe: .DATA 
 
.CODE: Marca o início do segmento de código do programa. No caso de um programa possuir 
mais de um segmento de código, um nome deve ser especificado para cada segmento. 
 Sintaxe: .CODE [segmento] 
 Observação: A abertura de um novo segmento implica o fechamento do anterior. 
 
5.1.5 Operadores de Referência a Segmentos no Modo Simplificado 
 
 Os principais operadores de referência a segmentos utilizados no modelo simplificado 
são: @DATA, @CODE e @CURSEG. 
 
 O operador @DATA é usado para referenciar o grupo compartilhado por todos os 
segmentos