






















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Introdução à linguagem montadora do 8086
Tipologia: Notas de estudo
1 / 30
Esta página não é visível na pré-visualização
Não perca as partes importantes!























4.1 A sintaxe assembly do 8086
A linguagem montadora não é sensível à letra maiúscula ou minúscula
Para facilitar a compreensão do texto do programa, sugere-se :
uso de letra maiúscula para código
Declarações ( statements ):
Formato de uma declaração (linha de programa):
[Nome] [Cod. oper.] [Operando(s)] [;Comentário]
Exemplo:
INICIO: MOV CX,5h ;inicializar contador
A separação entre os campos deve ser do tipo <espaço> ou
Pode ser um rótulo de instrução, um nome de sub-rotina , um nome de
variável , contendo de 1 a 31 caracteres, iniciando por uma letra e contendo
somente letras, números e os caracteres?. @ _ : $ %.
Obs: o Montador traduz os nomes por endereços de memória.
Exemplos: nomes válidos nomes inválidos
.TEST 2abc
@caracter A42. 25
Contem o código de operação simbólico ( mnemônico )
No caso de diretivas, contem o código de pseudo-instrução
Exemplos: instruções diretivas
INC nome PROC
Exemplos:
MOV CX,0 ; movimenta 0 para CX (óbvio!)
MOV CX,0 ; CX conta no. de caracteres, inicialmente vale 0
; (linhas em branco: separação)
; inicialização dos registradores (linha inteira de comentário)
4.2 Formato de dados, variáveis e constantes
Exemplos:
1110101 é considerado decimal (ausência do B)
-2184D (número decimal negativo)
0FFFFh começa com um decimal e termina com h
1B4Dh
Exemplos de números ilegais :
1,234 caracter estranho (vírgula)
FFFFh não começa por número de 0 a 9
difícil distinguir do nome de uma variável
1B4D não termina com h ou H
Caracteres isolados ou strings de caracteres devem estar escritos dentro
de aspas simples ( ‘ ) ou duplas ( “ ).
Exemplos:
“ A” ou ‘ A ’
‘ola, como vai’
- Definição de variáveis de tipo word:
Nome DW valor_inicial
Exemplos:
WORD1 DW 0h ;equivale a 0000h
CONTA DW 0150h ; OK !, por que?
C DW? ;não inicializada
WORD1 DW 1234h ;byte baixo 34h, endereço WORD
;byte alto 12h endereço WORD1+
- Array : sequência de bytes ou words consecutivos na memória - armazenar dados relacionados - armazenar caracteres ASCII organizados (ex: texto)
Exemplos:
BYTE_ARRAY DB 10h,20h,30h
WORD_ARRAYDW 1000h,123h,0h,0FFFFh
Um array pode conter um string de caracteres, sendo definido como:
LETRAS DB ‘abC’ ;e´ equivalente aos caracteres ASCII
LETRAS DB 61h,62h,43h ;depende se maiúscula ou minúscula
- Combinação de caracteres e números numa mesma definição:
MENSAGEM DB ‘Alo!’, 0Ah,0Dh,’$’
O caracter ' $ ' marca o fim de um string de caracteres e não é exibido.
Constante é um nome simbólico para um dado de valor constante, que seja
muito utilizado num programa.
Para atribuir um nome a uma constante, utiliza-se a pseudo-instrução EQU
( equates -> igual a) e a sintaxe:
Nome EQU valor_da_constante
Exemplos:
LF EQU 0Ah ;caracter Line Feed como LF
CR EQU 0Dh ;caracter Carriage return como CR
LINHA1 EQU ‘Digite seu nome completo’
Observação:
Graficamente: suponha a instrução MOV AX,WORD
Antes Depois
0006h 8FFFh
8FFFh 8FFFh
Obs: para a instrução MOV não é permitido operar de posição de memória
para posição de memória diretamente, por motivos técnicos do 8086.
Por exemplo:
MOV WORD1,WORD2 ;instrução inválida
;esta restrição é contornada como segue
MOV AX,WORD2 ;primeiro o conteúdo de WORD2 vai para AX
MOV WORD1,AX ;depois, o conteúdo de AX é movido para a
;posição de memória WORD
XCHG destino,fonte
Usada para trocar dados (nos dois sentidos) entre:
registrador e uma posição de memória
Combinações legais de operandos:
Operando destino
Operando fonte Registrador
de dados
Posição de
memória
Reg. de dados sim sim
Reg. de segmento não não
Posição de memória sim não
Exemplos de instruções válidas:
XCHG AX,WORD1 ;troca o conteúdo da posição de memória WORD
;com o do registrador AX
XCHG AH,BL ;troca o conteúdo do byte baixo de BX com o
;do byte alto de AX
Graficamente: suponha a instrução XCHG AH,BL
Antes Depois
14h FFh E0h FFh
C2h E0h C2h 14h
Graficamente: suponha a instrução ADD AX,DX
Antes Depois
0006h 0009h
0003h 0003h
Obs 1:
ADD BYTE1,BYTE2 ;instrução inválida
;esta restrição é contornada como segue
MOV AL,BYTE2 ;primeiro o conteúdo de BYTE2 vai para AL
ADD BYTE1,AL ;depois, o conteúdo de AL é somado ao da
;posição de memória BYTE1, resultado final
;em BYTE
Obs 2 : o resultado de SUB , se for negativo, estará armazenado no registrador
destino em complemento de 2.
INC destino
DEC destino
Usadas para adicionar 1 (incrementar) ou subtrair 1 (decrementar) ao/do
conteúdo de:
Exemplos:
INC CX ;incrementa o conteúdo de CX
INC WORD1 ;incrementa o conteúdo da posição de memória WORD
DEC BYTE2 ;decrementa o conteúdo da posição de memória BYTE
DEC CL ;decrementa o conteúdo de CL (byte baixo de CX)
Graficamente: suponha a instrução INC BYTE
Antes Depois
06h 07h
4.4 estrutura de um programa em Linguagem Montadora
O tamanho que os segmentos de código e de dados devem ter é especificado
pelo modelo de memória por meio da diretiva .MODEL.
Sintaxe: .MODEL modelo_de_memória
Modelo Descrição
SMALL Código em 1 segmento;
Dados em 1 segmento
MEDIUM Código em mais de 1 segmento;
Dados em 1 segmento
COMPACT Código em 1 segmento;
Dados em mais de 1 segmento
LARGE Código em mais de 1 segmento;
Dados em mais de 1 segmento;
Nenhum array maior que 64 Kbytes
HUGE Código em mais de 1 segmento;
Dados em mais de 1 segmento;
Arrays maiores que 64 Kbytes
Obs :
dados, o modelo apropriado é o SMALL.
Sintaxe: .DATA
Exemplo:
WORD1 DW A8h
MENSAGEM DB ‘Isto e uma mensagem’
LF EQU 0Ah
armazenar a pilha
tamanho
Sintaxe: .STACK tamanho
Exemplo:
.STACK 100h ;reserva 100h bytes para a área de pilha, um
;tamanho razoável para a maioria das aplicações
Obs :
principal;
4.5 Instruções de entrada e saída
IN e OUT -> instruções Assembly para acessar portas de E/S para periféricos
Não são utilizadas na maioria das aplicações:
(1) os endereços das portas de E/S variam conforme o modelo do PC
é mais fácil utilizar o BIOS ou o DOS para funções de E/S
Para acessar as rotinas de E/S do BIOS ou DOS utiliza-se a instrução:
INT número_de_interrupção
Obs: o programa em curso é interrompido, passando o controle para o DOS,
que realiza a operação de E/S e retorna o controle para o programa.
Exemplo:
INT 21h ;acessa um grande número de funções de E/S do DOS
Algumas funções DOS de E/S:
Função 1h : Entrada de um caracter simples pelo teclado
Acesso: AH = 1h
Resultado: AL = código ASCII do caracter digitado no teclado
Função 2h : Exibição de caracter simples no monitor de vídeo
Acesso: AH = 2h
DL = código ASCII do caracter a exibir
Resultado: exibição na tela do monitor