Você está na página 1de 127

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

MICROPROCESSADORES E MICROCONTROLADORES Microprocessador 8086/8088


Jos Wilson Lima Nerys
jwilson@eee.ufg.br

Goinia, 2009

Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Caractersticas do Microprocessador 8086/8088

Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

8085 8086 / 8088


O 8088 o microprocessador do PC-XT (Personal Computer - eXtended Technology) Equivalente ao microprocessador 8086 (a principal diferena a extenso do barramento externo de dados). O 8086 tem os barramentos de dados externo e interno de 16 bits O 8088 apresenta o barramento interno de 16 bits e o externo de 8 bits. Os processadores 80186 e 80188 so upgrades do 8086 e do 8088 (foram incorporados de 10 a 15 componentes). O 80286 incorporou um gerenciador de memria e recursos para multitarefa ao 80186/188. Os PCs passaram a se chamar PC-AT (Advanced Technology) Todas as instrues do 8086 so includas no 80186, alm de 10 novas instrues.

Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

8085 8086 / 8088


Caracterstica Barramento de endereo Capacidade de endereamento de memria Barramento de dados Manipulao de STRINGS Registradores Internos Uso de segmentao para endereamento Aritmtica Decimal completa Etapas de Busca e Execuo Microprocessador 8085 16 bits 65.536 ( 64 kB ) 8 bits NO 8 bits e 16 bits NO NO Em sequncia: Busca Executa Microprocessador 8088 20 bits 1.048.576 ( 1 MB ) Interno: 16 bits Externo: 8 bits SIM 16 bits SIM SIM Unidades Independentes: Unidade de Interfaceamento com Barramento (BIU) responsvel pela Busca e Unidade de Execuo (EU) Microprocessador 8086 20 bits 1.048.576 ( 1 MB ) Interno: 16 bits Externo: 16 bits SIM 16 bits SIM SIM Unidades Independentes: Unidade de Interfaceamento com Barramento (BIU) responsvel pela Busca e Unidade de Execuo (EU)

Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

8085 8086 / 8088


Registradores do 8085
A H B D SP L C E
Apontador de pilha Acumulador Apontador de dados

Registradores do 8088 / 8086


AH BH CH DH SP BP SI DI AL (A) BL CL DL
AX Acumulador Primrio BX Acumulador e Registrador Base CX Acumulador e Contador DX Acumulador e Endereador de I/O Apontador de pilha Apontador base usado na pilha ndice da Fonte usado para indexao ndice de Destino usado para indexao Ponteiro de Instruo Segmento de Cdigo Segmento de Dados Segmento de Pilha Segmento Extra Registrador de Flags Registradores de segmento. So usados para a formao do endereo absoluto.

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Segmentao

Ncleo de Estudo e Pesquisa em Processamento de Energia e Qualidade Prof. Jos Wilson Lima Nerys

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Segmentao consiste em combinar 2 registradores de 16 bits para gerar um endereo de memria de 20 bits Registrador de Segmento
+

Registrador de Offset

Endereo Fsico = (Contedo do Registrador de Segmento) 16 + (Contedo do Registrador de Offset)

Vantagens da Utilizao de Memria Segmentada


Por haver uma rea especfica para armazenamento de cdigo e outras reas para armazenamento de dados, pode-se trabalhar com tipos diferentes de conjuntos de dados (por exemplo, em um ambiente multitarefa onde um programa atende vrias entradas de dados). Programas que referenciam endereos lgicos (0000 a FFFF no caso do 8088) podem ser carregados em qualquer espao (fsico) da memria (00000 a FFFFF): possibilita a realocao de programas.
Estudo e Pesquisa 10Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

10

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Endereo Fsico (ou absoluto)

XXXX0 Registrador de Segmento (16 bits) 0YYYY Registrador de Offset (16 bits)

15

15 Stack Pointer - SP Base Pointer - BP Source Index - SI

Extra Segment - ES Code Segment - CS Stack Segment - SS Data Segment - DS

Destination Index - DI
11 Microprocessador 8086/8088

Estudo e Pesquisa 11Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

FFFFFH Offset CS Offset DS Offset ES Offset SS 16 00000H 16 + 64 kB 16 + 16 + + 64 kB

64 kB

64 kB

Estudo e Pesquisa 13Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

13

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

CS = 9020h IP = 0FF1h Endereo fsico

90200 H + 00FF1 H 911F1 H

Estudo e Pesquisa 15Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

15

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registradores

Estudo e Pesquisa 17Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

17

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registradores Apontadores e ndices


15 Stack Pointer Base Pointer Source Index Destination Index SP BP SI DI 0

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registradores Apontadores e ndices


SP Ponteiro de Pilha Parece com o registrador SP do 8085. Armazena o offset do endereo do topo da pilha. Todas as referncias ao SP, por definio, usam o registrador SS. BP Ponteiro da Base Permite acessar dados no segmento da pilha. Tipicamente usado para acessar parmetros que foram passados pela pilha. SI e DI Registradores de Indexao So usados para acessar dados na memria de dados. So extensivamente usados nas operaes com strings. Podem ser usados como operandos em todas as operaes lgicas e aritmticas de 16 bits.
Estudo e Pesquisa 22Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

22

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Offset IP SP endereo efetivo SI DI endereo efetivo endereo efetivo


Microprocessador 8086/8088

Estudo e Pesquisa 24Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registrador Apontador de Instrues


Este registrador contm o endereo offset da prxima instruo a ser executada pelo microprocessador. Tem a mesma funo do PC utilizado no 8085.

15 IP - instruction pointer

Estudo e Pesquisa 26Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

26

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088

Estudo e Pesquisa 27Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

27

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

; definio da varivel VAR1

Estudo e Pesquisa 31Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

31

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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.

VAR1 DB 22h END

; definio da varivel VAR1

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registrador de Flags (Registrador de Estado do Programa (PSW)


um registrador de 16 bits, mas apenas 9 bits so usados para as flags: Seis deles so bits de status que refletem os resultados de operaes aritmticas e lgicas. Trs so bits de controle. 15 14 13 12 11 O 10 D 9 I 8 T 7 S 6 Z 5 4 A 3 2 P 1 0 C

Flag de Overflow

Flag de Trap

Flag Auxiliar de Carry

Flag de Direo Flag de Interrupo

Flag de Sinal Flag de Zero

Flag de Paridade Flag de Carry


33 Microprocessador 8086/8088

Estudo e Pesquisa 33Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registrador de Flags (Registrador de Estado do Programa (PSW)


Flags de Status C Flag de carry reflete o vai um do bit mais significativo, nas operaes aritmticas (de 8 ou 16 bits). Ele tambm modificado por algumas instrues de rotao e deslocamento. Nas operaes de subtrao (aritmtica em complemento dois) o carry invertido e passa a funcionar como borrow (emprstimo). Se, aps uma operao de subtrao, obtm-se C = 1, isso indica que no houve borrow, mas C=0, indica que houve borrow. P Flag de Paridade indica a paridade (par), dos 8 bits menos significativos, do resultado da operao realizada. P=1 nmero par de 1 nos 8 bits menos significativos P=0 nmero mpar de 1 nos 8 bits menos significativos A Flag Auxiliar de Carry reflete o vai um do bit 3, em uma operao de 8 bits.

Estudo e Pesquisa 34Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

34

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registrador de Flags (Registrador de Estado do Programa (PSW)


Flags de Status
Z Flag de Zero indica se uma operao teve zero como resultado. Z=1 se o resultado da operao for igual a zero Z=0 se o resultado da operao for diferente de zero S Flag de Sinal igual ao bit de mais alta ordem do resultado de uma operao aritmtica. S=0 resultado positivo S=1 resultado negativo O Flag de Overflow seu contedo obtido atravs de uma operao XOR do carry in com o carry out do bit de mais alta ordem do resultado de uma operao aritmtica. Ele indica um overflow de magnitude, em aritmtica binria com sinal. Indica que o resultado muito grande para o campo destino.
Estudo e Pesquisa 35Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

35

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Registrador de Flags (Registrador de Estado do Programa (PSW)


Flags de Controle T Flag de Trap (armadilha) usada para a depurao de programas. Coloca o 8086 no modo passo a passo. Aps cada instruo uma interrupo gerada automaticamente. I Flag de Interrupo habilita ou desabilita a interrupo externa (pedida pelo pino INTR). Ao contrrio do 8085, onde as interrupes RST 7.5, RST 6.5 e RST 5.5 podem ser habilitadas/desabilitadas individualmente, no 8086 todas so habilitadas ou desabilitadas ao mesmo tempo. A habilitao/ desabilitao individual pode ser feita atravs do controlador de interrupo 8259. I=1 interrupo habilitada I=0 interrupo desabilitada D Flag de Direo determina se as operaes com strings vo incrementar ou decrementar os registradores de indexao (SI e DI). D=1 SI e DI sero decrementados, ou seja, a string ser acessada a partir do endereo mais alto em direo ao mais baixo. D=0 SI e DI sero incrementados, ou seja, a stringser acessada a partir do endereo mais baixo em direo ao mais alto.
Estudo e Pesquisa 36Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

36

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Interrupes do Microprocessador 8086/8088

Estudo e Pesquisa 37Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

37

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Interrupes do 8086/8088
Nmero da Interrup.
0

Endereo do vetor de interrupo


0000h:0000h 0000h:0001h 0000h:0002h 0000h:0003h

Endereo do tratador da interrupo


IP low h IP high h CS low h CS high h IP low h IP high h CS low h CS high h IP low h IP high h CS low h CS high h

Endereo efetivo do vetor de interrupo


0000h:0000h

Endereo do tratador da interrupo


CS:IP

0000h:4i 0000h:(4i+1) 0000h:(4i+2) 0000h:(4i+3)

0000h:4i

CS:IP

255

0000h:03FCh 0000h:03FDh 0000h:03FEh 0000h:03FFh

0000h:03FCh

CS:IP

Estudo e Pesquisa 39Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

39

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Interrupes Reservadas do 8086/8088


As interrupes de 0 a 31 (00h a 1Fh) so reservadas. Elas tm finalidades especficas para o 8086. Dentre as reservadas 5 interrupes j so pr-definidas no 8086:
Nmero da Interrup. 00 H 01 H 02 H 03 H 04 H Endereo do vetor 0000h:0000h 0000h:0004h 0000h:0008h 0000h:000Ch 0000h:0010h Finalidade Diviso por zero. chamada sempre que o divisor de uma operao de diviso for zero. Execuo passo a passo. chamada sempre que a Flag de Trap (T) estiver setada. Facilita a depurao de um programa. NMI = Interrupo No-Mascarvel. Equivale TRAP do 8085. Pino 17 do 8086. Breakpoints. Permite a execuo de programas para depurao at um endereo especificado pelo programador. Overflow. chamada sempre que a Flag de Overflow estiver setada, indicando que o contedo do resultado no cabe no registrador de destino. Interrupes que no so pr-definidas, mas so reservadas para o 8086. As diversas verses de sistemas usando o 8086 usam essas interrupes para finalidades especficas, mas no necessariamente idnticas entre os sistemas.
40 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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Interrupes por Hardware do 8086/8088


Interrupes por Hardware So interrupes solicitadas atravs do pino INTR (pino 18). Nesse pino conectado um controlador de interrupo que amplia para 8 os pedidos de interrupo. So interrupes mascarveis atravs do bit I do registrador de flags.
A seqncia de atendimento de uma interrupo por hardware : O 8086 envia primeiro pulso *INTA para o perifrico, aps receber pedido de interrupo. Aps esse sinal reconhecimento de pedido de interrupo o perifrico prepara-se para enviar o nmero da interrupo O 8086 envia segundo pulso *INTA para o perifrico, tendo como resposta do perifrico o nmero da interrupo colocada no barramento de dados O 8086 salva PSW na pilha Apaga flag T (Trap passo a passo) e, se for reservada, tambm I (Interrupt Flag desabilita interrupes por INTR) Salva CS (segmento) e IP (offset) na pilha Carrega novo IP a partir do endereo 4*nn Carrega novo CS a partir do endereo 4*nn + 2
Estudo e Pesquisa 41Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

41

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Interrupes por Software do 8086/8088


So interrupes solicitadas atravs da instruo INT nn, onde nn deve estar entre 32 e 255 (as interrupes de 0 a 31 so reservadas). As interrupes geradas pela instruo INT nn no so mascarveis. A seqncia de atendimento de uma interrupo por software e tambm de uma interrupo reservada : Salva PSW na pilha Apaga flag T (Trap passo a passo) e, se for reservada, tambm I (Interrupt Flag desabilita interrupes por INTR) Salva CS (segmento) e IP (offset) na pilha Carrega novo IP a partir do endereo 4*nn Carrega novo CS a partir do endereo 4*nn + 2
42 Microprocessador 8086/8088

Estudo e Pesquisa 42Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Interrupes por Software do 8086/8088


Cada interrupo por software pode ter at 256 sub-funes diferentes. O registrador AH usado para passar para a interrupo qual a funo a ser executada.
Inter. INT 10 H Finalidade macro Servios de vdeo ( uma funo do BIOS) Subfuno 00 H 01 H Registradores AH = 00 H AL = modo AH = 01 H CH: bit 7 = 0 Bits 6 e 5 Bits 4 a 0 CL: 02 H bits 4 a 0 00 normal; 01 invisvel Linha mais alta do caracter para o cursor Linha mais baixa do caracter para o cursor Seta posio do cursor Nmero da pgina de vdeo 00 H linha superior 00 H coluna da esquerda Imprime no vdeo caractere em AL
43 Microprocessador 8086/8088

Descrio da subfuno Seta o modo vdeo AL = 03 VGA 80 x 25 Seta tamanho do cursor

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Interrupes por Software do 8086/8088


INT 21 H Servios Gerais ( uma funo do DOS) 01 H 02 H 08 H 09 H 25 H AH = 01 H AL AH = 02 H DL AH = 08 H AL AH = 09 H DS:DX AH = 25 H AL DS:DX 31 H AH = 31 H AL DX 4C H AH = 4C H AL L caractere da entrada padro, com eco. Retorna o cdigo ASCII do caractere lido Escreve caractere na sada padro Contm o cdigo ASCII do caractere L caractere da entrada padro, sem eco Retorna o cdigo ASCII do caractere lido Escreve na sada padro textos terminados em $ Endereo de incio do texto Seta vetor de interrupo Nmero do vetor de interrupo a ser modificado Novo valor para o vetor a ser modificado Encerra programa e deixa residente (TSR) Cdigo de retorno Nmero de pargrafos que devem ficar residentes Encerra programa Cdigo de retorno
44 Microprocessador 8086/8088

Estudo e Pesquisa 44Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Algumas funes especiais: OUT 199, AX Envia nmero em AX para o display de 7-segmentos. O nmero j mostrado em decimal MOV AH, 0A H INT 21 H MOV AL, [SI] MOV AH, 0Eh INT 10h MOV AH, 09 H INT 21 H MOV AH, 4C H INT 21 H Permite a entrada de texto pelo teclado. O texto guardado em DS:DX. O 1 byte guarda o tamanho do buffer e o 2 byte guarda o nmero de caracteres efetivamente lidos ; obtm cdigo ASCII do caractere no offset SI ; subfuno para imprimir mensagem no vdeo ; interrupo para imprimir no vdeo. Imprime texto terminado em $ e que esteja armazenado em DS:DX. Se a informao for 13, 10, $, o cursor muda de linha. Sai para o Sistema Operacional
45 Microprocessador 8086/8088

Estudo e Pesquisa 45Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Exemplo: Mostra no vdeo a mensagem Micro 2009


#MAKE_COM# ; Instruo ao compilador para fazer um arquivo COM. ORG 100h MOV AH, 0Eh ; seleciona uma sub-funo. Junto com INT 10h imprime caractere no video MOV AL, 'M' ; Cdigo ASCII: 77 INT 10h ; Imprime o caractere M no vdeo MOV AL, 'i' ; Cdigo ASCII: 105 INT 10h ; Imprime o caractere i no vdeo MOV AL, 'c' ; Cdigo ASCII: 99 INT 10h ; Imprime o caractere c no vdeo MOV AL, 'r' ; Cdigo ASCII: 114 INT 10h ; Imprime o caractere r no vdeo MOV AL, 'o' ; Cdigo ASCII: 111 INT 10h ; Imprime o caractere o no vdeo MOV AL, ' ' ; Cdigo ASCII: 32 INT 10h ; Imprime um espao em branco MOV AL, '2' ; Cdigo ASCII: 50 INT 10h ; Imprime o caractere 2 no vdeo MOV AL, '0' ; Cdigo ASCII: 48 INT 10h ; Imprime o caractere 0 no vdeo MOV AL, '0' ; Cdigo ASCII: 48 INT 10h ; Imprime o caractere 0 no vdeo MOV AL, 9' ; Cdigo ASCII: 54 INT 10h ; Imprime o caractere 6 no vdeo RET ; Retorna para o sistema operacional.
Estudo e Pesquisa 46Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

46

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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.

; mostra no display de 7-segmentos o contedo de AX

Estudo e Pesquisa 49Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

49

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


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 50Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

50

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Exemplos: MOV AX, [BX] copia o word endereado por BX para AX o tipo do smbolo usado j est implcito (uma vez que AX de 16 bits), no havendo necessidade de informar ao assembly. INC [BX] necessrio informar se deve ser incrementado o BYTE de offset BX ou o WORD de offset BX: INC BYTE PTR [BX] incrementa o byte cujo offset o valor contido em BX INC WORD PTR [BX] incremeta word que se encontra nos endereos BX e BX+1.

Estudo e Pesquisa 51Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

51

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


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 52Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

52

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


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 53Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

53

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


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

; definio da varivel VAR1

Estudo e Pesquisa 54Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

54

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


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.

VAR1 DB 22h END

; definio da varivel VAR1

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

Essas duas instrues tm o mesmo efeito de MOV AX, 5

55

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Formato das instrues de transferncia de dados:
7 opcode 2 1 s 0 w 7 6 7 postbyte 5 4 3 2 0 7 data 1 s 0 w Byte 1 Byte 2 Byte 3 Byte 4 0 7 data if sw=01 0

Opcode (cdigo da operao)

Ou

postbyte data data if s w = 0 1

w se w = 0 instruo manipula byte; postbyte:


7 mod 6 5 4 reg 3

se w = 1 instruo manipula word


2 1 r/m 0

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Modos de Endereamento
Endereamento por Registrador O operando est em um registrador (de 16 bits AX a DI ou de 8 bits AH a DL) Ex.: MOV AX, BX copia contedo de BX para AX CMP AL, DL compara contedos de AL e DL (e seta flags) Endereamento Imediato O operando faz parte da prpria instruo. Usado para atribuir valores de 8 ou 16 bits a registradores; Ex.: MOV AX, 1000H faz AX = 1000H CMP SI, 0000H compara contedo de SI com 0000H (e seta flags) Obs.: Modo imediato no pode ser usado para os registradores de segmento, nem para as instrues PUSH
Estudo e Pesquisa 58Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

58

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Modos de Endereamento
Endereamento Absoluto ou Direto O operando est na memria. A instruo contm o offset do endereo do operando (o segmento DS). Ex.: MOV AX, [1000H] copia para AX o contedo localizado nos offsets 1000H e 1001 H, ou seja, AX = 1234 H.

Estudo e Pesquisa 59Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

59

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Modos de Endereamento
Endereamento Indireto O operando est na memria. A instruo, ao invs de conter o offset do endereo, como no caso direto, contm um registrador, que contm o offset do endereo do operando. Os registradores de offset podem ser BX, BP, DI ou SI (o segmento DS). Ex.: MOV AX, [BX] copia para AX o contedo localizado no offset dado em BX. Se BX = 1000h, ento AX = 1234h

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Modos de Endereamento
Endereamento Indexado Uma constante, denominada base, e um registrador de ndice so usados. A base e o ndice so somados para a obteno do offset do endereo. Os registradores de ndice podem ser BX, BP, DI ou SI. Ex.: MOV AX, 0100H[BX] copia para AX o contedo localizado no offset dado por BX + 0100H. Se BX = 1000h, ento BX + 0100H = 1100H e AX = 1234h

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Modos de Endereamento
Endereamento Baseado o contrrio do endereamento indexado, ou seja, o contedo de um registrador copiado para uma posio varivel indicada por um registrador e uma constante. Registradores usados: BX, BP, DI ou SI Ex.: MOV [BX + 0100H], AX copia contedo de AX para o endereo BX + 0100H. Se BX = 1000H, ento BX + 0100H = 1100H. Se AX = 1234H, ento o valor 34H ser armazenado em 1100H e o valor 12H ser armazenado em 1101H.

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086


Modos de Endereamento
Endereamento Relativo As instrues de desvio e chamadas de subrotina do tipo near ou short somam ou subtraem um valor de deslocamento para o desvio, ao invs de usar o endereo longo. Offset de destino = offset da instruo seguinte + deslocamento

Estudo e Pesquisa 63Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

63

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Extra, Dado ES, DS

Estudo e Pesquisa 64Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Assembly do 8086/8088 e o Emu8086 Simulador do 8086: Emu8086 verso 2.58

Estudo e Pesquisa 65Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

65

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Estudo e Pesquisa 66Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

66

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Estudo e Pesquisa 67Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

67

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Estudo e Pesquisa 68Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

68

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Estudo e Pesquisa 69Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

69

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Estudo e Pesquisa 70Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

70

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Conjunto de Instrues do Microprocessador 8086/8088

Estudo e Pesquisa 71Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

71

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues de Transferncia de Dados

Estudo e Pesquisa 73Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

73

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Movimentao de dados entre dois registradores, entre um registrador e posio de memria, entre registradores e portas [I/O]. Formato: MOV destino, fonte

Formas genricas possveis:


MOV REG, memria MOV memria, REG MOV REG, REG MOV REG, imediato Copia contedo da posio de memria para o Registrador indicado Copia contedo do registrador indicado para a posio de memria Copia contedo de um registrador para outro Carrega registrador com valor indicado

MOV memria, imediato Carrega posio de memria com valor indicado

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Formas genricas possveis para os registradores de segmento:


MOV SREG, memria MOV memria, SREG MOV SREG, REG MOV REG, SREG Copia contedo da posio de memria para o Registrador de segmento indicado Copia contedo do registrador de segmento indicado para a posio de memria Copia contedo de um registrador comum para um de segmento Copia contedo de um registrador de segmento para um comum

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

MOV AX, 0100 H Carrega registrador de 16 bits AX com valor 0100 h

Estudo e Pesquisa 76Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

76

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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]

MOV BX, MEMBY[SI] O mesmo que MOV BX, [SI+MEMBY]

Estudo e Pesquisa 77Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

77

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues Especiais de Transferncia de Dados


Mnemnico XCHG AX, BX XCHG AL, CL XCHG DX, [SI] LAHF SAHF IN AH, 26 IN AL, DX OUT 26, AX OUT DX, AX Descrio permuta registradores AX e BX Permuta registradores AL e CL Permuta DX com o contedo da posio de memria endereada por SI. Neste exemplo DL [SI] e DH [SI + 1] AH Flags low Flags low AH IN direto IN indireto para as 65536 portas (0 - 65535 ou 0000 - FFFF). Aplica-se as mesmas regras da instruo IN. (AX BX)

Estudo e Pesquisa 79Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

79

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues Especiais de Transferncia de Dados


Mnemnico LEA BX, MEMBY Descrio Load Efective Address: carrega endereo efetivo. No exemplo, BX carregado com o endereo efetivo de MEMBY (notar a diferena desta com a instruo "MOV BX, MEMBY") BX 1000 Load Pointer using DS. No exemplo BX [SI+1:SI], DS [SI+3:SI+2]. Esta instruo util quando preciso estabelecer novo endereo absoluto (composio endereo base + endereo de offset) Load Pointer using ES. No exemplo BX [SI+1:SI], ES [SI+3:SI+2] AL [BX+AL]. Carrega registrador AL com o contedo (byte) da tabela iniciada em [BX] e com offset AL

LEA BX, [1000] LDS BX, dword ptr [SI]

LES BX, dword ptr [SI] XLAT

Estudo e Pesquisa 80Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

80

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues Especiais de Transferncia de Dados


Observaes.: A instruo IN somente pode ser usada para as primeiras 256 portas (0 a 255). Portas c/ endereo > 255 devem utilizar somente reg. DX (referncia de I/O). Exemplo no permitido: IN AX, 3400. A instruo IN deve utilizar somente o registrador AX. Exemplo no permitido: IN BL,DX.

Estudo e Pesquisa 81Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

81

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues Especiais de Transferncia de Dados


Exemplo 2: Programa que demonstra o uso de variveis (Ex2-2006.asm) Mnemnico #MAKE_COM# ORG 100h MOV AL, var1 MOV BX, var2 RET var1 DB 7 var2 DW 1234h Descrio Diretiva para o compilador gerar um arquivo .com Diretiva que indica o endereo inicial do programa: 0100 H Carrega registrador de 8 bits AL com valor 7 (varivel var1) Carrega registrador BX de 16 bits com valor 1234 H (var2) Pra o programa Define varivel var1 como byte de valor 7 decimal Define varivel var2 como Word de valor 1234 hexadecimal

Estudo e Pesquisa 83Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

83

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues de Strings

Estudo e Pesquisa 84Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

84

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Mnemnico MOVS BYTE PTR ES:[DI],[SI]

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.

MOVS WORD PTR ES:[DI],[SI]

STOS BYTE PTR ES:[DI], AL STOS WORD PTR ES:[DI], AX

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]

CMPS BYTE PTR ES:[DI],[SI] CMPS WORD PTR ES:[DI],[SI]

Estudo e Pesquisa 86Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

86

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Mnemnico STOSB STOSW LODSB LODSW MOVSB

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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.

Exemplo 3: Uso de MOVSB e REP (Ex3-2006 REP.asm)


Mnemnico #make_COM# ORG 100h LEA SI, a1 LEA DI, a2 MOV CX, 5 REP MOVSB RET a1 DB 1,2,3,4,5 a2 DB 5 DUP(0) Diretiva para o compilador Diretiva para o compilador programa comea na posio 100h Offset SI assume o endereo do primeiro valor da varivel a1. Offset DI assume o endereo da varivel a2. Registrador CX recebe valor 5 Instruo MOVSB repetida at o registrador CX alcanar 0. Encerra programa Variveis A varivel a2 ter 5 valores zero, conforme declarado em 5 DUP(0). Descrio

Estudo e Pesquisa 88Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

88

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues Lgicas

Estudo e Pesquisa 91Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

91

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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.

TEST AX, 3000


Estudo e Pesquisa 93Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

93

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues Lgicas: Deslocamento e Rotao


SHL AL, 1 SHL BX, CL Deslocar esquerda 1 vez e deslocar esquerda CL vezes Formato: SHL destino, contador Deslocar direita 1 vez e deslocar direita CL vezes

SHR AX, 1 SHR BL, CL

ROL AL, 1 ROR CX, CL

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues Aritmticas

Estudo e Pesquisa 96Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

96

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues de Desvio

Estudo e Pesquisa 99Ncleo deWilson Lima Nerys em Processamento de Energia e Qualidade Prof. Jos

99

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Mnemnico JMP [BX] JMP BX


JMP DWORD PTR [BX];

Descrio Desvio Incondicional IP [BX+1:BX] IP BX IP [BX+1:BX] ; CS [BX+3:BX+2] Desvio condicional

JNC LABEL JS LABEL LOOP LABEL LOOPE LABEL

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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.

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Instrues de Controle

Ncleo de Estudo e Pesquisa 102 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

102

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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.

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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)

MOV AL, 00000101b Carrega AL com valor binrio correspondente a 5

Ncleo de Estudo e Pesquisa 106 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

106

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

PROCEDURES

Ncleo de Estudo e Pesquisa 107 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

107

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Exemplo de Procedure (Ex9-2006 subrotina1.asm): ORG 100h ; chama a subrotina m1

CALL m1 MOV AX, 2 ADD AX,BX RET m1 PROC MOV BX, 5 RET m1 ENDP END

; retorna para o sistema operacional.

; retorna para a linha seguinte chamada de subrotina.

Ncleo de Estudo e Pesquisa 109 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

109

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

; AX = AL * BL. ; retorna para a linha seguinte da chamada.

Ncleo de Estudo e Pesquisa 110 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

110

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Pilha

Ncleo de Estudo e Pesquisa 112 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

112

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

Macros

Ncleo de Estudo e Pesquisa 115 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

115

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

BIBLIOTECA DO Emu8086 emu8086.inc

Ncleo de Estudo e Pesquisa 118 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

118

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

BIBLIOTECA DO Emu8086 emu8086.inc


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 AX, CX ; transfere o nmero para AX. CALL pthis ; chama subrotina para imprimir o texto a seguir DB 13, 10, Voc entrou com o nmero: , 0 CALL print_num ; chama subrotina para imprimir nmero em AX. RET ; retorna para o sistema operacional. msg1 DB Entre com um 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 122 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

#make_COM# ORG 100h reinicia: mov al, 00H mov cx, 31 contagem: out 199, al inc al loop contagem jmp reinicia ret end

; carrega AL com valor 00h ; carrega contador CX com valor 31 decimal

; 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

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

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

DEFINE_PRINT_NUM_UNS end RET

Ncleo de Estudo e Pesquisa 126 Jos Wilson Lima Nerys em Processamento de Energia e Qualidade Prof.

126

Microprocessador 8086/8088

Universidade Federal de Gois Escola de Engenharia Eltrica e de Computao

#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

show msg1 linha msg2

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.