Escolar Documentos
Profissional Documentos
Cultura Documentos
Assembler para IBM PC
Assembler para IBM PC
Luciano Scandelari
Assembler 8086/8088
SUMRIO
1. MOVIMENTAO DE DADOS ____________________________________________________ 3
MOV MOVIMENTACAO DE DADOS ________________________________________________________
XCHG TROCA DE DADOS ENTRE REGISTRADOR OU MEMORIA _____________________________
LEA OBTEM O OFFSET DO ENDERECO EFETIVO DE UM DADO ______________________________
LDS CARREGA UM PONTEIRO PARA DS E OUTRO REGISTRADOR ___________________________
LES CARREGA UM PONTEIRO PARA ES E OUTRO REGISTRADOR ___________________________
3
5
5
6
7
3. ARITIMTICA ___________________________________________________________________ 9
ADICAO E SUBTRACAO ___________________________________________________________________ 9
INCREMENTO E DECREMENTO ____________________________________________________________ 9
MULTIPLICAO E DIVISO ______________________________________________________________ 9
4. SALTOS ________________________________________________________________________ 10
ROTULOS PARA DEMARCACAO DE SALTOS _______________________________________________ 10
REGISTRADORES DE CONDICAO (FLAGS) _________________________________________________ 10
BITS DE ESTADO CARACTERISTICAS DO RESULATADO GERADO NA U.L.A. ________________ 10
BITS DE CONTROLE
CONTROLAM AS OPERACOES DO PROCESSADOR ____________________ 10
INSTRUCOES DE MANIPULACAO DE FLAGS. _______________________________________________ 11
JMP
SALTO INCONDICIONAL _____________________________________________________ 11
J CONDICIONAL
SALTA SE A CONDICAO FOR SATISFEITA ______________________________ 12
CMP
COMPARACAO ENTRE DOIS VALORES___________________________________________ 12
SALTOS CONDICIONAIS PARA NUMEROS ARITIMETICOS ___________________________________ 13
SALTOS CONDICIONAIS PARA NUMEROS ALGEBRICOS_____________________________________ 13
LOOP
DECREMENTA CX E SALTA ENQUANTO NAO FOR ZERO___________________________ 13
5. SUBROTINAS___________________________________________________________________ 14
CALL
RET
CHAMADA DE SUBROTINA___________________________________________________ 14
RETORNO DE SUBROTINA __________________________________________________ 15
6. STRINGS _______________________________________________________________________ 15
MOVSB E MOVSW
MOVE STRINGS DE BYTES OU WORDS____________________________
REP
PREFIXO DE REPETICAO ____________________________________________________
CMPSB E CMPSW - COMPARA DOIS STRINGS DE BYTES/WORDS ___________________________
REPNZ/REPNE
PREFIXO DE REPETICAO ENQUANTO DIFERENTE_______________________
REPZ/REPE
PREFIXO DE REPETICAO ENQUANTO IGUAL ______________________________
SCASB E SCASB - PROCURA BYTE/WORD EM UM STRING _________________________________
15
16
17
17
18
18
20
20
21
21
Luciano Scandelari
Assembler 8086/8088
1. MOVIMENTAO DE DADOS
MOV MOVIMENTACAO DE DADOS
MOV
DESTINO,ORIGEM
---+--- --+--- !
!
+---->!
!
!
!
+----------->!
!
REGISTRADOR
MEMORIA
DADO IMEDIATO
REGISTRADOR
MEMORIA
AX,1234H
AH,12H
AL,34H
SI,0A00H
CX,120
BH,10100101B
;MOVE
;MOVE
;MOVE
;MOVE
;MOVE
;MOVE
2)DE_REGISTRADOR_PARA_REGISTRADOR
MOV AH,BL
MOV CX,AX
MOV SI,BX
3)DE_MEMORIA/REGISTRADOR_PARA_REGISTRADOR/MEMORIA
MOV CL,[SI]
Luciano Scandelari
Assembler 8086/8088
4)DE_MEMORIA_OU_REGISTRADOR_PARA_REGISTRADOR_DE_SEGMENTO
MOV ES,BX
MOV DS,[SI]
MOV SS,[BX]
5)DE_REGISTRADOR_DE_SEGMENTO_PARA_MEMORIA_OU_REGISTRADOR
MOV AX,CS
MOV DX,ES
MOV [20],DS
6)DO_ACUMULADOR/MEMORIA_PARA_MEMORIA/ACUMULADOR
MOV [SI],AL
;MOVE BYTE DE AL PARA OFFSET [SI]
MOV [BX+DI],AX ;MOVE WORD DE AX PARA OFFSET DADO
;PELA SOMA DE BX+DI
MOV [210],AL
;MOVE BYTE DE AL PARA OFFSET 210
MOV AL,[BX+2] ;MOVE CONTEUDO DO OFFSET [BX+2]
;PARA O AL
MOV AX,[SI]
;MOVE O WORD DO OFFSET [SI] PARA AX
MOV AL,[300]
;MOVE O BYTE DO OFFSET [300] PARA AL
MOV MEM1,AH
MOV BL,MEM1
;MOVE O
;OFFSET
;MOVE O
;'MEM1'
CONTEUDO DE AH PARA O
DECLARADO COMO 'MEM1'.
CONTEUDO DO OFFSET DECLARADO
PARA O REGISTRADOR BL.
7)DADO_IMEDIATO_PARA_MEMORIA
MOV byte ptr [SI],0Fh
Luciano Scandelari
Assembler 8086/8088
XCHG
OPER1,OPER2
--+-- --+-!
!
!
!
+------>!
!
+------------>!
!
REGISTRADOR
MEMORIA
REGISTRADOR
MEMORIA
EXEMPLOS:
XCHG AX,BX
;TROCA OS CONTEUDOS DE AX E BX
XCHG BL,VARIAVEL ;TROCA O CONTEUDO DE BL COM O
;CONTEUDO DO OFFSET 'VARIAVEL'
XCHG AL,BL
;TROCA O CONTEUDO DE AL COM BL
LEA
Luciano Scandelari
VALOR DA
POSICAO DE
Assembler 8086/8088
SEGMENT
DB
1AH
;COLOCA 1 BYTE EM VAR1
DW
0123H,4567H ;COLOCA 2 WORDS EM VAR2
DW
9876H
;COLOCA 1 WORD EM VAR3
ENDS
SEGMENT
ASSUME
CS:CODIGO,DS:DADOS
.
.
.
MOV AX,VAR3
;CARREGA AX COM O WORD 9876H
MOV AX,OFFSET VAR3 ;CARREGA AX COM O NUMERO 5
LEA AX,VAR3
;CARREGA AX COM O NUMERO 5
.
.
.
CODIGO ENDS
LDS
LDS AX,VAR2 ;
Luciano Scandelari
Assembler 8086/8088
LES
LDS SI,VAR1 ;
2. MANIPULAO DA PILHA
PUSH
OPERANDO
----+--+-------> REGISTRADOR DE 16 BITS OU
POSICAO DE MEMORIA (16 BITS)
PARA
SALVA-LO
DE
PASSAGEM
DE
Luciano Scandelari
Assembler 8086/8088
- OUTROS EXEMPLOS :
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
AX
BX
CX
DX
DS
SS
SP; COLOCA SP NA PILHA COM O SEU VALOR JA'
; DECREMENTADO.
PUSH CS:[BP+SI+1] ; CARREGA NA PILHA O CONTEUDO DAS
; POSICOES DE MEMORIA NO SEGMENTO
; CS,COM OFFSET BP+SI+1 E BP+SI+2.
POP
OPERANDO
----+--+-------> REGISTRADOR DE 16 BITS OU
POSICAO DE MEMORIA (16 BITS)
PARA
SALVA-LO
DE
PASSAGEM
DE
BX,1234H
CX,89ABH
BX
CX
BX
CX
;
;
;
;
;
;
Luciano Scandelari
Assembler 8086/8088
3. ARITIMTICA
ADICAO E SUBTRACAO
ADD
ADC
SUB
SBB
OPERANDO1,OPERANDO2
; OPERANDO1 <-OPERANDO1,OPERANDO2
; OPERANDO1 <-OPERANDO1,OPERANDO2
; OPERANDO1 <-OPERANDO1,OPERANDO2
; OPERANDO1 <-----+---- ----+---!
!
!
!
! REGISTRADOR
!
+----->! MEMORIA
!
! DADO IMEDIATO
!
!
! REGISTRADOR
+--------------->! MEMORIA
OPERANDO1
OPERANDO1
OPERANDO1
OPERANDO1
INCREMENTO E DECREMENTO
INC OPERANDO ; OPERANDO <-- OPERANDO + 1
DEC OPERANDO ; OPERANDO <-- OPERANDO - 1
----+--!
! MEMORIA
+-------->! REGISTRADOR
- ESTA INSTRUCAO ALTERA TODAS AS FLAGS MENOS O CF.
MULTIPLICAO E DIVISO
DIV OPERANDO-8bits
; AX |OPERANDO-8bits
+-------------AH
AL
AX
OPERANDO-16bits DX:AX
MUL OPERANDO-8bits
; AL x OPERANDO-8bits
MUL OPERANDO-16bits
; AX x
Luciano Scandelari
+
+
-
OPERANDO2
OPERANDO2 + CF
OPERANDO2
OPERANDO2 - CF
Assembler 8086/8088
10
4. SALTOS
ROTULOS PARA DEMARCACAO DE SALTOS
! NEAR -> SALTO NO MESMO SEGMENTO DE CODIGO.
!
EXECUCAO MAIS RAPIDA.
!
!
ROTULO:
!
OU
!
ROTULO LABEL NEAR
ROTULO --!
! FAR -> SALTO EM SEGMENTO DIFERENTE DO DE ORIGEM.
!
!
ROTULO LABEL FAR
!
BITS DE ESTADO
CF
AF
OF
PF
SF
ZF
TRANSPOSICAO (CARRY).
TRANSPOSICAO AUXILIAR - USADO EM OPERACOES BCD.
SOBRECARGA (OVERFLOW) - SIMILAR AO CF , POREM PARA ALGEBRICOS.
PARIDADE - SETADA QUANDO O RESULTADO CONTEM UM NUM.PAR DE '1'.
SINAL - SETADA QUANDO O RESULTADO E' NEGATIVO.
ZERO - SETADA QUANDO O RESULTADO GERADO NA U.L.A. E' ZERO.
BITS DE CONTROLE
Luciano Scandelari
Assembler 8086/8088
11
STC
- SET CARRY
- FAZ CF=1.
CLC
- CLEAR CARRY
- FAZ CF=0.
CMC
STD
- SET DIRECTION
- FAZ DF=1.
CLD
- CLEAR DIRECTION
- FAZ DF=0.
STI
- SET INTERRUPT
- FAZ IF=1.
CLI
- CLEAR INTERRUPT
JMP
SALTO INCONDICIONAL
JMP ENDERECO
---+---!
! ENDERECO IMEDIATO
+-------> ! IMEDIATO VIA REGISTRADOR
! INDIRETO VIA REGISTRADOR
DESVIO
INDIRETO
INDIRETO
INDIRETO
DIRETO
DIRETO
INTRA-SEGMENTO
INTRA-SEGMENTO
INTERSEGMENTO
INTRA-SEGMENTO OU CURTO
INTERSEGMENTO
Luciano Scandelari
Assembler 8086/8088
12
- EXEMPLOS:
END_NEAR
END_FAR
DW
ROT_NEAR
ROT_FAR
LABEL NEAR
LABEL FAR
XIS:
JMP
JMP
JMP
JMP
JMP
MOV
JMP
MOV
MOV
JMP
J CONDICIONAL
?
DD
ROT_NEAR
ROT_FAR
END_FAR
END_NEAR
XIS
AX,OFFSET ROT_NEAR
AX
END_NEAR,OFFSET ROT_NEAR
BX,OFFSET END_NEAR
[BX]
SALTA SE:
JE / JZ
JNE / JNZ
ZF=1
ZF=0
- RESULTADO = 0.
- RESULTADO NAO E' 0.
JS
JNS
SF=1
SF=0
- RESULTADO NEGATIVO.
- RESULTADO POSITIVO.
JO
JNO
OF=1
OF=0
- HOUVE OVERFLOW.
- NAO HOUVE OVERFLOW.
JC
JNC
CF=1
CF=0
- HOUVE CARRY.
- NAO HOUVE CARRY.
JP
JNP
PF=1
PF=0
JCXZ
CMP
REGISTRADOR
MEMORIA
DADO IMEDIATO
REGISTRADOR
MEMORIA
DADO IMEDIATO
Luciano Scandelari
Assembler 8086/8088
13
JB
JA
JBE
JAE
JE
JNE
SALTA
SALTA
SALTA
SALTA
SALTA
SALTA
SE
SE
SE
SE
SE
SE
MENOR = JNAE
MAIOR = JNBE
MENOR OU IGUAL = JNA
MAIOR OU IGUAL = JNB
IGUAL
NAO FOR IGUAL
LOOP
JL
JG
JLE
JGE
JE
JNE
SALTA
SALTA
SALTA
SALTA
SALTA
SALTA
SE
SE
SE
SE
SE
SE
MENOR = JNGE
MAIOR = JNLE
MENOR OU IGUAL = JNG
MAIOR OU IGUAL = JNL
IGUAL
DIFERENTE
ROTULO
Luciano Scandelari
Assembler 8086/8088
14
5. SUBROTINAS
CALL
CHAMADA DE SUBROTINA
CALL ROTULO
CALL REGISTRADOR
CALL MEMORIA
Luciano Scandelari
Assembler 8086/8088
RET
15
RETORNO DE SUBROTINA
RET
6. STRINGS
DEFINICAO DO STRING :
--------------------STRING1 DB
CORDAO DB
ORIGEM DW
40 DUP (?)
"ABCDEFGHIJKLMNOP"
60 DUP (0)
MOVSB E MOVSW
!
DESTINO-! ES:DI (DEFAULT E UNICO) - OFFSET DI NO SEGMENTO EXTRA.
!
Luciano Scandelari
Assembler 8086/8088
16
OPERACAO DO MOVSB :
-------------------COPIA O BYTE APONTADO POR SI PARA ES:DI.
-SE DF=0 SOMA 1 A SI E DI.
-SE DF=1 SUBTRAI 1 DE SI E DI.
OPERACAO DO MOVSW :
-------------------COPIA O WORD APONTADO POR SI PARA ES:DI.
-SE DF=0 SOMA 2 A SI E DI.
-SE DF=1 SUBTRAI 2 DE SI E DI.
REP
PREFIXO DE REPETICAO
REP INSTRUCAO
PREFIXO DE INSTRUCAO.
DEVE SER COLOCADO NO CAMPO DOS ROTULOS.
REPETE "CX" VEZES A INSTRUCAO.
ENQUANTO CX FOR DIFERENTE DE ZERO A INSTRUCAO E' EXECUTADA E CX E'
DECREMENTADO DE UMA UNIDADE.
OS FLAGS NAO SAO AFETADOS PELO PRFIXO REP,MAS SIM PELA INSTRUCAO QUE
ESTA' SENDO REPETIDA.
SE CX INICIALMENTE FOR IGUAL A ZERO A INSTRUCAO NAO E' EXECUTADA.
O PREFIXO REP E' UTLIZADO EM CONJUNTO COM AS INSTRUCOES MOVS,STOS E LODS.
PARA AS INSTRUCOES SCAS E CMPS UTILIZAM-SE OS PREFIXOS REPZ,REPNZ,
Luciano Scandelari
Assembler 8086/8088
17
REPE E REPNE.
EXEMPLO:
--------
REP
LEA SI,STRING_ORIGEM
LEA DI,STRING_DESTINO
MOV CX,LENGHT CORDAO_ORIGEM
CLD
MOVSB
REPNZ/REPNE
INSTRUCAO
INSTRUCAO
- PREFIXO DE INSTRUCAO.
- DEVE SER COLOCADO NO CAMPO DOS ROTULOS.
- ENQUANTO CX FOR DIFERENTE DE ZERO A INSTRUCAO E' EXECUTADA E CX E'
DECREMENTADO DE UMA UNIDADE.
- CASO O FLAG Z FIQUE ATIVO (ZF=1) APOS A EXECUCAO DA INSTRUCAO , A REPETICAO
SERA' INTERROMPIDA.
- OS FLAGS NAO SAO AFETADOS PELO PRFIXO REP,MAS SIM PELA INSTRUCAO QUE
ESTA' SENDO REPETIDA.
- SE CX INICIALMENTE FOR IGUAL A ZERO A INSTRUCAO NAO E' EXECUTADA.
- O PREFIXO E' UTLIZADO EM CONJUNTO COM AS INSTRUCOES SCAS E CMPS.
- UMA VEZ QUE CX E' DECREMENTADO ANTES DO TESTE DA FLAG DE ZERO E AS
INSTRUCOES SCAS E CMPS AVANCAM (OU RECUAM) OS PONTEIROS (SI E DI) APOS A
COMPARACAO , AO FINAL DA REPETICAO TEREMOS :
1. SE ZF=0 --> NAO FOI ENCONTRADO ELEMENTO NA CADEIA QUE RESULTASSE
EM ZF=1. CX CONTEM ZERO E OS PONTEIROS APONTAM PARA
A POSICAO SEGUINTE AO FINAL DAS CADEIAS.
Luciano Scandelari
Assembler 8086/8088
18
REPZ/REPE
INSTRUCAO
INSTRUCAO
- PREFIXO DE INSTRUCAO.
- DEVE SER COLOCADO NO CAMPO DOS ROTULOS.
- ENQUANTO CX FOR DIFERENTE DE ZERO A INSTRUCAO E' EXECUTADA E CX E'
DECREMENTADO DE UMA UNIDADE.
- CASO O FLAG Z FIQUE INATIVO (ZF=0) APOS A EXECUCAO DA INSTRUCAO , A REPETICAO
SERA' INTERROMPIDA.
- OS FLAGS NAO SAO AFETADOS PELO PREFIXO REP,MAS SIM PELA INSTRUCAO QUE
ESTA' SENDO REPETIDA.
- SE CX INICIALMENTE FOR IGUAL A ZERO A INSTRUCAO NAO E' EXECUTADA.
- O PREFIXO E' UTLIZADO EM CONJUNTO COM AS INSTRUCOES SCAS E CMPS.
- UMA VEZ QUE CX E' DECREMENTADO ANTES DO TESTE DA FLAG DE ZERO E AS
INSTRUCOES SCAS E CMPS AVANCAM (OU RECUAM) OS PONTEIROS (SI E DI) APOS A
COMPARACAO , AO FINAL DA REPETICAO TEREMOS :
1. SE ZF=1 --> NAO FOI ENCONTRADO ELEMENTO NA CADEIA QUE RESULTASSE
EM ZF=0. CX CONTEM ZERO E OS PONTEIROS APONTAM PARA
A POSICAO SEGUINTE AO FINAL DAS CADEIAS.
2. SE ZF=0 --> FOI ENCONTRADO UM ELEMENTO NA CADEIA QUE RESULTOU EM
ZF=0. CX E OS PONTEIROS CORRESPONDEM `A POSICAO SEGUINTE
A ESTE ELEMENTO.
Luciano Scandelari
Assembler 8086/8088
19
AL,'X'
DI,STRING
CX,LENGHT CORDAO
NAO_ACHOU
ACHOU
7. ENTRADA E SADA
IN
LEITURA DE PERIFERICO
IN
IN
IN
IN
AL,ENDERECO_DO_PORT
AL,DX
AX,ENDERECO_DO_PORT
AX,DX
OUT
ESCRITA EM PERIFERICO
OUT
OUT
OUT
OUT
AL,ENDERECO_DO_PORT
AL,DX
AX,ENDERECO_DO_PORT
AX,DX
Luciano Scandelari
Assembler 8086/8088
20
;Definicao de segmento
;Fim de segmento
;Fim do programa fonte e ponto de entrada
;Agrupamento de Segmentos
;Registradores de segmento
;Endereco inicial dde segmento
;Alinhamento de segmento
;Definicao de procedimento
;Fim de procedimento
E' importante frisar que as diretivas nao geram codigo executavel, elas
servem exclusivamente para orientar o compilador a montar as instrucoes fornecidas de uma forma que se adeque ao seu projeto. Tambem devemos notar que muitos
dos operadores sao opcionais.
SEGMENT
ENDS
Define qual segmento sera' utilizado para o codigo ou dados que forem
colocados entre o SEGMENT e o ENDS. Um programa consiste em um ou mais
segmentos. Normalmente utilizamos um para pilha, um para codigo e um para dados.
Nada impede que utilizemos varios segmentos dentro de um programa.
O formato geral deste operador e' o seguinte:
nome
nome
SEGMENT
.
.
.
ENDS
[opcoes]
Luciano Scandelari
Assembler 8086/8088
21
exemplo:
PILHA
END PONTO_DE_ENTRADA
Este operador e' obrigatorio e tem duas finalidades:
1- identifica o fim do programa fonte. Nenhuma linha apos esta diretiva
sera' compilada.
2- o ponto de entrada, opcional, quando utilizado, identifica qual a
procedure que sera' tomada como ponto de entrada no programa
GROUP
A diretiva GROUP, associa um nome de grupo com um ou mais segmentos,
e faz com que todos os labels ou variaveis definidos em um dado segmento a ter
um endereco que e' relativo ao inicio do grupo. Os segmentos que comporao um
grupo nao estarao necessariamente contiguos. Isto significa que segmentos que
nao fazem parte do grupo podem ser carregados entre segmentos que fazem parte.
Luciano Scandelari
Assembler 8086/8088
22
0
1
2
3
4
5
6
40 X 25 MONOCROMATICO ALFANUMERICO
40 X 25 CROMATICO
ALFANUMERICO
80 X 25 MONOCROMATICO ALFANUMERICO
80 X 25 CROMATICO
ALFANUMERICO
320 X 200 GRAFICO CROMATICO
320 X 200 GRAFICO MONOCROMATICO
640 X 200 GRAFICO MONOCROMATICO
__!\
FORMA DE ARMAZENAMENTO DE UM
\
CARACTERE NO MODO ALFANUMERICO __ /
!/
+-------------+-------------+
! CARACTERE !
ATRIBUTO !
! EM ASC-II ! CONF.TABELA !
+-------------+-------------+
POSICAO PAR
POSICAO IMPAR
1
0
0
0
1
0
0
0
0
1
0
0
0
0 -------->
1
1 -------->
0
1 -------->
0
0 -------->
DEMAIS---------->
REVERSO
NORMAL
SUBLINHADO
INVISIVEL
NORMAL
Luciano Scandelari
Assembler 8086/8088
23
Luciano Scandelari
(MODO
(MODO
(MODO
(MODO
0 E 1).
2 E 3).
4 E 5).
6).
Assembler 8086/8088
24
PILHA
PILHA
DADOS
DADOS
EXTRA
EXTRA
SEGMENT
STACK
[SEGMENTO DE PILHA]
ENDS
SEGMENT
[SEGMENTO DE DADOS]
ENDS
SEGMENT
[SEGMENTO EXTRA]
ENDS
CODIGO
SEGMENT
ASSUME SS:PILHA,DS:DADOS,ES:EXTRA,CS:CODIGO
PRINC
PROC
PUSH
MOV
PUSH
MOV
MOV
MOV
MOV
FAR
DS
AX,0
AX
AX,DADOS
DS,AX
AX,EXTRA
ES,AX
.
.
.
PRINC
PROC1
PROC1
PROC2
PROC2
CODIGO
RET
ENDP
PROC
[PROCEDIMENTO 1]
ENDP
PROC
[PROCEDIMENTO 2]
ENDP
ENDS
END
PRINC
Luciano Scandelari
Assembler 8086/8088
25
PILHA
PILHA
DADOS
DADOS
SEGMENT
STACK
DW
256 DUP (0)
ENDS
SEGMENT
DB
'ESTA E UMA MENSAGEM NA AREA DE DADOS',0DH,0AH,'$'
ENDS
CODIGO
SEGMENT
ASSUME SS:PILHA,DS:DADOS,ES:DADOS,CS:CODIGO
PRINC
PROC
PUSH
MOV
PUSH
MOV
MOV
MOV
MOV
CALL
FAR
DS
AX,0
AX
AX,DADOS
DS,AX
AX,EXTRA
ES,AX
MONOC
LEA
MOV
INT
RET
ENDP
DX,MENSAGEM
AH,9
21H
PROC
MOV
MOV
INT
MOV
MOV
INT
MOV
MOV
MOV
INT
RET
ENDP
NEAR
AH,0
AL,3
10H
AH,5
AL,0
10H
AH,11
BH,0
BL,0
10H
MONOC
MONOC
CODIGO
ENDS
END
PRINC
Luciano Scandelari
Assembler 8086/8088
26
Luciano Scandelari
Assembler 8086/8088
27
CODIGO
SEGMENT
ASSUME CS:CODIGO,SS:CODIGO,ES:CODIGO,SS:CODIGO
ORG
100H
INICIO:
JMP
COMECO
.
.
.
;AQUI FICA A AREA DE DADOS
.
.
.
COMECO
PROC NEAR
.
.
.
;AQUI FICA A AREA DE PROGRAMA
.
.
.
RET
;RETORNA PARA O DOS
COMECO
ENDP
CODIGO
ENDS
END
INICIO
Luciano Scandelari