Você está na página 1de 11

MC404 MC404

ORGANIZAO BSICA DE COMPUTADORES ORGANIZAO BSICA DE COMPUTADORES


E LINGUAGEM DE MONTAGEM E LINGUAGEM DE MONTAGEM

2006 Introduo linguagem assembly do


Prof. Paulo Cesar Centoducatte 8086
ducatte@ic.unicamp.br
www.ic.unicamp.br/~ducatte

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-1 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-2

Introduo linguagem assembly do 8086


Sumrio
Introduo linguagem assembly do 8086

A sintaxe assembly do 8086


Sintaxe Assembly do 8086
Declaraes
Instrues A linguagem montadora no sensvel letra
Diretivas
Formato de dados maiscula ou minscula
Binrio
Decimal Para facilitar a compreenso do texto do
Hexadecimal
Caracteres ASCII e strings programa, sugere-se:
Variveis
Constantes uso de letra maiscula para cdigo;
Algmas Instrues Bsicas
Modelos de Memria
uso de letra minscula para comentrios.
Segmentos
Instrues de entrada e sada
Funes de E/S do BIOS ou DOS
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-3 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-4

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Declaraes (statements): Formato de uma declarao (linha de programa):

Instrues, que so convertidas em cdigo de [Nome:] [Cod. oper.] [Operando(s)] [;Comentrio]


mquina
Exemplo:
Diretivas, que instruem o montador a realizar INICIO: MOV CX,5h ;inicializar contador
alguma tarefa especfica:
Observao:
Alocar espao de memria para variveis;
A separao entre os campos deve ser do tipo
<espao> ou <tab>.
Criar uma sub-rotina (procedure ou procedimento).

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-5 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-6
Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Campo Nome: Campo de Cdigo de Operao:


Pode ser um rtulo de instruo, um nome de sub-rotina, um Contem o cdigo de operao simblico (mnemnico)
nome de varivel, contendo de 1 a 31 caracteres, iniciando por
No caso de diretivas, contem o cdigo de pseudo-
uma letra ou um caracter especial e contendo somente letras,
nmeros e os caracteres especiais ? . @ _ : %
instruo

Exemplos: nomes vlidos nomes invlidos Exemplos:


LOOP1: DOIS BITS instrues diretivas
.TEST 2abc
MOV .MODEL
@caracter &A2.25
SOMA_TOTAL4 #33 ADD .STACK
INC nome PROC
Observao: JMP
O Montador traduz os nomes por endereos de memria ou
valores constantes.
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-7 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-8

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Campo de operandos: Campo de operandos (cont.):

Instrues podem conter 0, 1 ou 2 operandos no No caso de instrues de dois operandos:


8086.
o primeiro, operando destino: registrador ou posio de
Exemplos: memria onde o resultado ser armazenado, o contedo
inicial ser modificado;
NOP ; sem operandos: instrui para fazer nada o segundo, operando fonte: no modificado pela instruo;
INC AX ; um operando: soma 1 ao contedo de AX os operandos so separados por uma vrgula.
ADD A,2d ; dois operandos: soma 2 ao contedo da
; palavra de memria A (varivel A)
No caso de diretivas, o campo de operandos
ADD A,2
contem mais informaes acerca da diretiva.
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3-9 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 10

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Campo de Comentrio: Campo de Comentrio (cont.):

Um ponto-e-vrgula ( ; ) marca o incio deste campo;


O Montador ignora tudo aps este marcador at o fim da
linha; Exemplos:
Comentrios so opcionais, mas imprescindveis. MOV CX,0 ;movimenta 0 para CX (bvio!
evitar)
OBS.: Uma boa prtica de programao MOV CX,0 ;CX conta no. de caracteres,
comentar tudo e incluir a informao acerca da ;inicialmente vale 0
idia por trs da codificao (o algortmo). ; (linhas em branco: separao)
;
; inicializao dos registradores (linha inteira de comentrio)
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 11 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 12
Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Formato de dados, variveis e constantes Exemplos de nmeros ilegais:


Nmeros:
Exemplos: 1,234 caracter estranho (vrgula)

FFFFh no comea por nmero de 0 a 9, difcil


binrio: 1110101b ou 1110101B
distinguir do nome de uma varivel

decimal: 64223 ou 64223d ou 64223D, 1110101


1B4D no termina com h ou H e contm dgito no
considerado decimal (ausncia do B),
decimal

hexa: 64223h ou 64223H, 0FFFFh (comea com um


decimal e termina com h), 1B4Dh

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 13 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 14

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Caracteres ASCII e strings: Variveis:


Varivel um nome simblico para um dado
Caracteres isolados ou strings de caracteres devem estar atualizvel pelo programa.
escritos dentro de aspas simples ( ) ou duplas ( ).
Cada varivel possui um tipo e associada a um endereo
Exemplos: de memria;
A ou A
Usa-se diretivas para definir o tipo da varivel;
ola, como vai
EXEMPLO O Montador atribui o endereo de memria.

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 15 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 16

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Definio de variveis de tipo byte:

Nome DB valor_ inicial


DIRETIVAS SIGINIFICADO

DB define byte (8 bits) Exemplos:


DW define word (16 bits, 2 bytes consecutivos)
DD define doubleword (2 palavras, 4 bytes consecutivos) Alfa DB 0h ; equivale a 00h
DQ define quadword (4 palavras, 8 bytes consecutivos)
DT define ten bytes (10 bytes consecutivos)
A DB 10h
B DB 0150h ; ilegal, por que?
BIT DB ? ; no inicializada

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 17 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 18
Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Definio de variveis de tipo word: Array: sequncia de bytes ou words consecutivos na memria
Armazenar dados relacionados;
Armazenar caracteres ASCII organizados (ex: texto).
Nome DW valor_inicial
Exemplos:
BYTE_ARRAY DB 10h,20h,30h
Exemplos:
WORD_ARRAY DW 1000h,123h,0h,0FFFFh
WORD1 DW 0h ; equivale a 0000h WORD1+1 12h
CONTA DW 0150h ; OK!, por que? WORD 34h
Um array pode conter um string de caracteres, sendo
C DW ? ; no inicializada
definido como:
WORD1 DW 1234h ; byte baixo 34h, endereo WORD1
; byte alto 12h endereo WORD1+1
LETRAS DB abC ; e equivalente aos caracteres ASCII
LETRAS DB 61h,62h,43h ;depende se maiscula ou
; minscula
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 19 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 20

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Combinao de caracteres e nmeros numa mesma Constantes: um nome simblico para um dado de valor
constante, que seja muito utilizado num programa.
definio: Para atribuir um nome a uma constante, utiliza-se a pseudo-
instruo EQU (equates -> igual a) e a sintaxe:
MENSAGEM DB Alo!, 0Ah,0Dh,$ Nome EQU valor_da_constante

Exemplos:
OBS.: Para alguns servios da BIOS o caracter '$'
marca o fim de uma string de caracteres (e no LF EQU 0Ah ;caracter Line Feed como LF
exibido). CR EQU 0Dh ;caracter Carriage return como CR
LINHA1 EQU Digite seu nome completo
MENSAGEM DB LINHA1,LF,CR

Observao: Constantes no geram cdigo de mquina e nem


ocupam espao de memria em tempo de execuo.

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 21 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 22

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Algumas instrues bsicas do 8086 Instruo MOV

MOV destino, fonte


Operando Operando destino
Usada para transferir dados entre: fonte
Registrador Registrador Posio
registrador e registrador
dados segmento memria
registrador e uma posio de memria Registrador
Dados sim sim sim
mover um nmero diretamente para um registrador ou
Registrador sim no sim
posio de memria Segmento
Posio sim sim no
memria
Constante sim no sim

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 23 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 24
Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Exemplos de instrues MOV vlidas: MOV AX,WORD1

Antes Depois
MOV AX,WORD1 ;movimenta o contedo da posio de AX AX
;memria WORD1 para o registrador AX 0006h 8FFFh
WORD1 WORD1
8FFFh 8FFFh
MOV AH,A ;transfere o caracter ASCII A para AH

MOV AH,41h ;idem anterior: 41h corresponde ao caracter A

MOV AH,BL ;move o contedo do byte baixo de BX


;o byte alto de AX Obs: para a instruo MOV no permitido operar
de posio de memria para posio de memria
diretamente, por motivos tcnicos do 8086.
MOV AX,CS ;transfere cpia do contedo de CS para AX

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 25 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 26

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Por exemplo: XCHG destino, fonte

MOV WORD1,WORD2 ;instruo invlida. Esta restrio


;contornada como segue Usada para troca de dados (nos dois sentidos)
; entre:
MOV AX,WORD2 ;primeiro o contedo de WORD2 vai para AX
registrador e registrador
MOV WORD1,AX ;depois, o contedo de AX movido para a
;posio de memria WORD1 registrador e uma posio de memria

no permitido trocas diretas entre duas posies de


memria

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 27 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 28

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

XCHG destino, fonte Exemplos de instrues vlidas:

XCHG AX, WORD1 ;troca o contedo da posio de memria


; WORD1 com o do registrador AX
Operando Operando destino XCHG AH, BL ;troca o contedo do byte baixo de BX
fonte
Registrador Posio ;com o do byte alto de AX
dados memria
Registrador
Dados sim sim XCHG AX,BX
Registrador no no
Segmento
Antes Depois
Posio sim no AX BX
memria 0006h FFFFh
AX BX

FFFFh 0006h

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 29 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 30
Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

ADD destino,fonte Exemplos de instrues vlidas:


SUB destino,fonte
Usadas para adicionar (ou subtrair) dados entre:
ADD AX,BX ;soma o contedo de BX com AX, resultado em AX
registrador e registrador
registrador e uma posio de memria
ADD AX,WORD1 ;soma o contedo da posio de memria
adicionar (ou subtrair) um nmero diretamente a (de) um
registrador ou posio de memria ;WORD1 a AX e resultado em AX

Operando Operando destino


SUB WORD2,AX ;subtrai o contedo de AX do contedo da
fonte ;posio de memria WORD2, resultado em
Registrador Posio
dados memria ;WORD2
Registrador
Dados sim sim
Posio sim no
SUB BL,5 ;subtrai a quantidade 5 decimal do contedo
memria ; de BL
Constante sim sim

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 31 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 32

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Observaes: INC destino


DEC destino
ADD BYTE1,BYTE2 ;instruo invlida esta restrio
Usadas para adicionar 1 (incrementar) ou subtrair 1
; contornada como segue (decrementar) ao/do contedo de:
um registrador;
MOV AL,BYTE2 ;primeiro o contedo de BYTE2 vai para AL uma posio de memria.

ADD BYTE1,AL ;depois, o contedo de AL somado ao da Exemplos:


; posio de memria BYTE1, resultado final INC CX ;incrementa o contedo de CX
; em BYTE1 INC WORD1 ;incrementa contedo posio memria WORD1
DEC BYTE2 ;decrementa contedo posio de memria BYTE2
DEC CL ;decrementa o contedo de CL (byte baixo de CX)
O resultado de SUB, se for negativo, estar armazenado no
registrador destino em complemento de 2.

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 33 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 34

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

NEG destino Traduo de expresses matemticas em Linguagem


Usada para substituir o contedo destino pelo seu de Alto Nvel para Linguagem Montadora
complemento de 2, operando sobre:
um registrador;
uma posio de memria. Exemplo1: B = A

Exemplos: MOV AX,A ; transfere o contedo da posio de


; memria A para AX e
NEG BX ; gera o complemento de 2 MOV B,AX ; transfere AX para a posio de
; do contedo de BX ; memria B
NEG WORD1 ; idem, no contedo da posio de
; memria WORD1
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 35 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 36
Estrutura de um programa em Linguagem
Introduo linguagem assembly do 8086 Montadora
Modelos de memria - TASM
Exemplo 2: A = 5 - A O tamanho que os segmentos de cdigo e de dados devem
ter especificado pelo modelo de memria por meio da
diretiva .MODEL.
NEG A ; gera o complemento de 2 da posio Sintaxe: .MODEL modelo_de_memria
; de memria A e
Modelo Descrio
ADD A,5 ; realiza (-A) + 5, que equivale a 5 - A
SMALL Cdigo em 1 segmento;
Dados em 1 segmento
Exemplo 3: A = B - 2A MEDIUM Cdigo em mais de 1 segmento;
Dados em 1 segmento
COMPACT Cdigo em 1 segmento;
Dados em mais de 1 segmento
MOV AX,B ; AX contem a varivel B LARGE Cdigo em mais de 1 segmento;
SUB AX,A ; AX contem B - A Dados em mais de 1 segmento;
Nenhum array maior que 64 Kbytes
SUB AX,A ; AX contem B - 2A HUGE Cdigo em mais de 1 segmento;
MOV A,AX ; movimenta o resultado para A Dados em mais de 1 segmento;
Arrays maiores que 64 Kbytes

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 37 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 38

Estrutura de um programa em Linguagem Estrutura de um programa em Linguagem


Montadora Montadora

Segmento de dados Segmento de pilha (stack segment)


Contem a definio e declarao das variveis. Reserva um bloco de posies de memria consecutivas
para armazenar a pilha.
Pode-se tambm fazer a atribuio de smbolos para
Deve ter espao suficiente para suportar a pilha no seu
constantes.
mximo tamanho.

Sintaxe: .DATA (segment data) Sintaxe: .STACK tamanho (segment stack)


Exemplo:
.DATA Exemplo:
WORD1 DW A8h .STACK 100h ; reserva 100h bytes para a rea
BYTE1 DB 5 ; de pilha, um tamanho razovel
MENSAGEM DB Isto e uma mensagem ; para a maioria das aplicaes no
LF EQU 0Ah ; recursivas
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 39 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 40

Estrutura de um programa em Linguagem Estrutura de um programa em Linguagem


Montadora Montadora

Segmento de cdigo Exemplo:


.CODE
nome PROC
Contem propriamente as instrues do programa. ;
;corpo da procedure -> instrues
Dentro do segmento de cdigo, as instrues so ;
organizadas em procedimentos ou sub-rotinas. nome ENDP
;
;outras procedures seguem abaixo, se existirem

Sintaxe: .CODE (segment code) onde:


nome -> identificao da procedure
PROC e ENDP -> pseudo-instrues usadas para delimitar a
procedure
para um programa simples, no h necessidade de se definir
a procedure.

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 41 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 42
Estrutura de um programa em Linguagem
Montadora
Introduo linguagem assembly do 8086
Exemplo de uma estrutura de programa assembly completa
TITLE nome_do_programa Instrues de entrada e sada
.MODEL SMALL IN e OUT -> instrues Assembly para acessar portas de
.STACK 100h
.DATA E/S para perifricos
;
;definio dos dados: variveis e constantes
; No so utilizadas na maioria das aplicaes:
.CODE os endereos das portas de E/S variam conforme o modelo
EXEMPLO PROC
; do PC mais fcil utilizar o SO (DOS) ou o BIOS para
;seqncia de instrues Funes de E/S
;
EXEMPLO ENDP
; Para acessar as rotinas de E/S do BIOS ou DOS
;segue outras procedures utiliza-se a instruo:
;
END EXEMPLO INT nmero_de_interrupo
Obs:
se no houver definio de procedure, usa-se apenas END. 2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 43 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 44

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086

Observao: Algumas funes DOS de E/S

Em uma chamada do BIOS (ou funo do DOS) o Funo 1h: Entrada de um caracter simples pelo teclado
programa em curso interrompido, passando o Acesso: AH = 1h
controle para o DOS, que realiza a operao de E/S Resultado: AL = cdigo ASCII do caracter digitado no
e retorna o controle para o programa. teclado

Funo 2h: Exibio de caracter simples no monitor de vdeo


Exemplo:
Acesso: AH = 2h
INT 21h ; acessa um grande nmero de funes DL = cdigo ASCII do caracter a exibir
; de E/S do DOS Resultado: exibio na tela do monitor

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 45 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 46

Introduo linguagem assembly do 8086 Introduo linguagem assembly do 8086


Exemplos:
Trecho padro de programa para providenciar Trecho padro de programa para providenciar a sada
a entrada de um caracter ASCII pelo teclado: de um caracter ASCII para o monitor de vdeo:
MOV AH,1h ;prepara para entrar caracter pelo
; teclado o processador espera at
MOV AH,2h ; prepara para exibir caracter no monitor
; que o usurio digite o caracter
MOV DL,? ; o caracter ?
; desejado INT 21h ; exibe (monitor apresenta ?)
INT 21h ; aps a digitao, caracter ASCII ; aps a exibio, o cursor da tela avana
; em AL. Se um caracter no-ASCII ; para a prxima posio da linha (se j for
; for digitado, AL = 0h ; atingido o fim da linha, vai para o incio da
; prxima linha)
Obs: o caracter teclado tambm aparece no monitor
(eco), por causa do DOS.
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 47 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 48
Estrutura de um programa em Linguagem
Introduo linguagem assembly do 8086 Montadora

Obs: tambm se pode exibir caracteres ASCII de


controle:

Cdigo
ASCII Smbolo Funo
07h BEL Bell (som de bip)
08h BS Back Space (espao para trs)
09h HT Tab (tabulao)
0Ah LF Line Feed (ir para uma nova
linha)
0Dh CR Carriage Return (ir para inicio
linha)

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 49 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 50

Criando e Rodando um Programa Criando e Rodando um Programa

Especificao do programa ECO DO TECLADO Escrevendo as partes


NA TELA:
a) O programa estimula o usurio a interagir apresentando
ler um caracter do teclado
um ?:
MOV AH,2 ; funcao DOS para exibir caracter
exibir o caracter lido na prxima linha da tela do
monitor MOV DL,'?' ; caracter '?'
retornar ao SO INT 21H ; exibir

b) Lendo o caracter teclado pelo usurio e salvando-o em


num registrador:
MOV AH,1 ; funcao DOS para leitura de caracter
INT 21H ; caracter e' lido em AL
MOV BL,AL ; salvando-o em BL
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 51 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 52

Criando e Rodando um Programa (cont.) O programa ECO completo:


TITLE PGM4_1: PROGRAMA DE
ECO
c) Movendo o cursor da tela para o incio da prxima DO TECLADO NA TELA ;movendo de linha
MOV AH,2 ;funcao para exibir caracter
linha: .MODEL SMALL MOV DL,0DH ;caracter <CR> - return
MOV AH,2 ; funcao DOS para exibir caracter .STACK 100H INT 21H ;executando
.CODE MOV DL,0AH ;caracter <LF> - line feed
MOV DL,0DH ; caracter ASCII <CR> - return INT 21H ;executando exibindo na
MAIN PROC
INT 21H ; executando ; ;tela o caracter lido: efeito
; de ECO
MOV DL,0AH ; caracter ASCII <LF> - line feed ;apresentacao do prompt '?' MOV DL,BL ;recuperando caracter salvo
INT 21H ; executando MOV AH,2 ;funcao para INT 21H ;exibir
exibir caracter
MOV DL,'?' ;caracter '?' ;retorno ao DOS
d) Recuperando o caracter lido e exibindo-o: INT 21H ;exibir MOV AH,4CH ; funcao para saida
INT 21H ; saindo
MOV DL,BL ; recuperando o caracter salvo ;entrada do caracter pelo teclado
MOV AH,1 ;funcao para
INT 21H ; exibir leitura de caracter
MAIN ENDP
END MAIN
INT 21H ;caracter e'
lido em AL
MOV BL,AL ;salvando-o em
BL
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 53 ; MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 54
Como Obter o Programa ECO.EXE Executvel. Como Obter o Programa ECO.EXE Executvel.

3. Rode o programa Lincador TLINK. Como resultado,


1. Edite o program ECO utilizando um editor de texto aparece em seu diretrio de trabalho um arquivo
ECO.EXE.
simples, com sada em texto ASCII. Sugesto: use o
C:\ > TLINK ECO.OBJ <enter>
EDIT do DOS. O arquivo (texto ASCII) deve ter a
extenso . ASM
C:\ > EDIT ECO.ASM <enter> 4. Rode o programa ECO.EXE, respondendo ao ? com uma
letra K, por exemplo.
C:\ > ECO.EXE <enter>
OBS.: Se usar NASM ateno para o uso das Diretivas
?K <- letra K digitada pelo usurio
K <- eco da letra K aparece na tela
2. Rode o programa Montador TASM (Borland). Como C:\ > <- note que o controle retorna ao DOS
resultado, aparece em seu diretrio de trabalho um
arquivo ECO.OBJ
C:\ > TASM ECO. ASM <enter> Exerccio.: Tente com outras letras ou procure modificar o
programa para obter outros efeitos com caracteres
digitados no teclado.
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 55 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 56

Como Apontar DS para o Segmento de Dados do


Mais Funes DOS de E/S Programa
@DATA  palavra reservada para obter o nmero do segmento de
Funo 4Ch: Termina o processo corrente e transfere controle para o DOS dados definido pela diretiva .DATA, que contem as variveis e
Acesso: AH = 4Ch constantes.
Resultado: sada para o DOS
Exemplo:
Funo 9h: Exibio de string de caracteres no monitor de vdeo
Para inicializar corretamente DS para o programa corrente:
Acesso: AH = 9h
DX = offset do endereo onde comea o string
Resultado: string exibido .DATA
...
Obs: o string de caracteres deve terminar com o caracter $, que marca o .CODE
fim da sequncia e no exibido.
MOV AX,@DATA ;coloca o nmero do segmento de dados em AX
Para exibio de um string de caracteres h dois problemas:
MOV DS,AX ;pois DS no pode receber @DATA diretamente
a) DS inicialmente no est apontando para o segmento de dados do
programa recm iniciado (DS ainda aponta para algum segmento de dados Observao:
do DOS); O programa Montador traduz o nome @DATA pelo nmero de
b) deve-se colocar em DX o offset do endereo do string que queremos segmento onde se encontram os dados definidos pela diretiva
exibir .DATA.

2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 57 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 58

Como Colocar em DX o Offset do Endereo de um


Programa para Imprimir um String de Caracteres
String a Exibir
TITLE PROG PARA IMPRESSAO DE
'STRING'
LEA destino,fonte .MODEL SMALL
Significa Load Effective Address -> coloca uma .STACK 100H ; exibindo a MENSAGEM
.DATA ;
cpia do offset do endereo da posio de memria MSG DB 'ALO! Como voces estao indo!$' MOV AH,9 ; funcao DOS
fonte no registrador destino. .CODE ; para exibir 'string'
MAIN PROC INT 21H ; exibindo
Exemplo: ; ;
; inicializando o registrador DS ; retorno ao DOS
; ;
.DATA MOV AX,@DATA MOV AH,4CH ; funcao DOS para
MENSAGEM DB Adoro ISB!$ MOV DS,AX ; segmento dados ; saida
... ; inicializado INT 21H ; saindo
; MAIN ENDP
.CODE
; obtendo offset posio memria de Msg END MAIN
LEA DX,MENSAGEM ;DX carregado com o offset de MENSAGEM
LEA DX,MSG ;offset endereo vai
Obs: aps esta operao, DX conter o offset da posio de memria ; para DX
Reescreva o programa usando NASM
onde inicia o string MENSAGEM
2S2006 2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 59 MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 60
Exerccio

Programa de converso de letra minscula para maiscula.

Especificao do programa:
- apresente ao usurio uma mensagem do tipo:
Entre com uma letra minuscula:
- ler um caracter do teclado (no necessrio testar se
letra)
- apresente uma segunda mensagem do tipo:
Em maiuscula ela fica:
- apresente em seguida a letra convertida
- retornar ao SO

OBS.: Repita o programa testando a validade do


caracter digitado

2S2006
MC404 Organizao Bsica de Computadores e Linguagem de Montagem 3 - 61

Você também pode gostar