Académique Documents
Professionnel Documents
Culture Documents
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
Estudo e Pesquisa 11Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 12Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
12
Microprocessador 8086/8088
64 kB
64 kB
Estudo e Pesquisa 13Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 14Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 15Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 16Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
16
Microprocessador 8086/8088
Registradores
Estudo e Pesquisa 17Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 18Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 19Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 20Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 21Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 23Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 24Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 25Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
25
Microprocessador 8086/8088
15 IP - instruction pointer
Estudo e Pesquisa 26Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
26
Microprocessador 8086/8088
Assembly do 8086/8088
Estudo e Pesquisa 27Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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)
Estudo e Pesquisa 28Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 29Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 30Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 31Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 32Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
32
Microprocessador 8086/8088
Flag de Overflow
Flag de Trap
Estudo e Pesquisa 33Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
Estudo e Pesquisa 34Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
34
Microprocessador 8086/8088
35
Microprocessador 8086/8088
36
Microprocessador 8086/8088
Estudo e Pesquisa 37Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 38Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
38
Microprocessador 8086/8088
Interrupes do 8086/8088
Nmero da Interrup.
0
0000h:4i
CS:IP
255
0000h:03FCh
CS:IP
Estudo e Pesquisa 39Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
39
Microprocessador 8086/8088
05 H1F H
0000H:0014H at 0000H:007C H
Estudo e Pesquisa 40Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
41
Microprocessador 8086/8088
Estudo e Pesquisa 42Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
AH = 02 H BH = 0 a 3 DH = linha DL = coluna
OE H
AL = caractere
Estudo e Pesquisa 43Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
Estudo e Pesquisa 44Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
Estudo e Pesquisa 45Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 47Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 48Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 49Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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)
Estudo e Pesquisa 50Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
50
Microprocessador 8086/8088
Estudo e Pesquisa 51Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 52Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
52
Microprocessador 8086/8088
Estudo e Pesquisa 53Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
53
Microprocessador 8086/8088
Estudo e Pesquisa 54Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 55Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 56Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 57Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
57
Microprocessador 8086/8088
58
Microprocessador 8086/8088
Estudo e Pesquisa 59Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 60Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 61Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 62Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
62
Microprocessador 8086/8088
Estudo e Pesquisa 63Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 64Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
Estudo e Pesquisa 65Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
65
Microprocessador 8086/8088
Estudo e Pesquisa 66Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
66
Microprocessador 8086/8088
Estudo e Pesquisa 67Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
67
Microprocessador 8086/8088
Estudo e Pesquisa 68Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
68
Microprocessador 8086/8088
Estudo e Pesquisa 69Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
69
Microprocessador 8086/8088
Estudo e Pesquisa 70Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
70
Microprocessador 8086/8088
Estudo e Pesquisa 71Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
71
Microprocessador 8086/8088
Instrues de Transferncia de Dados Instrues de Strings Instrues Lgicas Instrues Aritmticas Instrues de Desvio Instrues de Controle
Estudo e Pesquisa 72Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
72
Microprocessador 8086/8088
Estudo e Pesquisa 73Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 74Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 75Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 76Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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]
Estudo e Pesquisa 77Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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]
Estudo e Pesquisa 78Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
78
Microprocessador 8086/8088
Estudo e Pesquisa 79Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
79
Microprocessador 8086/8088
Estudo e Pesquisa 80Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
80
Microprocessador 8086/8088
Estudo e Pesquisa 81Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 82Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
82
Microprocessador 8086/8088
Estudo e Pesquisa 83Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
83
Microprocessador 8086/8088
Instrues de Strings
Estudo e Pesquisa 84Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 85Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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]
Estudo e Pesquisa 86Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 87Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 88Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 89Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 90Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
90
Microprocessador 8086/8088
Instrues Lgicas
Estudo e Pesquisa 91Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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.
Estudo e Pesquisa 92Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 94Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 95Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
Instrues Aritmticas
Estudo e Pesquisa 96Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 97Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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
Estudo e Pesquisa 98Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
Instrues de Desvio
Estudo e Pesquisa 99Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos
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 100 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 101 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
Instrues de Controle
Ncleo de Estudo e Pesquisa 102 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 103 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 104 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 105 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 106 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
106
Microprocessador 8086/8088
PROCEDURES
Ncleo de Estudo e Pesquisa 107 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 108 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 109 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 110 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 111 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
111
Microprocessador 8086/8088
Pilha
Ncleo de Estudo e Pesquisa 112 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 113 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 114 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
114
Microprocessador 8086/8088
Macros
Ncleo de Estudo e Pesquisa 115 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 116 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 117 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
117
Microprocessador 8086/8088
Ncleo de Estudo e Pesquisa 118 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 119 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 120 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 121 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 123 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 124 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 125 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 126 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.
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 127 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.