You are on page 1of 4

16/12/2015

GuiaparaoAssembly80x86,deGavinParte2

UmaIntroduoaInstruesAssembly
Existemmuitasinstruesemassemblymasapenasporvoltadevintedelasvocdeverconhecere
utilizarmuitofreqentemente.Amaioriadasinstruessocompostasportrscaracteresepossuem
umoperandoentoumavrgulaeentooutrooperando.Porexemplo,paracopiarumdadoparaum
registradorvocutilizaainstruoMOV.
movax,10
movbx,20
movcx,30
movdx,40

;copia10paraax
;copia20parabx
;copia30paracx
;copia40paradx

Observequeemassemblytudoqueestiverapsum(pontoevrgula)ignorado.Istomuitotil
parasecolocarcomentriosemseucdigo.

PushePop:DuasInstruesparamanuseiodaPilha
Vocjconheceapilhamasnosabecomocolocareretirardadosdela.Existemduasinstrues
simplesquevocprecisaconhecer:pushepop.Eisasintaxeparaoseuuso:
PUSH:Colocadadosnotopodapilha.
Sintaxe:
pushdados

POP:Recuperaodadodotopodapilhaparaumregistradorespecificadoouumavarivel.
Sintaxe:
popregistrador(ouvarivel)

Esteexemplodecdigodemonstracomoutilizarasintruespushepop
pushcx
pushax
popcx
popax

;copiacxnapilha
;copiaaxnapilha
;recuperavalordotopodapilhaparacx
;recuperavalordotopodapilhaparaax

VejaqueosvaloresdeCXeAXserotrocados.Humainstruoparatrocarocontedodedois
registradores:XCHG,quereduziriaofragmentodecdigoanteriorpara"xchgax,cx".

TiposdeOperandos
Existemtrstiposdeoperandosemassembly:imediato,registradorememria.Imediatoaquele
valorqueserconhecidonacompilaoesempreseromesmo,porexemplo'20'ou'A'.Um
operandodotiporegistradorqualquerregistradordeusogeraloudendice,porexemploAXouSI.
Umoperandodotipomemriaumavarivelqueestarmazenadaemmemriaeserdetalhado
maistarde.

AlgumasInstruesquevocprecisarconhecer
Estaumalistadealgumasinstruesimportantesquevocprecisaconhecerantesdeconseguir
entenderouescreverprogramasemassembly.
MOV:moveumvalordeumlugarparaoutro.
http://www.cin.ufpe.br/~arfs/Assembly/apostilas/Tutorial%20Assembly%20%20Gavin/ASM3.HTM

1/4

16/12/2015

GuiaparaoAssembly80x86,deGavinParte2

Sintaxe:
MOVdestino,origem

porexemplo:
movax,10
;moveumvalorimediatoparaax
movbx,cx
;moveovalordecxparabx
movdx,Number ;movesovalordeNumberparadx

INT:chamaumafunoDOSouBIOSquesosubrotinasparafazercoisasparaoqueno
criaramosumafuno,porexemploalteraromododevdeo,abrirumarquivo,etc.
Sintaxe:
INTnmerodainterrupo

Porexemplo:
int21h
int10h

;ChamaserviosdoDOS
;ChamaainterrupodeVdeodaBIOS

Amaiorpartedasinterrupespossuemmaisdeumafuno,significandoquevocdevepassaro
nmerodafunodesejada.EstenormalmentecolocadoemAH.Paraimprimirumamensagemna
teladomonitortudoquevocprecisafazeristo:
movah,9
int21h

;nmerodasubrotina9
;chamaainterrupo

Masprimeirovocdeveespecificaroqueimprimir.EstafunoprecisaqueDS:DXsejaumponteiro
dotipofarparaondeastringestiver.Astringdeveserterminadacomumcaractercifro($).Isto
seriafcilseDSpudessesermanipuladodiretamente,paracontornaristonsteremosqueusarAX.
Esteexemplomostracomoistofunciona:
movdx,OFFSETMessage
movax,SEGMessage
movds,ax

movah,9

int21h

;DXcontmooffsetdamessagem
;AXcontmosegmentodamessagem
;DS:DXapontaparaamessagem
;funo9exibeastring
;chamaserviodoDOS

AspalavrasOFFSETeSEGdizemaomontadorquevocquerosegmentoouooffsetdamensagem
colocadonoregistrador,noocontedodamensagem.Agoraquesabemoscomoprepararocdigo
paraexibiramensagem,precisaremosdeclararamensagem.Nosegmentodedadosnsdeclaramosa
mensagemdaseguinteforma:
MessageDB"HelloWorld!$"

Observequeastringestterminadacomumcifro.Oquesignifica'DB'?DBaabreviaode
DefinirByteeamensagemumconjuntodebytes(umcaracterASCIIocupaumbyte).Dados
podemserdeclaradosemvriostamanhos:bytes(DB),words(DW)edoublewords(DD).Vocno
precisasepreocuparcomdoublewordsporenquantoumavezquevocprecisadeumregistradorde
32bits,talcomooEAX,paracoloclas.
Aquiestoalgunsexemplosdedeclaraodedados:
Number1db?
Number2dw?

Osinaldeinterrogao(?)nofinalsignificaqueodadonoiniciado,isto,elenopossuiumvalor
http://www.cin.ufpe.br/~arfs/Assembly/apostilas/Tutorial%20Assembly%20%20Gavin/ASM3.HTM

2/4

16/12/2015

GuiaparaoAssembly80x86,deGavinParte2

definidonoinciodaexecuo.Istopoderiaserescritofacilmentecomo:
Number1db0
Number2dw1

DestavezNumber1iguala0eNumber2iguala1quandooseuprogramacarregado.Seu
programatambmterumtamanhode3bytes.
Sevocdeclararumavarivelcomoumawordvocnopodermoverovalordestavarivelparaum
registradorde8bitsevocnopoderdeclararumavarivelcomoumbyteemoverseuvalorpara
umregistradorde16bits.Porexemplo:
moval,Number1
movax,Number1

;ok
;erro

movbx,Number2
movbl,Number2

;ok
;erro

Tudooquevocdeverlembrarquevocspodecolocarbytesdentroderegistradoresde8bits,e
wordsemregistradoresde16bits.

Seuprimeiroprogramaassembly
Agoraquevocconhecealgumasinstruesbsicaseumpoucosobredadoshoradedaruma
olhadaemumprogramaassemblycompletoquepossasermontado.
Listagem1:1STPROG.ASM
;Esteumprogramasimplesqueexibe"HelloWorld!"
;nateladomonitor.

.modelsmall
.stack
.data
Messagedb"HelloWorld!$"

;messagemaserexibida

.code
start:
movdx,OFFSETMessage ;offsetdaMessagemestemDX
movax,SEGMessage
;segmentodaMessagemestemAX
movds,ax

;DS:DXapontaparaastring
movah,9
int21h
movax,4c00h
int21h

;funo9exibestring
;chamaservioDOS
;retornaaoDOS

ENDstart

;terminaaqui

InstruesdeMontagem
Existemalgumasinstruesparamontareligarprogramas.Sevoctiverummontadorquenoo
TASMouoA86entoconsulteseumanualdeinstrues.

TurboAssembler
http://www.cin.ufpe.br/~arfs/Assembly/apostilas/Tutorial%20Assembly%20%20Gavin/ASM3.HTM

3/4

16/12/2015

GuiaparaoAssembly80x86,deGavinParte2

tasmfile.asm
tlinkfile[/t]

Aopo/tcriaumarquivo.COM.Istosirfuncionarsefordeclaradoomodelodememriatinyno
arquivofonte.

A86
a86file.asm

Istoirgeraroprogramaemumarquivo.COM.Noimportaqualsejaomodelodememria.

RetornarparaoSumrio

http://www.cin.ufpe.br/~arfs/Assembly/apostilas/Tutorial%20Assembly%20%20Gavin/ASM3.HTM

4/4