Escolar Documentos
Profissional Documentos
Cultura Documentos
Tópicos
Linguagem de Máquina e Linguagem Montadora
Introdução aos Montadores
Gerando um Programa Executável
Sintaxe do Assembly 8086
Formato de Dados
Estrutura de um Programa Assembly
Conjunto de Instruções de Movimento de Dados
Conjunto de Instruções Aritméticas
Conjunto de Instruções Lógicas
Conjunto de Instruções de Deslocamento e Rotação
Conjunto de Instruções de Controle do Programa (Desvios)
MACROS
1
Linguagem de Máquina
Linguagem de máquina
Linguagem de Máquina
• Instrução de 16 bits
Dado de 16 bits (W = 1)
Registro utilizado
Modo de endereçamento
?
2
Linguagem
Linguagem de máquina de Máquina
• Instrução de 16 bits
• Modo de endereçamento:
Linguagem de máquina
Linguagem de Máquina
Exemplo 1: MOV BP,SP
3
Linguagem
Linguagem de máquina de Máquina
Exemplo 2: MOV DL,[DI]
Linguagem
Linguagem de máquina de Máquina
Exemplo 3: MOV [1000H],DL
4
Linguagem
Linguagem de máquina de Máquina
Exemplo 4: MOV [BP],DL
Linguagem de Máquina e
Linguagem Montadora
5
Linguagem de Máquina e Linguagem Montadora
6
Linguagem de Máquina e Linguagem Montadora
Assembly e Assembler
(LINGUAGEM) (PROGRAMA)
7
Linguagem Montadora
Linguagem Montadora
8
Linguagem Montadora
Linguagem Montadora
9
Gerando um Programa
Executável
10
MASM (montador da Microsoft).
MASM
LINK.
11
Qual montador será utilizado na disciplina ?
12
Emulando o 8086
www.emu8086.com
13
Sintaxe do Assembly 8086
14
Sintaxe do Assembly 8086
O campo Rótulo:
15
Sintaxe do Assembly 8086
16
Sintaxe do Assembly 8086
Formato de Dados
17
Formato de dados
Formato de dados
18
Formato de dados
Tabela ASCII
Formato de dados
19
Formato de dados
Formato de dados
20
Formato de dados
Formato de dados
Tabela ASCII
21
Estrutura de um Programa
Assembly
Modelo Descrição
TINY Todos os registradores de Segmento (DS, CS,
SS e ES) têm o mesmo valor.
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
Código em mais de 1 segmento;
LARGE Dados em mais de 1 segmento;
Nenhum array maior que 64 Kbytes
Código em mais de 1 segmento;
HUGE Dados em mais de 1 segmento;
Arrays maiores que 64 Kbytes
22
Estrutura de um Programa Assembly
23
Estrutura de um Programa Assembly
24
Estrutura de um Programa Assembly
OBS:
Conjunto de Instruções de
Movimento de Dados
25
Conjunto de Instruç
Instruções de Movimento de Dados
Conjunto de Instruç
Instruções de Movimento de Dados
crescimento
PUSH AX da pilha
26
Conjunto de Instruç
Instruções de Movimento de Dados
• POP – Executa a operação inversa do PUSH.
POP BX
redução
da pilha
Conjunto de Instruç
Instruções de Movimento de Dados
27
Conjunto de Instruç
Instruções de Movimento de Dados
Conjunto de Instruç
Instruções de Movimento de Dados
28
Conjunto de Instruç
Instruções de Movimento de Dados
Conjunto de Instruç
Instruções de Movimento de Dados
• STOS – Armazena AL, AX ou EAX em localizações do SEGMENTO EXTRA
endereçadas por DI
29
Conjunto de Instruç
Instruções de Movimento de Dados
• MOVS – É uma das mais úteis instruções de strings, pois transfere dados entre
posições de memória.
• Operação no segmento de dados envolve SI
• Operação no segmento extra envolve DI
• A instrução transfere 1 byte, 1 word ou double-word do segmento de dados
endereçado por SI para o segmento extra endereçado por DI.
Exemplo
“scrollup” uma linha
do vídeo
Conjunto de Instruç
Instruções de Movimento de Dados
• Outras importantes instruções de transferência de dados
• XCHG – Troca o conteúdo entre registradores ou entre registradores e posições
de memória.
30
Conjunto de Instruç
Instruções de Movimento de Dados
• IN e OUT
• As instruções IN e OUT executam operações de I/O. Nestas operações os
conteúdos de AL, AX ou EAX são transferidos entre o dispositivo de I/O e o
microprocessador
• Formas:
Fixed Port: o número da porta segue o código da operação da instrução
Variable Port: o número da porta esta armazenado no registrador DX
Conjunto de Instruç
Instruções de Movimento de Dados
31
Conjunto de Instruções
Aritméticas
Conjunto de Instruç
Instruções Aritmé
Aritméticas
32
Conjunto de Instruç
Instruções Aritmé
Aritméticas
Conjunto de Instruç
Instruções Aritmé
Aritméticas
33
Conjunto de Instruç
Instruções Aritmé
Aritméticas
SUB AX, DI
SBB BX, SI
Conjunto de Instruç
Instruções Aritmé
Aritméticas
34
Conjunto de Instruç
Instruções Aritmé
Aritméticas
Conjunto de Instruç
Instruções Aritmé
Aritméticas
Para 8 bits:
• resultado em AX
Para 16 bits:
• resultado em DX e AX
35
Conjunto de Instruç
Instruções Aritmé
Aritméticas
• Divisão
• Pode ser executado em Byte, word ou double-word, considerando inteiro sinalizado (IDIV) ou não
sinalizado (DIV) – sempre utiliza o ACUMULADOR como DIVIDENDO.
• 386 em diante, realiza divisão em 32 bits.
• O Dividendo é sempre double-width, ou seja uma divisão de 8 bits divide um número de 16 bits
por um de 8 bits, uma divisão de 16 bits divide um número de 32 bits por um de 16 bits e uma
divisão de 32 bits divide um número de 64 bits por um de 32 bits.
• Dois tipos de erros:
• Divisão por zero
• Overflow
Para 8 bits:
• quociente em AL, e o resto para AH
Para 16 bits (dividendo DX e AX):
• quociente em AX, e o resto para DX
36
Conjunto de Instruç
Instruções Lógicas
XOR ?
Conjunto de Instruç
Instruções Lógicas
37
Conjunto de Instruç
Instruções Lógicas
• Instrução NOT
Aceita um operando. Realiza a inversão lógica do operando ou o
complemento 1.
NOT operando
• Instrução NEG
Aceita um operando. Realiza a inversão aritmética do operando, ou o
complemento 2. Muda o operando de positivo para negativo, ou vice-
versa.
NEG operando
Conjunto de Instruç
Instruções Lógicas
38
Conjunto de Instruções de
Deslocamento e Rotação
Conjunto de Instruç
Instruções de Deslocamento e Rotaç
Rotação
• Deslocamento
39
Conjunto de Instruç
Instruções de Deslocamento e Rotaç
Rotação
• Instruções que executarão mais rápido
Conjunto de Instruç
Instruções de Deslocamento e Rotaç
Rotação
• Rotação
40
Conjunto de Instruç
Instruções de Deslocamento e Rotaç
Rotação
• Comparação de strings
SCAS (String scan) CMPS (String compare)
Conjunto de Instruç
Instruções de Deslocamento e Rotaç
Rotação
41
Conjunto de Instruções de
Controle do Programa (Desvios)
Conjunto de Instruç
Instruções de Controle do Programa
EXEMPLO:
42
Conjunto de Instruç
Instruções de Controle do Programa
Conjunto de Instruç
Instruções de Controle do Programa
43
Conjunto de Instruç
Instruções de Controle do Programa
Saltos condicionais
são sempre saltos
curtos no 8086.
Conjunto de Instruç
Instruções de Controle do Programa
• Quando números sinalizados são comparados usa-se:
• JG, JL, JGE, JLE, JE e JNE
• Os termo greater e less se referem a números sinalizados
• Quando números não-sinalizados são comparados usa-se:
• JA, JB, JAE, JBE, JE e JNE
• Os termos above e below se referem a números não-sinalizados
Estas instruções
de salto podem
ser utilizados para
implementar em
linguagens de alto
nível estruturas
como IF-THEN,
DO-WHILE e
REPEAT-UNTIL.
44
Conjunto de Instruç
Instruções de Controle do Programa
• Saltos com registradores como operando: Neste tipo de instrução o conteúdo dos
registradores é transferido diretamente ao ponteiro de instruções.
Ex: JMP AX ; copia o conteúdo de AX em IP
Tecla - ASCII
‘1’ - 31H
‘2’ - 32H
‘3’ - 33H
-31H
Tecla - conversão
‘1’ - 0
‘2’ - 1
‘3’ - 2
45
• Saltos indiretos usando “index”: Uma instrução JMP pode ser utilizada com [ ] para
acesso direto à tabelas, por exemplo. O montador assume que estes saltos são do tipo near.
A menos que seja especificado outro tipo.
Conjunto de Instruç
Instruções de Controle do Programa
• Instrução LOOP:
• É uma combinação de decremento de CX com JNZ
• LOOP decrementa CX e se CX ≠ 0, salta para o endereço indicado pelo LABEL.
• LOOP – usa CX
46
Conjunto de Instruç
Instruções de Controle do Programa
• PROCEDIMENTOS:
Antes de apresentar as próximas instruções de Controle do Programa é preciso intoduzir
o conceito de PROCEDIMENTO (ou PROCEDURE, em inglês). O procedimento, ou
subrotina, é um conjunto de instruções que realiza uma tarefa específica.
Vantagens de utilizar procedimentos na programação Assembly:
• Como o código é reutilizável, salva espaço de memória.
• Torna mais simples o desenvolvimento do programa por torná-lo “modular”.
• Realiza um SALTO no programa, mas permite realizar um RETORNO.
RETORNO
Mas também há uma desvantagem:
• Consome uma parcela de tempo do processador para realizar o desvio para o
procedimento, e para retornar do procedimento.
Conjunto de Instruç
Instruções de Controle do Programa
• PROCEDIMENTOS:
M
instrução N
RET
NOME ENDP
47
Conjunto de Instruç
Instruções de Controle do Programa
Conjunto de Instruç
Instruções de Controle do Programa
48
Conjunto de Instruç
Instruções de Controle do Programa
Conjunto de Instruç
Instruções de Controle do Programa
• Instrução RET: Remove um número de 16 bits (near return) ou 32 bits (far return) da pilha e
coloca em IP ou em IP e CS
49
Conjunto de Instruç
Instruções de Controle do Programa
• INTRODUÇÃO ÀS INTERRUPÇÕES:
Uma interrupção funciona como um CALL gerado por hardware (derivado
externamente por um sinal nos pinos do processador relacionados a interrupções), ou
por software (derivado da execução de uma instrução ou de algum outro evento
interno). Nos dois casos, o programa é interrompido, e é feita a chamada a um
procedimento de atendimento à interrupção.
VETOR DE INTERRUPÇÃO ?
TABELA DE VETORES DE INTERRUPÇÃO ?
Conjunto de Instruç
Instruções de Controle do Programa
• INTRODUÇÃO ÀS INTERRUPÇÕES:
M
instrução N
IRET
NOME ENDP
50
Conjunto de Instruç
Instruções de Controle do Programa
Conjunto de Instruç
Instruções de Controle do Programa
51
MACROS
MACROS
• Utiliza-se as diretivas MACRO e ENDM para delimitar início e final de uma macro.
EXEMPLO:
M
instrução N
ENDM
52
MACROS
Bibliografia Básica
Zelenovsky, Ricardo e Mendonça, Alexandre, PC um
guia prático de Hardware e Interfaceamento, MZ Editora
Ltda, 4a. edição, 2006. (http://www.mzeditora.com.br/)
Brey, Barry, The Intel Microprocessors, Fourth Edition,
PHI, 1997.
Zanco, Wagner da Silva. Microcontroladores PIC
16F628A/648A – uma abordagem prática e objetiva,
Editora Érica, 2005.
Material da Disciplina
http://www.dee.ufc.br/~arthurp
53