Escolar Documentos
Profissional Documentos
Cultura Documentos
Goinia, 2009
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
PC
Contador de Programa
IP CS DS SS ES
FLAGS
Registrador de Flags
FLAGS
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Uma das principais inovaes do 8088 Separao entre lgica de execuo e lgica de controle do barramento. Foram criados dois blocos que funcionam de forma assncrona: Unidade de Execuo (EU) e a Unidade de Interface com o Barramento (BIU). A EU tem como funo processar (decodificar e executar) instrues obtidas da BIU. A EU constituda de: Registradores de Dados, Registradores de Endereos, Unidade Lgica e Aritmtica (ALU) e Unidade de Controle.
A BIU tem apenas funes de hardware: Controla o acesso ao barramento (linhas de endereamento, linhas de dados e sinais de controle). A BIU constituda de: Lgica de interface com o barramento, Registradores de segmento, Lgica para endereamento de memria (somador) e Fila de instrues (4 bytes para o 8088 e 6 bytes para o 8086).
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Procedimento de trabalho do 8088: A BIU coloca o contedo do IP (que somado ao registrador CS) no barramento para efetuar a busca de instruo; O registrador IP incrementado (aponta para a prxima instruo); A instruo lida passada para a fila; A EU pega a primeira instruo da fila; Enquanto a EU executa esta instruo a BIU faz uma nova busca de instruo para preencher a fila. Se a instruo a ser executada pela EU for muito demorada a BIU preenche toda a fila. H 2 situaes em que no so aproveitadas as instrues contidas na fila. So elas: Na execuo de instrues de desvio. Neste caso a fila descartada (ou seja, sobrescrita); Quando a instruo faz referncia memria.
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Segmentao
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys
Microprocessador 8086/8088
Segmentao consiste em combinar 2 registradores de 16 bits para gerar um endereo de memria de 20 bits Registrador de Segmento
+
Registrador de Offset
10
Microprocessador 8086/8088
XXXX0 Registrador de Segmento (16 bits) 0YYYY Registrador de Offset (16 bits)
15
Destination Index - DI
11 Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 11Ncleo Prof. Jos Wilson Lima Nerys
Memria
Offset
Byte Endereado
Segment o
16
Incio do Segmento
Exemplo: SEGMENTO = 2000H; OFFSET = 2000H Representao: 2000h:2000h Endereo Fsico = 20000 + 02000h = 22000h Se o segmento for 4000h, tem-se: Representao: 4000h:2000h Endereo Fsico = 40000h + 02000h = 42000h
de Estudo e Pesquisa em Processamento de Energia e Qualidade 12Ncleo Prof. Jos Wilson Lima Nerys
12
Microprocessador 8086/8088
64 kB
64 kB
de Estudo e Pesquisa em Processamento de Energia e Qualidade 13Ncleo Prof. Jos Wilson Lima Nerys
13
Microprocessador 8086/8088
Multiplicidade de Endereos
Os 4 registradores de segmento (CS, DS, ES e SS) podem apontar para qualquer regio de 64 kB, no espao de 1 MB. Uma vez setados, haver uma regio de 64kB para cada segmento. Essas regies podem estar, ou no, sobrepostas total ou parcialmente. A sobreposio pode resultar em multiplicidade de endereos: o mesmo endereo a partir de diferentes segmentos FFFFFH 64 kB
Endereo Fsico
CS SS 16 16 64 kB
00000H
de Estudo e Pesquisa em Processamento de Energia e Qualidade 14Ncleo Prof. Jos Wilson Lima Nerys
14
Microprocessador 8086/8088
Multiplicidade de Endereos
EXEMPLO: supondo que SS=8F00h, SP=21F1h, CS=9020h, IP=0FF1h, os endereos fsicos para um acesso pilha e para a busca da prxima instruo so dados por: SS = 8F00h SP =21F1h Endereo Fsico 8F000 H + 021F1 H 911F1 H
de Estudo e Pesquisa em Processamento de Energia e Qualidade 15Ncleo Prof. Jos Wilson Lima Nerys
15
Microprocessador 8086/8088
Multiplicidade de Endereos
Exemplo: Endereo Fsico = 10020 h Possibilidades de pares SEGMENTO:OFFSET 1000h:0020h = 1000h * 10h + 20h 1001h:0010h = 1001h * 10h + 10h 1002h:0000h = 1002h * 10h + 00h Um segmento tem at 64 kBytes Como o segmento multiplicado por 16 na formao do endereo O espao mnimo entre dois segmentos consecutivos 16 bytes No intervalo de 64 kBytes h 6353616 = 4096 possibilidades diferentes de enderear a mesma posio fsica de memria.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 16Ncleo Prof. Jos Wilson Lima Nerys
16
Microprocessador 8086/8088
Registradores
de Estudo e Pesquisa em Processamento de Energia e Qualidade 17Ncleo Prof. Jos Wilson Lima Nerys
17
Microprocessador 8086/8088
Registradores
O 8088 tem 14 registradores de 16 bits, que podem ser classificados em grupos: Registradores de Dados (4) Data Register Registradores Apontadores e ndices (4) Pointer (2) e Index (2) Registradores de segmento (4) Segment Register Registrador Apontador de Instrues (1) Instruction Pointer Register Registrador de Flags (1) Flags Register
de Estudo e Pesquisa em Processamento de Energia e Qualidade 18Ncleo Prof. Jos Wilson Lima Nerys
18
Microprocessador 8086/8088
Registradores de Dados
15 AX BX CX DX AH BH CH DH 8 7 AL BL CL DL 0 Acumulador Base Contador Dados
Os Registradores de Dados so tambm chamados Registradores de Propsito Geral. So 4 registradores de 16 bits de uso geral, normalmente utilizados pelo conjunto de instrues para realizar operaes lgicas e aritmticas. Podem tambm ser usados como registradores de 8 bits para instrues envolvendo 1 byte.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 19Ncleo Prof. Jos Wilson Lima Nerys
19
Microprocessador 8086/8088
Registradores de Dados
AX Acumulador primrio Todas as operaes de I/O so realizadas atravs deste registrador. Operaes que utilizam dados imediatos necessitam de menos memria quando feitos atravs de AX. Algumas operaes com strings e instrues aritmticas pedem o uso deste registrador. BX Registrador Base Parece com registrador HL do 8085. o nico registrador de finalidade geral que pode ser utilizado no clculo de endereo de memria. Todas as referncias memria que usam esse registrador no clculo do endereo usam o registrador DS, como segmento default. CX Contador Parece com o registrador BC do 8085. decrementado durante operaes com loops e strings. Tipicamente, usado para controlar o nmero de repeties do loop. Tambm usado para rotaes e deslocamentos de vrios bits. DX Endereador de I/O e Registrador de Dados Parece com o registrador DE do 8085. Recebe o nome de registrador de dados, principalmente por fora dos mnemnicos. Em algumas operaes de I/O, fornece o endereo, coisa que nenhum outro registrador pode fazer. Tambm usado em operaes aritmticas, incluindo multiplicao e diviso, com o resultado a 32 bits. Pode ser usado por compiladores, juntamente com AX, para retornar valores de subrotinas.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 20Ncleo Prof. Jos Wilson Lima Nerys
20
Microprocessador 8086/8088
Este grupo de 4 registradores tipicamente usado para gerar endereos de memria efetivo (nome dado poro offset do endereo fsico). Apenas so usados em 16 bits. Podem ainda ser utilizados em operaes aritmticas e lgicas para gerar novos endereos efetivos.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 21Ncleo Prof. Jos Wilson Lima Nerys
21
Microprocessador 8086/8088
22
Microprocessador 8086/8088
Observao
No conjunto de instrues do 8088 nem todos os registradores so especificados. Em muitos casos, uma instruo pode usar um s registrador ou conjunto de registradores especficos. Para outras instrues, os registradores tm uso implcito.
Tabela: Operaes que implicam no uso especfico (implcito) de um determinado registrador.
Reg AX AL BX CX CL DX SP SI DI
Operaes multiplicao de word (16 bits), diviso de word, I/O de word multiplicao de byte, diviso de byte, I/O de byte, aritmtica decimal referncia de memria (semelhante ao reg. par HL do 8085) operao de strings, loops deslocamento, rotao multiplicao de word, diviso de word, end. indireto de I/O (0-65535) operao de stack operao de string (origem) operao de string (destino)
23 Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 23Ncleo Prof. Jos Wilson Lima Nerys
Registradores de Segmento
15 Code Segment Data Segment Stack Segment Extra Segment
Tipos de Referncia Memria Instruo de busca Operao de pilha Varivel Fonte string Destino string BP usado como reg. pointer BX usado como reg. pointer Segmento Base (default) CS SS DS DS ES SS DS
0 CS DS SS ES
Alternativo nenhum nenhum CS, ES, SS CS, ES, SS nenhum CS, DS, ES CS, SS, ES
24
de Estudo e Pesquisa em Processamento de Energia e Qualidade 24Ncleo Prof. Jos Wilson Lima Nerys
Registradores de Segmento
CS Segmento de Cdigo Para a busca (fetch) de cada instruo, o offset, definido por IP, adicionado ao endereo base definido por CS para o endereo da instruo. DS Segmento de Dados Todo acesso a dados usa este registrador como referncia, mas existem 3 excees: (a) endereos para acessos pilha so calculados usando o registrador de segmento de pilha (SS); (b) endereos para acessos a dados que usam o BP so calculados usando o SS e (c) operaes com strings, que usam o DI no clculo do endereo, so feitas usando ES. SS Segmento de Pilha Todos os acessos a dados que usam os registradores SP ou BP tomam como referncia o registrador de segmento de pilha (SS). ES Segmento Extra Operaes com strings, que usam DI para calcular o endereo, so feitas usando o registrador ES para definir o segmento.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 25Ncleo Prof. Jos Wilson Lima Nerys
25
Microprocessador 8086/8088
15 IP - instruction pointer
de Estudo e Pesquisa em Processamento de Energia e Qualidade 26Ncleo Prof. Jos Wilson Lima Nerys
26
Microprocessador 8086/8088
Assembly do 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 27Ncleo Prof. Jos Wilson Lima Nerys
27
Microprocessador 8086/8088
Conceito de Tipo Cada smbolo (nome de varivel, endereo, constante) tem um determinado tipo. Tipos da linguagem assembly ASM-86: BYTE PTR referencia uma varivel de 1 byte WORD PTR referencia uma varivel de 1 word DWORD PTR referencia uma varivel de 2 words Exemplo: BYTE PTR[BX] diz ao compilador que o contedo de BX byte
NEAR PTR referencia o endereo de destino de uma instruo de desvio do tipo near FAR PTR referencia o endereo de destino de uma instruo de desvio do tipo far NUMBER constante de 16 bits Obs.: near altera somente IP (intra segmento) far altera IP e CS (inter segmento)
de Estudo e Pesquisa em Processamento de Energia e Qualidade 28Ncleo Prof. Jos Wilson Lima Nerys
28
Microprocessador 8086/8088
Definio de Variveis: Ao escrever programas conveniente dar nomes a posies de memria: para isto utiliza-se pseudo-instrues. varivel DB ? varivel DW ? ; varivel do tipo "byte" com valor indefinido ; varivel do tipo byte com valor definido e igual a 3A H ; varivel do tipo "word" com valor indefinido
varivel DB 3A H
varivel DW 21AB H ; varivel do tipo word com valor igual a 21AB H Vetores: Vetores podem ser vistos como um conjunto de variveis. Um texto um exemplo de um vetor de bytes, cada caractere sendo representado por um cdigo ASCII. Vetor1 DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h Vetor2 DB Hello, 0 Os vetores Vetor1 e Vetor2 so idnticos. A frase Hello` convertida em bytes pelo compilador.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 29Ncleo Prof. Jos Wilson Lima Nerys
29
Microprocessador 8086/8088
Quando o vetor contm um elemento repetido, pode-se usar DUP para facilitar. nmero DUP (valor ou valores) nmero valor (es) Exemplos: Vetor1 DB 5 DUP(9) Vetor1 DB 9, 9, 9, 9, 9 Vetor2 DB 5 DUP(1, 2) Vetor2 DB 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 Obs.: Quando os valores so maiores que 255 ou menores que -128, usa-se DW, ao invs de DB, mas para textos (strings) deve-se usar sempre DB. quantidade de repeties a serem feitas expresso que o comando DUP ir duplicar
de Estudo e Pesquisa em Processamento de Energia e Qualidade 30Ncleo Prof. Jos Wilson Lima Nerys
30
Microprocessador 8086/8088
Obtendo o Endereo de uma Varivel: O endereo de uma varivel pode ser obtido de duas maneiras diferentes: atravs da instruo LEA (Load Effective Address) ou atravs do operador OFFSET. LEA mais poderosa porque permite a obteno do endereo de variveis indexadas. Exemplos: ORG 100h MOV AL, VAR1 LEA BX, VAR1 MOV BYTE PTR [BX], 44h MOV AL, VAR1 RET VAR1 DB 22h END ; programa comea no endereo CS:100h ; carrega AL com valor de VAR1, ou seja, 22h ; carrega BX com endereo de VAR1 ; modifica contedo de VAR1. ; carrega AL com novo valor de VAR1, ou seja, 44h
de Estudo e Pesquisa em Processamento de Energia e Qualidade 31Ncleo Prof. Jos Wilson Lima Nerys
31
Microprocessador 8086/8088
ORG 100h MOV MOV MOV MOV RET AL, VAR1 BX, OFFSET VAR1 BYTE PTR [BX], 44h AL, VAR1
; programa comea no endereo CS:100h ; carrega AL com valor de VAR1. ; carrega BX com endereo de VAR1. ; modifica o contedo de VAR1. ; carrega AL com novo valor de VAR1, ou seja, 44h.
Constantes: As constantes so como variveis, mas seus valores no podem ser modificados aps a compilao do programa. A diretiva para definio de uma constante o EQU. Exemplos: k EQU 5 MOV AX, k Essas duas instrues tm o mesmo efeito de MOV AX, 5
de Estudo e Pesquisa em Processamento de Energia e Qualidade 32Ncleo Prof. Jos Wilson Lima Nerys
32
Microprocessador 8086/8088
Flag de Overflow
Flag de Trap
de Estudo e Pesquisa em Processamento de Energia e Qualidade 33Ncleo Prof. Jos Wilson Lima Nerys
de Estudo e Pesquisa em Processamento de Energia e Qualidade 34Ncleo Prof. Jos Wilson Lima Nerys
34
Microprocessador 8086/8088
35
Microprocessador 8086/8088
36
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 37Ncleo Prof. Jos Wilson Lima Nerys
37
Microprocessador 8086/8088
Enquanto o 8085 possui apenas 5 canais de interrupo, o 8086 capaz de tratar de 256 interrupes diferentes, numeradas de 00h a FFh (ou 0 a 255 decimal). Ao contrrio do 8085, a localizao de cada interrupo no vem prdefinida no microprocessador; existe uma tabela com os vetores de interrupo, onde o endereo fsico de cada interrupo colocado. O 8086 possui trs tipos de interrupo: Interrupes Pr-definidas, reservadas ou excees, Interrupes por Hardware e Interrupes por Software.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 38Ncleo Prof. Jos Wilson Lima Nerys
38
Microprocessador 8086/8088
Interrupes do 8086/8088
Nmero da Interrup.
0
0000h:4i
CS:IP
255
0000h:03FCh
CS:IP
de Estudo e Pesquisa em Processamento de Energia e Qualidade 39Ncleo Prof. Jos Wilson Lima Nerys
39
Microprocessador 8086/8088
05 H1F H
0000H:0014H at 0000H:007C H
de Estudo e Pesquisa em Processamento de Energia e Qualidade 40Ncleo Prof. Jos Wilson Lima Nerys
41
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 42Ncleo Prof. Jos Wilson Lima Nerys
AH = 02 H BH = 0 a 3 DH = linha DL = coluna
OE H
AL = caractere
de Estudo e Pesquisa em Processamento de Energia e Qualidade 43Ncleo Prof. Jos Wilson Lima Nerys
de Estudo e Pesquisa em Processamento de Energia e Qualidade 44Ncleo Prof. Jos Wilson Lima Nerys
de Estudo e Pesquisa em Processamento de Energia e Qualidade 45Ncleo Prof. Jos Wilson Lima Nerys
46
Microprocessador 8086/8088
Exemplo: Mostra no vdeo a mensagem Microprocessadores 2009 #MAKE_COM# ; Instruo ao compilador para fazer um arquivo COM. INCLUDE "EMU8086.INC" ORG 100h LEA DX, MSG MOV AH,09H INT 21H RET MSG DB "Microprocessadores 2009",13,10,"$" END ;Carrega DX com o endereo de MSG ; carrega AH com o valor 09H ; chama interrupo 21 H
de Estudo e Pesquisa em Processamento de Energia e Qualidade 47Ncleo Prof. Jos Wilson Lima Nerys
47
Microprocessador 8086/8088
Exemplo: Pede um texto pelo vdeo. O texto ser armazenado na posio DS:DX #MAKE_COM# ORG 100H MOV AH, 0AH INT 21H MOV AH, 4Ch INT 21h RET ; Instruo ao compilador para fazer um arquivo COM.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 48Ncleo Prof. Jos Wilson Lima Nerys
48
Microprocessador 8086/8088
Exemplo: Mostra uma contagem decimal crescente no display de 7 segmentos #MAKE_COM# ORG 100H MOV AX, 00H LOOP: OUT 199, AX INC AX JMP LOOP END ; Instruo ao compilador para fazer um arquivo COM.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 49Ncleo Prof. Jos Wilson Lima Nerys
49
Microprocessador 8086/8088
NEAR PTR referencia o endereo de destino de uma instruo de desvio do tipo near FAR PTR referencia o endereo de destino de uma instruo de desvio do tipo far NUMBER constante de 16 bits Obs.: near altera somente IP (intra segmento) far altera IP e CS (inter segmento)
de Estudo e Pesquisa em Processamento de Energia e Qualidade 50Ncleo Prof. Jos Wilson Lima Nerys
50
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 51Ncleo Prof. Jos Wilson Lima Nerys
51
Microprocessador 8086/8088
varivel DB 3A H
varivel DW 21AB H ; varivel do tipo word com valor igual a 21AB H Vetores: Vetores podem ser vistos como um conjunto de variveis. Um texto um exemplo de um vetor de bytes, cada caractere sendo representado por um cdigo ASCII. Vetor1 DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h Vetor2 DB Hello, 0 Os vetores Vetor1 e Vetor2 so idnticos. A frase Hello` convertida em bytes pelo compilador.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 52Ncleo Prof. Jos Wilson Lima Nerys
52
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 53Ncleo Prof. Jos Wilson Lima Nerys
53
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 54Ncleo Prof. Jos Wilson Lima Nerys
54
Microprocessador 8086/8088
Constantes: As constantes so como variveis, mas seus valores no podem ser modificados aps a compilao do programa. A diretiva para definio de uma constante o EQU. Exemplos: k EQU 5 MOV AX, k
de Estudo e Pesquisa em Processamento de Energia e Qualidade 55Ncleo Prof. Jos Wilson Lima Nerys
55
Microprocessador 8086/8088
FORMATO DAS INSTRUES DO 8086 Instrues compactas otimizao do uso da memria e da velocidade de leitura das instrues codificao mais complexa do que a do 8085 Instrues com comprimento de 1 a 6 bytes Instrues no precisam ocupar exatamente 1 byte bits restantes podem ser usados
de Estudo e Pesquisa em Processamento de Energia e Qualidade 56Ncleo Prof. Jos Wilson Lima Nerys
56
Microprocessador 8086/8088
Ou
Se mod = 1 1 o operando da instruo um registrador, que identificado em r/m Se a instruo envolver dois registradores o campo reg identifica o segundo registrador.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 57Ncleo Prof. Jos Wilson Lima Nerys
57
Microprocessador 8086/8088
58
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 59Ncleo Prof. Jos Wilson Lima Nerys
59
Microprocessador 8086/8088
Exemplo de aplicao: Tabelas, onde o endereo de leitura da tabela dado atravs do registrador de offset, que incrementado para varredura da tabela.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 60Ncleo Prof. Jos Wilson Lima Nerys
60
Microprocessador 8086/8088
Exemplo de aplicao: Tabelas, onde a posio inicial da tabela pode ser dada atravs da base; o ndice pode ento ser variado para varredura da tabela.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 61Ncleo Prof. Jos Wilson Lima Nerys
61
Microprocessador 8086/8088
Exemplo de aplicao: Tabelas, onde a posio inicial da tabela pode ser dada atravs da base; o ndice pode ento ser variado para varredura da tabela.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 62Ncleo Prof. Jos Wilson Lima Nerys
62
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 63Ncleo Prof. Jos Wilson Lima Nerys
63
Microprocessador 8086/8088
Modos de Endereamento Imediato Registrador Direto Indireto por Registro (BX, BP, SI, DI) Indexado (SI ou DI) Baseado (BP ou BX) Baseado e Indexado Baseado e Indexado com deslocamento Strings
Exemplo Mnemnico MOV AX, 1000H MOV DX, CX MOV AH, [1000H] MOV AX, [SI] MOV AX, [SI+6] MOV AX, [BP+2] MOV AX, [BX+SI] MOV AX, [BX+SI+5] MOVSB
Registrador de Segmento acessado Code Data Data Data Stack Data Stack DS DS DS SS DS SS CS DX CX
Operao AX 1000H AH [1000H] AL [SI]; AH [SI+1] AL [SI+6]; AH [SI+7] AL [BP+2]; AH [BP+3] AL [BX+SI]; AH [BX+SI+1] AL [BX+SI+5]; AH [BX+SI+6] [ES:DI] [DS:SI] se Flag D = 0 ento: SI SI+1 e DI DI+1 se Flag D = 1 ento: SI SI -1 e DI DI -1
64 Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 64Ncleo Prof. Jos Wilson Lima Nerys
de Estudo e Pesquisa em Processamento de Energia e Qualidade 65Ncleo Prof. Jos Wilson Lima Nerys
65
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 66Ncleo Prof. Jos Wilson Lima Nerys
66
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 67Ncleo Prof. Jos Wilson Lima Nerys
67
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 68Ncleo Prof. Jos Wilson Lima Nerys
68
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 69Ncleo Prof. Jos Wilson Lima Nerys
69
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 70Ncleo Prof. Jos Wilson Lima Nerys
70
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 71Ncleo Prof. Jos Wilson Lima Nerys
71
Microprocessador 8086/8088
Instrues de Transferncia de Dados Instrues de Strings Instrues Lgicas Instrues Aritmticas Instrues de Desvio Instrues de Controle
de Estudo e Pesquisa em Processamento de Energia e Qualidade 72Ncleo Prof. Jos Wilson Lima Nerys
72
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 73Ncleo Prof. Jos Wilson Lima Nerys
73
Microprocessador 8086/8088
Movimentao de dados entre dois registradores, entre um registrador e posio de memria, entre registradores e portas [I/O]. Formato: MOV destino, fonte
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP Memria: [BX], [BX+SI+7], varivel, etc Imediato: 5, -24, 3Fh, 10001101b, etc
de Estudo e Pesquisa em Processamento de Energia e Qualidade 74Ncleo Prof. Jos Wilson Lima Nerys
74
Microprocessador 8086/8088
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP SREG: DS, ES, SS, CS (somente como segundo operando) Memria: [BX], [BX+SI+7], varivel, etc Obs.: a instruo MOV no pode ser usada para definir os valores de CS e IP
de Estudo e Pesquisa em Processamento de Energia e Qualidade 75Ncleo Prof. Jos Wilson Lima Nerys
75
Microprocessador 8086/8088
Mnemnico MOV DL, 23 H MOV CL,char MOV BP, A8 MOV DS, AX MOX AX, BX MOV AL, BL MOV AX, CS MOV AX, [BX] MOV [BP], CL MOV AH, [SI]
Descrio Carrega registrador de 8 bits DL com valor 23 h Carrega registrador de 8 bits com cdigo ASCII do caractere Carrega registrador de 16 bits BP com valor 00A8 h Registrador de segmento DS carregado com contedo de AX Carrega AX com contedo de BX Carrega registrador de 8 bits AL com contedo de BL Carrega registrador AX com contedo do segmento CS Carrega AX com contedo do endereo de offset BX Carrega posio de offset BP com valor contido em CL Carrega AH com valor da posio cujo offset SI
de Estudo e Pesquisa em Processamento de Energia e Qualidade 76Ncleo Prof. Jos Wilson Lima Nerys
76
Microprocessador 8086/8088
Mnemnico MOV AX, [1000 H] MOV CL, MEMBY MOV CX, MEMWO MOV CX, [MEMWO] MOV BX, [BX+2] MOV [BP+2], BH MOV AX, [SI-6] MOV AX, [BX+SI] MOV BX, [BP+SI+3] Faz AL
Descrio [1000 H] e AH [1001 H] Carrega CL com posio da varivel de 1 byte MEMBY Carrega CX com posio da varivel de 1 word MEMWO Carrega CX com posio da varivel de 1 word MEMWO Carrega BX com contedo da posio BX+2 e BX+2+1 Carrega posio BP+2 com contedo do registrador BH AL [SI 6] e AH [SI 5] AL [BX + SI] e AH [BX + SI + 1] BL [BP + SI + 3] e BH [BP + SI + 3 + 1]
de Estudo e Pesquisa em Processamento de Energia e Qualidade 77Ncleo Prof. Jos Wilson Lima Nerys
77
Microprocessador 8086/8088
Observaes: Um registrador de segmento no pode ser carregado usando o modo imediato. Exemplos incorretos: MOV CS, 1000, MOV DS, 3A00. Somente o registrador BX e os ponteiros e ndices podem referenciar memria. Exemplos incorretos: MOV AX, [DX], MOV CX, [AX] Destino e fonte no podem especificar posies de memria ao mesmo tempo. Exemplo incorreto: MOV [BX], [SI]
de Estudo e Pesquisa em Processamento de Energia e Qualidade 78Ncleo Prof. Jos Wilson Lima Nerys
78
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 79Ncleo Prof. Jos Wilson Lima Nerys
79
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 80Ncleo Prof. Jos Wilson Lima Nerys
80
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 81Ncleo Prof. Jos Wilson Lima Nerys
81
Microprocessador 8086/8088
Exemplo 1: O programa a seguir demonstra o uso de instrues de transferncia de dados. O caractere A escrito diretamente na memria de vdeo. (Ex1 2006.asm) Mnemnico
#MAKE_COM# ORG 100h MOV AX, 0B800h MOV DS, AX MOV CL, 'A' MOV CH, 01011111b MOV BX, 15Eh MOV [BX], CX HLT
Descrio
Diretiva para o compilador gerar um arquivo .com Diretiva que indica o endereo inicial do programa: 0100 H Carrega registrador AX com valor B800 H Copia valor de AX para DS, definindo segmento de dados Carrega CL com o cdigo ASCII do caractere A, isto , 41 H Carrega CH com o valor binrio 01011111 b = 5F H Carrega registrador BX com valor 015E H Copia contedo de CX na posio DS:BX, ou seja, B800:015E, que um endereo do vdeo. Assim, A aparece no vdeo. Pra programa
de Estudo e Pesquisa em Processamento de Energia e Qualidade 82Ncleo Prof. Jos Wilson Lima Nerys
82
Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 83Ncleo Prof. Jos Wilson Lima Nerys
83
Microprocessador 8086/8088
Instrues de Strings
de Estudo e Pesquisa em Processamento de Energia e Qualidade 84Ncleo Prof. Jos Wilson Lima Nerys
84
Microprocessador 8086/8088
Instrues de Strings
Instrues para movimentao de blocos de dados (ou seja, vrios bytes). O registrador de segmento DS utilizado como base e o registrador de ndice SI (Source Index) como offset para o clculo do endereo fonte. Simbologia: DS:SI. (Obs.: aceita registrador de segmento alternativo, por exemplo, CS, SS e ES). O registrador de segmento ES utilizado como base e o registrador de ndice DI (Destination Index) como offset para o clculo do endereo destino. Simbologia: ES:DI (Obs.: no aceita registrador de segmento alternativo. Dever ser sempre ES). A flag D (Direction Flag) consultada nestas operaes.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 85Ncleo Prof. Jos Wilson Lima Nerys
85
Microprocessador 8086/8088
Descrio Copia bloco de dados de uma regio para outra da memria. Origem: regio DS:SI (a origem sempre do segmento DS) Destino: regio ES:DI (o destino ES, mas poderia ser CS, DS ou SS) Idntico ao anterior, mas a movimentao um Word por vez.
Armazena o byte em AL no endereo ES:DI. (Poderia ser CS, DS ou SS) ES:[DI] AL. Se D = 0 incrementa DI; se D = 1 decrementa DI Armazena o word em AX no endereo ES:DI. (Poderia ser CS, DS ou SS) ES:[DI] AL. Se D = 0 incrementa DI; se D = 1 decrementa DI Carrega AL com byte da posio ES:DI AL DS:[SI]. Se D = 0 incrementa SI; Se D = 1 decrementa SI Carrega AX com word da posio ES:DI AL DS:[SI]. Se D = 0 incrementa SI; Se D = 1 decrementa SI Compara bloco de bytes de duas regies de memria Compara bloco de word de duas regies de memria
LODS BYTE PTR AL, ES:[DI] LODS WORD PTR AX, ES:[DI]
de Estudo e Pesquisa em Processamento de Energia e Qualidade 86Ncleo Prof. Jos Wilson Lima Nerys
86
Microprocessador 8086/8088
Descrio Armazena o byte em AL no endereo padro ES:DI. ES:[DI] AL. Se D = 0 incrementa DI; se D = 1 decrementa DI Armazena o word em AX no endereo padro ES:DI. ES:[DI] AL ; ES:[DI + 1] AH. Se D = 0 DI DI + 2; Se D = 1 DI DI -2 Copia em AL o byte localizado no endereo padro DS:SI. AL DS:[SI]. Se DF=0 incrementa SI; Se DF=1 decrementa SI Copia em AX o word localizado no endereo padro DS:SI. AL DS:[SI]; AH DS:[SI+1]. Se DF=0 SI SI+2; Se DF=1 SI SI -2 Copia bytes da regio de origem padro (DS:SI) para a regio de destino padro (ES:DI). Sendo a origem e o destino as regies padres (ao contrrio da instruo MOVS), a instruo no precisa de argumentos. ES:[DI] DS:[SI]. Se D = 0, incrementa SI e DI; Se D = 1, decrementa SI e DI. Copia words da regio de origem padro (DS:SI) para a regio de destino padro (ES:DI). Sendo a origem e o destino as regies padres (ao contrrio da instruo MOVS), a instruo no precisa de argumentos. ES:[DI] DS:[SI]; ES:[DI+1] DS:[SI+1]. Se D = 0, DI DI + 2 e SI SI + 2; Se D = 1, DI DI 2 e SI SI 2 Compara os bytes das posies DS:SI e ES:DI e atualiza Flags. DS:[SI] ES:[DI]. Compara os words das posies DS:SI e ES:DI e atualiza Flags. DS:[SI+1:SI] ES:[DI+1:DI].
MOVSW
CMPSB CMPSW
de Estudo e Pesquisa em Processamento de Energia e Qualidade 87Ncleo Prof. Jos Wilson Lima Nerys
87
Microprocessador 8086/8088
Uso do Prefixo REP (Repeat): Precedendo as instrues de transferncia de strings com "REP" faz com que estas instrues sejam repetidas o nmero de vezes igual ao contedo do registrador CX.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 88Ncleo Prof. Jos Wilson Lima Nerys
88
Microprocessador 8086/8088
Exemplo 4: Um bloco de memria de 10 bytes com caractere "A3" armazenado na memria, a partir do endereo fsico E0000 H. (Ex4-2006 mem.asm)
Mnemnico #make_COM# ORG 100h MOV AX, 0E000 H MOV ES, AX MOV DI, 0000 MOV AL, 0A3 H CLD MOV CX, 10 REP STOSB HLT Diretiva para o compilador Diretiva para o compilador AX = E000 h Segmento especial ES = AX = E000 h DI = 0000h ES:DI = E0000 + 00000 = E0000 h Byte a ser armazenado colocado em AL clear direction flag (resseta flag "direo": modo auto-incremento) Faz CX = 10 Pra programa sero armazenado 10 bytes a partir de E0000 h Repete instruo 10 vezes programa comea na posio 100h Descrio
de Estudo e Pesquisa em Processamento de Energia e Qualidade 89Ncleo Prof. Jos Wilson Lima Nerys
89
Microprocessador 8086/8088
Exemplo 5: Copiar um bloco de memria de 1000 bytes do endereo fsico A1000H para o endereo fsico E1000 H.
Mnemnico MOV AX, 0A000 H MOV DS, AX MOV SI, 1000 H MOV AX, 0E000 H MOV ES, AX MOV SI, 1000 H MOV DI, 1000 H CLD MOV CX, 03E7 H REP MOVSB AX = A000 H DS SI = 1000h AX = E000 h ES Descrio valor que ser passado para registrador de segmento
Segmento de dados DS = AX = A000 h DS:SI = E0000 + 00000 = A1000 h valor que ser passado para registrador de segmento
Segmento especial ES = AX = E000 h Registrador de offset SI = 1000 h Registrador de offset DI = 1000 h Faz CX = 03E7 h DS:SI = A1000 H ES:DI = E1000 H
clear direction flag (resseta flag "direo": modo auto-incremento) sero armazenado 1000 bytes a partir de E0000 h sero copiados 1000 bytes Repete instruo 1000 vezes
de Estudo e Pesquisa em Processamento de Energia e Qualidade 90Ncleo Prof. Jos Wilson Lima Nerys
90
Microprocessador 8086/8088
Instrues Lgicas
de Estudo e Pesquisa em Processamento de Energia e Qualidade 91Ncleo Prof. Jos Wilson Lima Nerys
91
Microprocessador 8086/8088
Instrues Lgicas Referem-se a funes de lgica booleanas; Cada instruo realizada bit a bit; H tambm instrues de rotao e deslocamento; H 5 instrues booleanas: NOT, AND, OR, XOR, TEST.
de Estudo e Pesquisa em Processamento de Energia e Qualidade 92Ncleo Prof. Jos Wilson Lima Nerys
92
Microprocessador 8086/8088
Mnemnico NOT BX NOT BYTE PTR [SI] NOT WORD PTR [SI] AND CX, DX AND BL, BYTE PTR [SI] AND AX, 8000 H OR CX, DX OR BL, BYTE PTR [SI] OR AX, 8000 XOR CL, DH XOR BX, WORD PTR [SI] XOR AX, 8000 TEST CX, DX Funo XOR entre CL e DH
Descrio BX complementado (seus bits so invertidos) Byte apontado por SI complementado Word apontado por SI complementado Funo AND entre CX e DX Funo AND entre BL e contedo do Byte apontado por SI Funo AND entre AX e 8000 H Funo OR entre CX e DX
Funo XOR entre BX e o Word apontado por SI Semelhante ao AND, apenas no altera os operandos. utilizado quando se deseja testar vrios bits: se o teste do 1o bit fracassa, pode-se testar o 2o bit.
93
Microprocessador 8086/8088
EXEMPLO: Determine o estado do registrador AL e das flags aps as seqncia de instrues: MOV AL, 6D MOV BH, 40 AND AL, BL Resultado das Flags: C=0 no houve transporte do bit 7 para o 8 na operao de 8 bits executada Z=1 o resultado da operao zero S=0 o bit mais significativo aps a operao zero (nmero positivo) O=0 no houve overflow na operao. P=1 h um nmero par de bits 1 nos 8 primeiros bits, aps a operao (nmero de 1s = 0) A= 0 no houve transporte do bit 3 para o bit I=1 interrupo desabilitada D=0 os registradores SI e DI sero incrementados nas operaes com string
de Estudo e Pesquisa em Processamento de Energia e Qualidade 94Ncleo Prof. Jos Wilson Lima Nerys
94
Microprocessador 8086/8088
Rodar esquerda 1 vez e Rodar direita CL vezes Rodar esquerda 1 vez atravs de CY Rodar direita atravs do CY CL vezes.
95 Microprocessador 8086/8088
RCL AL, 1
RCR DL, CL
de Estudo e Pesquisa em Processamento de Energia e Qualidade 95Ncleo Prof. Jos Wilson Lima Nerys
Instrues Aritmticas
de Estudo e Pesquisa em Processamento de Energia e Qualidade 96Ncleo Prof. Jos Wilson Lima Nerys
96
Microprocessador 8086/8088
Mnemnico
ADD SI, DX ADD BYTE PTR [BX], CH ADD DI, 6000 ADC SI, DX ADC BYTE PTR [BX], CL SUB AX, BX SUB BL, 34 SBB AX, CX SBB BL, 34 DAA DAS AAA AAS
Descrio
soma de registradores
soma de registradores com carry subtrao de registradores subtrao de cte imediata subtrao de registradores com borrow subtrao de cte imediata com borrow ajuste decimal para adio ajuste decimal para subtrao ajuste ASCII para adio ajuste ASCII para subtrao
de Estudo e Pesquisa em Processamento de Energia e Qualidade 97Ncleo Prof. Jos Wilson Lima Nerys
97
Microprocessador 8086/8088
Mnemnico INC CL INC WORD PTR [SI] DEC CX DEC WORD PTR [SI] NEG DX NEG WORD PTR [SI] CMP BL, BH CMP [BX], CX MUL BL MUL CX IMUL BL DIV BL DIV CX IDIV BL
Descrio incremento de registrador incremento de byte apontado por SI decremento de registrador complemento de 2 de registrador comparao entre dois registradores, BL e BH comparao entre word apontado por BX e CX multiplicao de byte: AX AL * BL multiplicao de word: DX:AX AX * CX multiplicao de nmero com sinal diviso de byte: AX AL / BL (AL: quociente; AH: resto) diviso de word: DX:AX AX / CX (AX: quoc.; DX: resto) diviso de nmero com sinal
98 Microprocessador 8086/8088
de Estudo e Pesquisa em Processamento de Energia e Qualidade 98Ncleo Prof. Jos Wilson Lima Nerys
Instrues de Desvio
de Estudo e Pesquisa em Processamento de Energia e Qualidade 99Ncleo Prof. Jos Wilson Lima Nerys
99
Microprocessador 8086/8088
desvia para LABEL se flag carry = 0 (se no h carry) desvia para LABEL se MSB =1 (flag de sinal =1) decrementa CX e desvia para LABEL se CX 0 decrementa CX e desvia para LABEL se CX 0 e ZF = 1
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 100 Prof. Jos Wilson Lima Nerys
100
Microprocessador 8086/8088
Mnemnico
PUSH e POP PUSH CX PUSH [DI+2] POP DS PUSHF POPF CALL DELAY CALL [BX] CALL BX RET IRET INT nn salva registrador CX na pilha
Descrio
S pode ser aplicado a registrador de 16 bits
salva posio de memria apontada por DI+2 e DI+3 Recupera DS da pilha Salva registrador de Flags na pilha Recupera registrador de Flags da pilha CALL e RETURN chamada de sub-rotina "DELAY" chamada de sub-rotina iniciada pelo contedo de memria apontado por BX: IP [BX+1:BX] chamada de sub-rotina iniciada pelo BX: IP BX retorno de sub-rotina retorno de rotina de interrupo (restaura CS e IP) Interrupes por Software Guarda na pilha o endereo de retorno (CS:IP), antes de chamar a interrupo nn. 101 Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 101 Prof. Jos Wilson Lima Nerys
Instrues de Controle
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 102 Prof. Jos Wilson Lima Nerys
102
Microprocessador 8086/8088
Mnemnico STI CLI STC CLC CMC STD CLD HLT WAIT NOP LOCK instruction seta flag Interrupo resseta flag Interrupo seta carry flag resseta carry flag complementa carry flag seta flag direo resseta flag direo para a CPU
Descrio
para a CPU at o pino test ficar ativo sem operao (utilizado para gerar delay) coloca Pino LOCK em "0" durante a execuo da prxima instruo (instruction)
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 103 Prof. Jos Wilson Lima Nerys
103
Microprocessador 8086/8088
Exemplos Gerais
Exemplo 6: Adiciona o contedo de dois registradores Programa: Ex6-2006 - adicao.asm
Mnemnico #make_BIN# MOV AX, 5 MOV BX, 10 ADD AX, BX SUB AX,1 HLT Descrio Diretiva do compilador para gerar um arquivo .bin Registrador AX = 0005 (decimal) Registrador BX = 0010 (decimal) Faz AX Faz AX AX + BX AX = 0005 h + 000A h = 000F h (15 dec) AX = 000F 0001 = 000E h (14 dec) AX 0001 h
Pra programa
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 104 Prof. Jos Wilson Lima Nerys
104
Microprocessador 8086/8088
Exemplo 7: Calcula a soma dos elementos do vetor V1 e armazena o resultado na varivel V2. Programa: Ex7-2006 - vetor.asm
Rtulo Mnemnico #make_BIN# MOV CX, 5 MOV AL, 0 MOV BX, 0 Next: ADD AL, V1[BX] MOV V1[BX], BL INC BX LOOP Next MOV V2, AL HLT V1 DB 4, 3, 2, 1, 0 V2 DB 0 Descrio Diretiva do compilador para gerar um arquivo .bin Nmero de elementos CX = 5 (decimal) Registrador AL registrar a soma dos elementos (valor inicial = 0) BX o indexador. Valor inicial = 0. Faz AL AL + [V1 + BX]. Contedo da posio V1 + BX. Modifica o contedo da posio V1 + BX com o valor de BL Incrementa BX Retorna para Next at o contador CX = 0. Decrementa CX automaticamente Armazena contedo de AL na varivel V2 Pra programa Valores do vetor V1 Valor inicial da varivel V2 105 Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 105 Prof. Jos Wilson Lima Nerys
Exemplo 8: Carrega registradores com valores em notao binria, hexadecimal e octal. Programa: Ex8-2006 - notacao.asm
Mnemnico #make_BIN# MOV BL, 0Ah MOV CL, 10o ADD AL, BL SUB AL, CL HLT Descrio Diretiva do compilador para gerar um arquivo .bin Carrega registrador com o hexadecimal de 10 Carrega CL com o valor octal que corresponde a 8 Adicional o contedo de BL ao contedo de AL (5 + 10 = 15) Subtrai o contedo de CL do contedo de AL (15 8 = 7)
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 106 Prof. Jos Wilson Lima Nerys
106
Microprocessador 8086/8088
PROCEDURES
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 107 Prof. Jos Wilson Lima Nerys
107
Microprocessador 8086/8088
PROCEDURES
So subrotinas, que podem ser chamadas para realizar uma tarefa especfica Sintaxe: Nome PROC Instrues da subrotina RET Nome ENDP Obs.: O nome da subrotina deve vir no comeo e no fim. Isso usado para verificao do fechamento da subrotina. A instruo RET usada para retorno ao sistema operacional.
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 108 Prof. Jos Wilson Lima Nerys
108
Microprocessador 8086/8088
CALL m1 MOV AX, 2 ADD AX,BX RET m1 PROC MOV BX, 5 RET m1 ENDP END
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 109 Prof. Jos Wilson Lima Nerys
109
Microprocessador 8086/8088
Exemplo de Procedure (Ex10-2006 subrotina2.asm): ORG 100h MOV AL, 1 MOV BL, 5 CALL m2 CALL m2 CALL m2 CALL m2 RET ; retorna para o sistema operacional. m2 PROC MUL BL RET m2 ENDP END
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 110 Prof. Jos Wilson Lima Nerys
110
Microprocessador 8086/8088
PROCEDURES - Ex11-2006 subrotina3.asm ORG 100h LEA SI, msg ; carrega SI com endereo da mensagem msg. CALL print_me RET ; retorna para o sistema operacional. print_me PROC next_char: CMP b.[SI], 0 ; verifica se o caractere zero, para encerrar programa. JE stop ; vai para o final do programa se [SI] = 0. Jump if Equal MOV AL, [SI] ; obtm cdigo ASCII do caractere a ser impresso MOV AH, 0Eh ; subfuno para imprimir mensagem no vdeo INT 10h ; interrupo para imprimir no vdeo. ADD SI, 1 ; incrementa indexador SI. JMP next_char ; voltar para buscar outro caractere. stop: RET ; retorna para a linha seguinte ao ponto de chamada. print_me ENDP msg DB Microprocessadores 2006', 0 ; string terminada com zero. END
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 111 Prof. Jos Wilson Lima Nerys
111
Microprocessador 8086/8088
Pilha
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 112 Prof. Jos Wilson Lima Nerys
112
Microprocessador 8086/8088
Pilha uma rea da memria para guardar dados temporariamente e funciona de forma semelhante pilha do 8085. A pilha usada guardar o endereo de retorno de instrues CALL e de chamadas de interrupo. O programador tambm pode guardar dados de 16 bits atravs da instruo PUSH, e retirar com a instruo POP. Sintaxe: PUSH REG PUSH SREG PUSH memria PUSH imediato REG: AX, BX, CX, DX, DI, SI, BP, SP. SREG: DS, ES, SS, CS. memria: [BX], [BX+SI+7], varivel de 16 bits imediato: 5, -24, 3Fh, 10001101b, etc...
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 113 Prof. Jos Wilson Lima Nerys
113
Microprocessador 8086/8088
Sintaxe: POP REG POP SREG POP memria REG: AX, BX, CX, DX, DI, SI, BP, SP. SREG: DS, ES, SS, (exceto CS). memria: [BX], [BX+SI+7], varivel de 16 bits, etc... Exemplo: (Ex12-2006 pilha.asm) ORG 100h MOV AX, 1234h PUSH AX ; armazena o valor de AX na pilha. MOV AX, 5678h ; modifica o valor de AX. POP AX ; restabelece o valor inicial de AX. RET END
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 114 Prof. Jos Wilson Lima Nerys
114
Microprocessador 8086/8088
Macros
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 115 Prof. Jos Wilson Lima Nerys
115
Microprocessador 8086/8088
Macros so usadas para executar tarefas especficas, para facilitar a elaborao de programas. So parecidas com Procedure, a diferena est em que aps a compilao as macros so substitudas por instrues normais do programa. Se uma macro for chamada 10 vezes, o compilador expande o cdigo do programa 10 vezes. Na Procedure o controle do programa transferido para a regio de memria em que ela est e retorna ao programa principal aps o RET. Definio de Macros: Nome MACRO [parmetros] Instrues ENDM
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 116 Prof. Jos Wilson Lima Nerys
116
Microprocessador 8086/8088
Ao contrrio das Procedures uma macro deve ser definida antes do programa principal que a utiliza. E no precisa de instruo CALL para chamada. Exemplo: (Ex13-2006 macro.asm) Teste MACRO p1, p2, p3 MOV AX, p1 MOV BX, p2 MOV CX, p3 ENDM ORG 100h Teste 1, 2, 3 Teste 4, 5, DX RET
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 117 Prof. Jos Wilson Lima Nerys
117
Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 118 Prof. Jos Wilson Lima Nerys
118
Microprocessador 8086/8088
BIBLIOTECA DO Emu8086 emu8086.inc Contm macros e procedures pr-definidas, de forma a facilitar a elaborao de programas. Alguns exemplos: Macros: PUTC char macro com 1 parmetro. Imprime um caractere ASCII na posio atual do cursor GOTOXY coluna, linha macro com 2 parmetros, sete posio do cursor PRINT string macro com 1 parmetro, imprime uma string PRINTN string macro com 1 parmetro, imprime uma string. Diferencia de PRINT string porque muda automaticamente de linha ao final da string. CURSOROFF apaga o cursor de texto CURSORON liga o cursor de texto
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 119 Prof. Jos Wilson Lima Nerys
119
Microprocessador 8086/8088
BIBLIOTECA DO Emu8086 emu8086.inc Procedures: PRINT_STRING imprime strings terminadas em 0 na posio corrente do cursor. O endereo da string a ser impressa deve estar em DS:SI.macro com 1 parmetro. Imprime um caractere ASCII na posio atual do cursor. Antes da diretiva END dever ser declarado: DEFINE_PRINT_STRING PTHIS faz o mesmo que PRINT_STRING, mas recebe o endereo do texto da pilha e a mensagem deve vir logo depois da chamada dessa subrotina. Antes da diretiva END dever ser declarado: DEFINE_PTHIS GET_STRING obtm um texto terminado em 0 do usurio, a qual escrita no endereo DS:DI. O tamanho do buffer deve vir em DX. Antes da diretiva END dever ser declarado: DEFINE_GET_STRING CLEAR_SCREEN limpa o vdeo e seta o curso no topo. Antes da diretiva END dever ser declarado: DEFINE_CLEAR_STRING
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 120 Prof. Jos Wilson Lima Nerys
120
Microprocessador 8086/8088
BIBLIOTECA DO Emu8086 emu8086.inc Procedures: SCAN_NUM obtm um nmero com sinal atravs do teclado e guarda em CX. Antes da diretiva END dever ser declarado: DEFINE_SCAN_NUM PRINT_NUM imprime no vdeo um nmero com sinal, armazenado em AX. Antes da diretiva END dever ser declarado: DEFINE_PRINT_NUM PRINT_NUM_UNS imprime no vdeo um nmero sem sinal, armazenado em AX. Antes da diretiva END dever ser declarado: DEFINE_PRINT_NUM_UNS
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 121 Prof. Jos Wilson Lima Nerys
121
Microprocessador 8086/8088
122
Microprocessador 8086/8088
Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao include 'emu8086.inc' ORG 100h LEA SI, msg1 ; carrega em SI o offset de msg1 CALL print_string ; chama subrotina que imprime strings CALL scan_num ; chama subrotina de entrada de nmeros. MOV BX, CX ; transfere o nmero para BX. LEA SI, msg2 ; carrega em SI o offset de msg1 CALL print_string ; chama subrotina que imprime strings CALL scan_num ; chama subrotina de entrada de nmeros. MOV AX, CX ; transfere o nmero para AX. MUL BL ; mutiplica AX = AL*BL CALL pthis ; chama subrotina para imprimir o texto a seguir DB 13, 10, Produto dos nmeros: , 0 CALL print_num ; chama subrotina para imprimir nmero em AX. RET ; retorna para o sistema operacional. msg1 DB Entre com o primeiro nmero: , 0 msg2 DB Entre com o segundo nmero : , 0 DEFINE_SCAN_NUM DEFINE_PRINT_STRING DEFINE_PRINT_NUM DEFINE_PRINT_NUM_UNS ; necessrio para print_num. DEFINE_PTHIS END ; Diretiva para parar o compilador
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 123 Prof. Jos Wilson Lima Nerys
123
Microprocessador 8086/8088
Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao include 'emu8086.inc' ORG 100h LEA SI, msg1 CALL print_string CALL scan_num MOV BX, CX LEA SI, msg2 CALL print_string CALL scan_num MOV AX, CX IMUL BX LEA SI, msg3 CALL print_string CALL print_num RET
; carrega em SI o offset de msg1 ; chama subrotina que imprime strings ; chama subrotina de entrada de nmeros. ; transfere o nmero para AX. ; carrega em SI o offset de msg1 ; chama subrotina que imprime strings ; chama subrotina de entrada de nmeros.
; carrega em SI o offset de msg1 ; chama subrotina que imprime strings ; chama subrotina para imprimir nmero em AX. ; retorna para o sistema operacional.
msg1 DB "Entre com o primeiro nmero: ", 0 msg2 DB 13, 10, "Entre com o segundo nmero : ", 0 msg3 DB 13, 10, "Produto dos nmeros : ", 0 DEFINE_SCAN_NUM DEFINE_PRINT_STRING DEFINE_PRINT_NUM DEFINE_PRINT_NUM_UNS ; necessrio para print_num. END ; Diretiva para parar o compilador
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 124 Prof. Jos Wilson Lima Nerys
124
Microprocessador 8086/8088
#make_COM# ORG 100h reinicia: mov al, 00H mov cx, 31 contagem: out 199, al inc al loop contagem jmp reinicia ret end
; envia para o display de 7 segmentos o contedo de AL ; incrementa o contedo de AL ; decrementa CX e, se no for zero, volta para contagem ; aps CX = 0, volta para o incio do programa ; o programa volta para o sistema operacional ; encerra programa
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 125 Prof. Jos Wilson Lima Nerys
125
Microprocessador 8086/8088
include "emu8086.inc" ORG 100h mov al,00H mov cx,31 contagem: call PRINT_NUM_UNS call espaco inc al loop contagem ret espaco PROC push ax mov al," mov AH,0Eh int 10h pop ax RET espaco ENDP
; carrega AL com 00h ; carrega contador CX com 31 decimal ; chama subrotina que imprime nmero ; chama subrotina que avana um espao em branco ; incrementa AL ; decrementa CX e, se no for zero, volta para contagem
; incio da subrotina ; guarda AX na pilha ; carrega AL com espao em branco ; subfuno usada para imprimir contedo de AL no vdeo ; interrupo usada para imprimir no vdeo ; recupera valor de AX da pilha ; fim da subrotina espaco ; comando necessrio para fechar a subrotina ; diretiva necessria devido subrotina includa
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 126 Prof. Jos Wilson Lima Nerys
126
Microprocessador 8086/8088
#make_COM# ORG 100H lea dx,msg1 call show lea dx,linha call show lea dx,msg2 call show ret show proc near mov ah,09h int 21h ret endp
; carrega em DX offset da mensagem 1 ; chama subrotina que mostra mensagem ; carrega DX com offset da mudana de linha ; chama subrotina pra mudar de linha ; carrega DX com offset da mensagem 2 ; chama subrotina que mostra mensagem
; subrotina
db "Mensagem de Teste 1", "$" db 13, 10, "$" db "Mensagem de Teste 2", "$" end
127 Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade 127 Prof. Jos Wilson Lima Nerys