June 12th 199 Co!yri"ht#C$199%199& ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Este tutorial foi tradu(ido !ara o )ortu"u*s !or Jeferson +maral. ' ' e%mail, amaral-inf.ufsm.br ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Este tutorial tem o intuito de a!enas introdu(ir o leitor ao mundo da !ro"rama.ao em /in"ua"em +ssembly0 nao tem0 !ortanto e de forma al"uma0 !lano de es"otar o assunto. Co!yri"ht #C$ 199%199&0 1u"o )ere( )ere(. +nyone may re!rodu.e this do.ument0 in 2hole or in !art0 !rovided that, #1$ any .o!y or re!ubli.ation of the entire do.ument must sho2 University of Guadalajara as the sour.e0 and must in.lude this noti.e3 and #2$ any other use of this material must referen.e this manual and University of Guadalajara0 and the fa.t that the material is .o!yri"ht by 1u"o )ere( and is used by !ermission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 4 U 4 5 6 I + / 7 E / I 8 G U + G E 9 + S S E 9 : / ; %%%%%%%%%%%%%%% %%% %%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% Conte<do, 1.Introdu=>o 2.Con.eitos :?si.os @.)ro"rama=>o +ssembly A.Instru=Bes +ssembly .Interru!=Bes e "er*n.ia de arCuivos &.9a.ros e !ro.edimentos D.EEem!los de !ro"ramas F.:iblio"rafia
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 1, I84657UHI5 Conte<do, 1.1.5 Cue h? de novo neste material 1.2.+!resenta=>o 1.@.)or Cue a!render +ssemblyJ 1.A.8Ks !re.isamos da sua o!ini>o %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% 1.1.5 Cue h? de novo neste material, +!Ks um ano da reali(a=>o da !rimeira vers>o do tutorial0 e atravMs das o!iniBes re.ebidas !or e%mail0 resolvemos ter !or dis!osi=>o todos estes .oment?rios e su"estBes. Es!eramos Cue atravMs deste novo material +ssembly0 as !essoas Cue se mostrarem interessadas !ossam a!render mais sobre o seu I:9 )C. Esta nova edi=>o do tutorial in.lui, Uma se=>o .om!leta sobre .omo usar o !ro"rama debu". 9ais eEem!los de !ro"ramas. Um motor de !esCuisa0 !ara CualCuer tK!i.o ou item rela.ionado N esta nova vers>o. Consider?vel reor"ani(a=>o e revis>o do material +ssembly. Em .ada se=>o0 h? um linO !ara o 7i.ion?rio 5n%line de Com!uta=>o de 7ennis 1o2e. 1.2.+!resenta=>o, Este tutorial destina%se NCuelas !essoas Cue nun.a tiveram .ontato .om a /in"ua"em +ssembly. 5 tutorial est? .om!letamente fo.ado em .om!utadores .om !ro.essadores FPEF& da famQlia Intel0 e .onsiderando Cue a base da lin"ua"em M o fun.ionamento dos re.ursos internos do !ro.essador0 os eEem!los des.ritos n>o s>o .om!atQveis .om CualCuer outra arCuitetura. +s informa=Bes est>o dis!ostas em unidades ordenadas !ara !ermitir f?.il a.esso a .ada tK!i.o0 bem .omo uma melhor nave"a=>o !elo tutorial. 8a se=>o introdutKria s>o men.ionados al"uns .on.eitos elementares sobre .om!utadores e a /in"ua"em +ssembly em si. 1.@.)or Cue a!render +ssemblyJ + !rimeira ra(>o !ara se trabalhar .om o assembler M a o!ortunidade de .onhe.er melhor o fun.ionamento do seu )C0 o Cue !ermite o desenvolvimento de !ro"ramas de forma mais .onsistente. + se"unda ra(>o M Cue vo.* !ode ter um .ontrole total sobre o )C ao fa(er uso do assembler. Uma outra ra(>o M Cue !ro"ramas assembly s>o mais r?!idos0 menores e mais !oderosos do Cue os .riados .om outras lin"ua"ens. Ultimamente0 o assembler #montador$ !ermite uma otimi(a=>o ideal nos !ro"ramas0 seja no seu tamanho ou eEe.u=>o.
1.A.8Ks !re.isamos da sua o!ini>o, 8osso intuito M ofere.er um modo sim!les !ara Cue vo.* .onsi"a a!render +ssembly !or si mesmo. )or tanto0 CualCuer .oment?rio ou su"est>o ser? bem%vinda.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 2, C58CEI45S :RSIC5S Conte<do, 2.1.7es.ri=>o b?si.a de um sistema .om!uta.ional. 2.2.Con.eitos b?si.os da /in"ua"em +ssembly 2.@.Usando o !ro"rama debu" %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
Esta se=>o tem o !ro!Ksito de fa(er um breve .oment?rio a res!eito dos !rin.i!ais .om!onentes de um sistema .om!uta.ional0 o Cue ir? !ermitir ao usu?rio uma melhor .om!reens>o dos .on.eitos !ro!ostos no de.orrer do tutorial.
2.1.7ESC6IHI5 7E U9 SIS4E9+ C59)U4+CI58+/
Conte<do, 2.1.1.)ro.essador Central 2.1.2.9emKria )rin.i!al 2.1.@.Unidades de Entrada e SaQda 2.1.A.Unidades de 9emKria +uEiliar
Sistema Com!uta.ional. Chamamos de Sistema Com!uta.ional a .om!leta .onfi"ura=>o de um .om!utador0 in.luindo os !erifMri.os e o sistema o!era.ional.
2.1.1.)ro.essador Central. S tambMm .onhe.ido !or C)U ou Unidade Central de )ro.essamento0 Cue !or sua ve( M .om!osta !ela unidade de .ontrole e unidade de lK"i.a e aritmMti.a. Sua fun=>o .onsiste na leitura e es.rita do .onte<do das .Mlulas de memKria0 re"ular o tr?fe"o de dados entre as .Mlulas de memKria e re"istradores es!e.iais0 e de.odifi.ar e eEe.utar as instru=Bes de um !ro"rama. 5 !ro.essador tem uma sMrie de .Mlulas de memKria usadas .om freCT*n.ia e0 dessa forma0 s>o !artes da C)U. Estas .Mlulas s>o .onhe.idas .om o nome de re"istradores. Um !ro.essador de um )C !ossui .er.a de 1A re"istradores. Como os )Cs tem sofrido evolu=>o veremos Cue !odemos mani!ular re"istradores de 1& ou @2 bits. + unidade de lK"i.a e aritmMti.a da C)U reali(a as o!era=Bes rela.ionadas ao .?l.ulo simbKli.o e numMri.o. 4i!i.amente estas unidades a!enas s>o .a!a(es de reali(ar o!era=Bes elementares0 tais .omo, adi=>o e subtra=>o de dois n<meros inteiros0 multi!li.a=>o e divis>o de n<mero inteiro0 manuseio de bits de re"istradores e .om!ara=>o do .onte<do de dois re"istradores. Com!utadores !essoais !odem ser .lassifi.ados !elo Cue M .onhe.ido .omo tamanho da !alavra0 isto M0 a Cuantidade de bits Cue o !ro.essador M .a!a( de manusear de uma sK ve(.
2.1.2.9emKria )rin.i!al. S um "ru!o de .Mlulas0 a"ora sendo fabri.ada .om semi%.ondutores0 usada !ara !ro.essamentos "erais0 tais .omo a eEe.u=>o de !ro"ramas e o arma(enamento de informa=Bes !ara o!era=Bes. Cada uma das .Mlulas !ode .onter um valor numMri.o e M .a!a( de ser endere=ada0 isto M0 !ode ser identifi.ada de forma sin"ular em rela=>o Ns outras .Mlulas !elo uso de um n<mero ou endere=o. 5 nome "enMri.o destas memKrias M 6andom +..ess 9emory ou 6+9. + !rin.i!al desvanta"em deste ti!o de memKria M o fato de Cue seus .ir.uitos inte"rados !erdem a informa=>o Cue arma(enavam Cuando a ener"ia elMtri.a for interrom!ida0 ou seja0 ela M vol?til. Este foi o motivo Cue levou N .ria=>o de um outro ti!o de memKria .uja informa=>o n>o M !erdida Cuando o sistema M desli"ado. Estas memKrias re.eberam o nome de 6ead 5nly 9emory ou 659. 2.1.@.Unidades de Entrada e SaQda. )ara Cue o .om!utador !ossa ser <til !ara nKs se fa( ne.ess?rio Cue o !ro.essador se .omuniCue .om o eEterior atravMs de interfa.es Cue !ermitem a entrada e a saQda de informa=>o entre ele e a memKria. +travMs do uso destas .omuni.a=Bes M !ossQvel introdu(ir informa=>o a ser !ro.essada e mais tarde visuali(ar os dados !ro.essados. +l"umas das mais .omuns unidades de entrada s>o o te.lado e o mouse. +s mais .omuns unidades de saQda s>o a tela do monitor e a im!ressora.
2.1.A.Unidades de 9emKria +uEiliar. Considerando o alto .usto da memKria !rin.i!al e tambMm o tamanho das a!li.a=Bes atualmente0 vemos Cue ela M muito limitada. /o"o0 sur"iu a ne.essidade da .ria=>o de dis!ositivos de arma(enamento !r?ti.os e e.onUmi.os. Estes e outros in.onvenientes deram lu"ar Ns unidades de memKria auEiliar0 !erifMri.os. +s mais .omuns s>o as fitas e os dis.os ma"nMti.os. + informa=>o ali arma(enada ser? dividida em arCuivos. Um arCuivo M feito de um n<mero vari?vel de re"istros0 "eralmente de tamanho fiEo0 !odendo .onter informa=>o ou !ro"ramas. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
2.2.C58CEI45S :RSIC5S Conte<do, 2.2.1.Informa=Bes nos .om!utadores 2.2.2.9Mtodos de re!resenta=>o de dados
2.2.1.Informa=>o no .om!utador, 2.2.1.1.Unidades de informa=>o 2.2.1.2.Sistemas numMri.os 2.2.1.@.Convertendo n<meros bin?rios !ara de.imais 2.2.1.A.Convertendo n<meros de.imais !ara bin?rios 2.2.1..Sistema heEade.imal
2.2.1.1.Unidades de informa=>o )ara o )C !ro.essar a informa=>o0 M ne.ess?rio Cue ela esteja em .Mlulas es!e.iais0 .hamadas re"istradores. 5s re"istradores s>o "ru!os de F ou 1& fli!%flo!s. Um fli!%flo! M um dis!ositivo .a!a( de arma(enar 2 nQveis de volta"em0 um baiEo0 "eralmente P. volts0 e outro .omumente de volts. 5 nQvel baiEo de ener"ia no fli!%flo! M inter!retado .omo desli"ado ou P0 e o nQvel alto0 .omo li"ado ou 1. Estes estados s>o "eralmente .onhe.idos .omo bits0 Cue s>o a menor unidade de informa=>o num .om!utador. Um "ru!o de 1& bits M .onhe.ido .omo !alavra3 uma !alavra !ode ser dividida em "ru!os de F bits .hamados bytes0 e "ru!os de A bits .hamados nibbles. 2.2.1.2.Sistemas numMri.os 5 sistema numMri.o Cue nKs usamos diariamente M o de.imal0 mas este sistema n>o M .onveniente !ara m?Cuinas0 !ois ali as informa=Bes t*m Cue ser .odifi.adas de modo a inter!retar os estados da .orrente #li"ado%desli"ado$3 este modo de .Kdi"o fa( .om Cue tenhamos Cue .onhe.er o .?l.ulo !osi.ional Cue nos !ermitir? eE!ressar um n<mero em CualCuer base onde !re.isarmos dele. S !ossQvel re!resentar um determinado n<mero em CualCuer base atravMs da se"uinte fKrmula,
5nde n M a !osi=>o do dQ"ito0 ini.iando da direita !ara a esCuerda e numerando de P. 7 M o dQ"ito sobre o Cual nKs o!eramos e : M a base numMri.a usada.
2.2.1.@.Convertendo n<meros bin?rios !ara de.imais Vuando trabalhamos .om a /in"ua"em +ssembly en.ontramos !or a.aso a ne.essidade de .onverter n<meros de um sistema bin?rio0 Cue M usado em .om!utadores0 !ara o sistema de.imal usado !elas !essoas. 5 sistema bin?rio M baseado em a!enas duas .ondi=Bes ou estados0 estar li"ado#1$0 ou desli"ado#P$0 !ortanto sua base M dois. )ara a .onvers>o0 !odemos usar a fKrmula de valor !osi.ional, )or eEem!lo0 se tivermos o n<mero bin?rio 1PP110 tomamos .ada dQ"ito da direita !ara a esCuerda e o multi!li.amos !ela base0 elevando N !ot*n.ia .orres!ondente N sua !osi=>o relativa, :inary, 1 1 P P 1 7e.imal, 1'2WP X 1'2W1 X P'2W2 X P'2W@ X 1'2WA Y 1 X 2 X P X P X 1& Y 19 de.imal. 5 .ara.ter W M usado em .om!uta=>o .omo sQmbolo !ara !ot*n.ia e ' !ara a multi!li.a=>o. 2.2.1.A.Convertendo n<meros de.imais !ara bin?rio 1? v?rios mMtodos !ara se .onverter n<meros de.imais !ara bin?rio3 a!enas um ser? anali(ado aCui. 8aturalmente a .onvers>o .om uma .al.uladora .ientQfi.a M muito mais f?.il0 mas nem sem!re !odemos .ontar .om isso0 lo"o o mais .onveniente M0 ao menos0 sabermos uma fKrmula !ara fa(*%la. 5 mMtodo resume%se na a!li.a=>o de divisBes su.essivas !or 20 mantendo o resto .omo o dQ"ito bin?rio e o resultado .omo o !rKEimo n<mero a ser dividido. 4omemos .omo eEem!lo o n<mero de.imal A@. A@L2Y21 e o resto M 13 21L2Y1P e o resto M 13 1PL2Y e o resto M P3 L2Y2 e o resto M 13 2L2Y1 e o resto M P3 1L2YP e o resto M 1. )ara .onstruir o eCuivalente bin?rio de A@0 vamos !e"ar os restos obtidos de baiEo !ara .ima0 assim temos 1P1P11. 2.2.1..Sistema heEade.imal 8a base heEade.imal temos 1& dQ"itos0 Cue v>o de P a 9 e da letra + atM a Z0 estas letras re!resentam os n<meros de 1P a 1. )ortanto .ontamos, P01020@0A00&0D0F090+0:0C070E0 e Z. + .onvers>o entre n<meros bin?rios e heEade.imais M f?.il. + !rimeira .oisa a fa(er M dividir o n<mero bin?rio em "ru!os de A bits0 .ome=ando da direita !ara a esCuerda. Se no "ru!o mais N direita sobrarem dQ"itos0 .om!letamos .om (eros. 4omando .omo eEem!lo o n<mero bin?rio 1P1P110 vamos dividi%lo em "ru!os de A bits, 1P31P11 )reen.hendo o <ltimo "ru!o .om (eros #o um mais N esCuerda$, PP1P31P11 + se"uir0 tomamos .ada "ru!o .omo um n<mero inde!endente e .onsideramos o seu valor de.imal, PP1PY231P11Y11 Entretanto0 observa%se Cue n>o !odemos re!resentar este n<mero .omo 2110 isto seria um erro0 uma ve( Cue os n<meros em heEa maiores Cue 9 e menores Cue 1& s>o re!resentados !elas letras +0:0...0Z. /o"o0 obtemos .omo resultado, 2:h0 onde o [h[ re!resenta a base heEade.imal. )ara a .onvers>o de um n<mero heEade.imal em bin?rio M a!enas ne.ess?rio inverter os !assos, tomamos o !rimeiro dQ"ito heEade.imal e o .onvertemos !ara bin?rio0 a se"uir o se"undo0 e assim !or diante.
%%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% 2.2.2.9Mtodos de re!resenta=>o de dados num .om!utador. 2.2.2.1.CKdi"o +SCII 2.2.2.2.9Mtodo :C7 2.2.2.@.6e!resenta=>o de !onto flutuante
2.2.2.1.CKdi"o +SCII +SCII si"nifi.a +meri.an Standard Code for Information Inter.han"e. Este .Kdi"o .ontMm as letras do alfabeto0 dQ"itos de.imais de P a 9 e al"uns sQmbolos adi.ionais .omo um n<mero bin?rio de D bits0 tendo o oitavo bit em P0 ou seja0 desli"ado. 7este modo0 .ada letra0 dQ"ito ou .ara.ter es!e.ial o.u!a 1 byte na memKria do .om!utador. )odemos observar Cue este mMtodo de re!resenta=>o de dados M muito inefi.iente no as!e.to numMri.o0 uma ve( Cue no formato bin?rio 1 byte n>o M sufi.iente !ara re!resentar n<meros de P a 20 .om o +SCII !odemos re!resentar a!enas um dQ"ito. 7evido a esta inefi.i*n.ia0 o .Kdi"o +SCII M usado0 !rin.i!almente0 !ara a re!resenta=>o de teEtos.
2.2.2.2.9Mtodo :C7 :C7 si"nifi.a :inary Coded 7e.imal. 8este mMtodo "ru!os de A bits s>o usados !ara re!resentar .ada dQ"ito de.imal de P a 9. Com este mMtodo !odemos re!resentar 2 dQ"itos !or byte de informa=>o. \emos Cue este mMtodo vem a ser muito mais !r?ti.o !ara re!resenta=>o numMri.a do Cue o .Kdi"o +SCII. Embora ainda menos !r?ti.o do Cue o bin?rio0 .om o mMtodo :C7 !odemos re!resentar dQ"itos de P a 99. Com o bin?rio0 vemos Cue o al.an.e M maior0 de P a 2. Este formato #:C7$ M !rin.i!almente usado na re!resenta=>o de n<meros "randes0 a!li.a=Bes .omer.iais0 devido Ns suas fa.ilidades de o!era=>o.
2.2.2.@.6e!resenta=>o de !onto flutuante Esta re!resenta=>o M baseada em nota=>o .ientQfi.a0 isto M0 re!resentar um n<mero em 2 !artes, sua base e seu eE!oente. )or eEem!lo o n<mero de.imal 12@APPP0 M re!resentado .omo 1.2@A'1PW&0 observamos Cue o eE!oente ir? indi.ar o n<mero de .asas Cue o !onto de.imal deve ser movido !ara a direita0 a fim de obtermos o n<mero ori"inal. 5 eE!oente ne"ativo0 !or outro lado0 indi.a o n<mero de .asas Cue o !onto de.imal deve se lo.omover !ara a esCuerda.
Conte<do, 2.@.1.)ro.esso de .ria=>o de !ro"ramas 2.@.2.6e"istradores da C)U 2.@.@.)ro"rama debu" 2.@.A.Estrutura +ssembly 2.@..Criando um !ro"rama assembly sim!les 2.@.&.+rma(enando e .arre"ando os !ro"ramas
2.@.1.)ro.esso de .ria=>o de !ro"ramas. )ara a .ria=>o de !ro"ramas s>o ne.ess?rios os se"uintes !assos, ' 7esenvolvimento do al"oritmo0 est?"io em Cue o !roblema a ser solu.ionado M estabele.ido e a melhor solu=>o M !ro!osta0 .ria=>o de dia"ramas esCuem?ti.os relativos N melhor solu=>o !ro!osta. ' Codifi.a=>o do al"oritmo0 o Cue .onsiste em es.rever o !ro"rama em al"uma lin"ua"em de !ro"rama=>o3 lin"ua"em assembly neste .aso es!e.Qfi.o0 tomando .omo base a solu=>o !ro!osta no !asso anterior. ' + transforma=>o !ara a lin"ua"em de m?Cuina0 ou seja0 a .ria=>o do !ro"rama objeto0 es.rito .omo uma seCT*n.ia de (eros e uns Cue !odem ser inter!retados !elo !ro.essador. ' 5 <ltimo est?"io M a elimina=>o de erros dete.tados no !ro"rama na fase de teste. + .orre=>o normalmente reCuer a re!eti=>o de todos os !assos0 .om observa=>o atenta.
2.@.2.6e"istradores da C)U. )ara o !ro!Ksito did?ti.o0 vamos fo.ar re"istradores de 1& bits. + C)U !ossui A re"istradores internos0 .ada um de 1& bits. S>o eles +]0 :]0 C] e 7]. S>o re"istradores de uso "eral e tambMm !odem ser usados .omo re"istradores de F bits. )ara tanto devemos referen.i?%los .omo0 !or eEem!lo0 +1 e +/0 Cue s>o0 res!e.tivamente0 o byte hi"h e o lo2 do re"istrador +]. Esta nomen.latura tambMm se a!li.a !ara os re"istradores :]0 C] e 7]. 5s re"istradores0 se"undo seus res!e.tivos nomes, +] 6e"istrador +.umulador :] 6e"istrador :ase C] 6e"istrador Contador 7] 6e"istrador de 7ados 7S 6e"istrador de Se"mento de 7ados ES 6e"istrador de Se"mento EEtra SS 6e"istrador de Se"mento de )ilha CS 6e"istrador de Se"mento de CKdi"o :) 6e"istrador +!ontador da :ase SI 6e"istrador de Gndi.e Zonte 7I 6e"istrador de Gndi.e 7estino S) 6e"istrador +!ontador de )ilha I) 6e"istrador +!ontador da )rKEima Instru=>o Z 6e"istrador de Zla"
2.@.@.)ro"rama 7ebu". )ara a .ria=>o de um !ro"rama em assembler eEistem 2 o!=Bes, usar o 4+S9 % 4urbo +ssembler da :orland0 ou o 7E:UGGE6. 8esta !rimeira se=>o vamos usar o debu"0 uma ve( Cue !odemos en.ontr?%lo em CualCuer )C .om o 9S%75S. 7ebu" !ode a!enas .riar arCuivos .om a eEtens>o .C590 e !or .ausa das .ara.terQsti.as deste ti!o de !ro"rama0 eles n>o !odem eE.eder os &A ^b0 e tambMm devem ini.iar no endere=o de memKria P1PP1 dentro do se"mento es!e.Qfi.o. S im!ortante observar isso0 !ois deste modo os !ro"ramas .C59 n>o s>o relo.?veis. 5s !rin.i!ais .omandos do !ro"rama debu" s>o, + 9ontar instru=Bes simbKli.as em .Kdi"o de m?Cuina 7 9ostrar o .onte<do de uma ?rea da memKria E Entrar dados na memKria0 ini.iando num endere=o es!e.Qfi.o G 6odar um !ro"rama eEe.ut?vel na memKria 8 7ar nome a um !ro"rama ) )ro.eder0 ou eEe.utar um .onjunto de instru=Bes rela.ionadas V Sair do !ro"rama debu" 6 9ostrar o .onte<do de um ou mais re"istradores 4 EEe.utar !asso a !asso as instru=Bes U 7esmontar o .Kdi"o de m?Cuina em instru=Bes simbKli.as W Gravar um !ro"rama em dis.o S !ossQvel visuali(ar os valores dos re"istradores internos da C)U usando o !ro"rama 7ebu". 7ebu" M um !ro"rama Cue fa( !arte do !a.ote do 75S0 e !ode ser en.ontrado normalmente no diretKrio C,_75S. )ara ini.i?%lo0 basta di"itar 7ebu" na linha de .omando, C,L`7ebu" aEnterb % \o.* notar? ent>o a !resen=a de um hQfen no .anto inferior esCuerdo da tela. 8>o se es!ante0 este M o !rom!t do !ro"rama. )ara visuali(ar o .onte<do dos re"istradores0 eE!erimente, %raEnterb +]YPPPP :]YPPPP C]YPPPP 7]YPPPP S)YZZEE :)YPPPP SIYPPPP 7IYPPPP 7SYP7&2 ESYP7&2 SSYP7&2 CSYP7&2 I)YP1PP 8\ U) EI )/ 8c 8+ )5 8C P7&2,P1PP 2E CS, P7&2,P1P1 FP@E7@7ZPP C9) :;4E )46 a7Z7@b0PP CS,7Z7@YP@ S mostrado o .onte<do de todos os re"istradores internos da C)U3 um modo alternativo !ara visuali(ar um <ni.o re"istrador M usar o .amando [r[ se"uido do !ardmetro Cue fa( refer*n.ia ao nome do re"istrador, %rbE :] PPPP , Esta instru=>o mostrar? o .onte<do do re"istrador :] e mudar? o indi.ador do 7ebu" de [%[ !ara [,[ Vuando o !rom!t assim se tornar0 si"nifi.a Cue M !ossQvel0 embora n>o obri"atKria0 a mudan=a do valor .ontido no re"istrador0 bastando di"itar o novo valor e !ressionar aEnterb. Se vo.* sim!lesmente !ressionar aEnterb o valor anti"o se mantMm. 2.@.A.Estrutura +ssembly. 8as linhas do .Kdi"o em /in"ua"em +ssembly h? duas !artes, a !rimeira M o nome da instru=>o a ser eEe.utada3 a se"unda0 os !ardmetros do .omando. )or eEem!lo, add ah bh +Cui [add[ M o .omando a ser eEe.utado0 neste .aso uma adi=>o0 e [ah[ bem .omo [bh[ s>o os !ardmetros. )or eEem!lo, mov al0 2 8o eEem!lo a.ima0 estamos usando a instru=>o mov0 Cue si"nifi.a mover o valor 2 !ara o re"istrador al. 5 nome das instru=Bes nesta lin"ua"em M .onstituQdo de 20 @ ou A letras. Estas instru=Bes s>o .hamadas mnemUni.os ou .Kdi"os de o!era=>o0 re!resentando a fun=>o Cue o !ro.essador eEe.utar?. es ve(es instru=Bes a!are.em assim, add al0a1DPb 5s .ol.hetes no se"undo !ardmetro indi.a%nos Cue vamos trabalhar .om o .onte<do da .Mlula de memKria de n<mero 1DP0 ou seja0 .om o valor .ontido no endere=o 1DP da memKria e n>o .om o valor 1DP0 isto M .onhe.ido .omo [endere=amento direto[.
2.@..Criando um !ro"rama sim!les em assembly. 8>o nos res!onsabili(aremos !ela m? eEe.u=>o ou !ossQveis danos .ausados !or CuaisCuer eEem!los Cue de a"ora em diante a!are.er>o0 uma ve( Cue os mesmos0 a!esar de testados0 s>o de .ar?ter did?ti.o. \amos0 ent>o0 .riar um !ro"rama !ara ilustrar o Cue vimos atM a"ora. +di.ionaremos dois valores, 5 !rimeiro !asso M ini.iar o 7ebu"0 o Cue j? vimos .omo fa(er anteriormente. )ara montar um !ro"rama no 7ebu"0 M usado o .omando [a[ #assemble$3 Cuando usamos este .omando0 !odemos es!e.ifi.ar um endere=o ini.ial !ara o nosso !ro"rama .omo o !ardmetro0 mas M o!.ional. 8o .aso de omiss>o0 o endere=o ini.ial M o es!e.ifi.ado !elos re"istradores CS,I)0 "eralmente P1PPh0 o lo.al em Cue !ro"ramas .om eEtens>o .C59 devem ini.iar. E ser? este o lo.al Cue usaremos0 uma ve( Cue o 7ebu" sK !ode .riar este ti!o de !ro"rama. Embora neste momento n>o seja ne.ess?rio darmos um !ardmetro ao .omando [a[0 isso M re.omend?vel !ara evitar !roblemas0 lo"o, a 1PPaenterb mov aE0PPP2aenterb mov bE0PPPAaenterb add aE0bEaenterb no!aenterbaenterb 5 Cue o !ro"rama fa(J 9ove o valor PPP2 !ara o re"istrador aE0 move o valor PPPA !ara o re"istrador bE0 adi.iona o .onte<do dos re"istradores aE e bE0 "uardando o resultado em aE e finalmente a instru=>o no! #nenhuma o!era=>o$ finali(a o !ro"rama. 8o !ro"rama debu"0 a tela se !are.er? .om, C,_`debu" %a 1PP P7&2,P1PP mov aE0PPP2 P7&2,P1P@ mov bE0PPPA P7&2,P1P& add aE0bE P7&2,P1PF no! P7&2,P1P9 Entramos .om o .omando [t[ !ara eEe.utar !asso a !asso as instru=Bes, %t +]YPPP2 :]YPPPP C]YPPPP 7]YPPPP S)YZZEE :)YPPPP SIYPPPP 7IYPPPP 7SYP7&2 ESYP7&2 SSYP7&2 CSYP7&2 I)YP1P@ 8\ U) EI )/ 8c 8+ )5 8C P7&2,P1P@ ::PAPP 95\ :]0PPPA \emos o valor PPP2 no re"istrador +]. 4e.lamos [t[ !ara eEe.utar a se"unda instru=>o, %t +]YPPP2 :]YPPPA C]YPPPP 7]YPPPP S)YZZEE :)YPPPP SIYPPPP 7IYPPPP 7SYP7&2 ESYP7&2 SSYP7&2 CSYP7&2 I)YP1P& 8\ U) EI )/ 8c 8+ )5 8C P7&2,P1P& P17F +77 +]0:] 4e.lando [t[ novamente !ara ver o resultado da instru=>o add, %t +]YPPP& :]YPPPA C]YPPPP 7]YPPPP S)YZZEE :)YPPPP SIYPPPP 7IYPPPP 7SYP7&2 ESYP7&2 SSYP7&2 CSYP7&2 I)YP1PF 8\ U) EI )/ 8c 8+ )E 8C P7&2,P1PF 9P 85) + !ossibilidade dos re"istradores .onterem valores diferentes eEiste0 mas +] e :] devem .onter os mesmos valores a.ima des.ritos. )ara sair do 7ebu" usamos o .omando [C[ #Cuit$.
2.@.&.+rma(enando e .arre"ando os !ro"ramas. 8>o seria !r?ti.o ter Cue di"itar o !ro"rama .ada ve( Cue ini.i?ssemos o 7ebu". +o invMs disso0 !odemos arma(en?%lo no dis.o. SK Cue o mais interessante nisso M Cue um sim!les .omando de salvar .ria um arCuivo .om a eEtens>o .C590 ou seja0 eEe.ut?vel % sem !re.isarmos efetuar os !ro.essos de monta"em e li"a=>o0 .omo veremos !osteriormente .om o 4+S9. Eis os !assos !ara salvar um !ro"rama Cue j? esteja na memKria, ' 5bter o tamnho do !ro"rama subtraindo o endere=o final do endere=o ini.ial0 naturalmente Cue no sistema heEade.imal. ' 7ar um nome ao !ro"rama. ' Colo.ar o tamanho do !ro"rama no re"istrador C]. ' 9andar o debu" "ravar o !ro"rama em dis.o. Usando .omo eEem!lo o se"uinte !ro"rama0 vamos .larear a idMia de .omo reali(ar os !assos a.ima des.ritos, PC1:,P1PP mov aE0PPP2 PC1:,P1P@ mov bE0PPPA PC1:,P1P& add aE0bE PC1:,P1PF int 2P PC1:,P1P+ )ara obter o tamanho de um !ro"rama0 o .omando [h[ M usado0 j? Cue ele nos mostra a adi=>o e subtra=>o de dois n<meros em heEade.imal. )ara obter o tamanho do !ro"rama em Cuest>o0 damos .omo !ardmetro o valor do endere=o final do nosso !ro"rama #1P+$0 e o endere=o ini.ial #1PP$. 5 !rimeiro resultado mostra%nos a soma dos endere=os0 o se"undo0 a subtra=>o. %h 1Pa 1PP P2Pa PPPa 5 .omando [n[ !ermite%nos nomear o !ro"rama. %n test..om 5 .omando [r.E[ !ermite%nos mudar o .onte<do do re"istrador C] !ara o valor obtido .omo tamanho do arCuivo .om o .omando [h[0 neste .aso PPPa. %r.E C] PPPP ,PPPa Zinalmente0 o .omando [2[ "rava nosso !ro"rama no dis.o0 indi.ando Cuantos bytes "ravou. %2 Writin" PPP+ bytes )ara j? salvar um arCuivo Cuando .arre"?%lo0 2 !assos s>o ne.ess?rios, 7ar o nome do arCuivo a ser .arre"ado. Carre"?%lo usando o .omando [l[ #load$. )ara obter o resultado .orreto destes !assos0 M ne.ess?rio Cue o !ro"rama a.ima j? esteja .riado. 7entro do 7ebu"0 es.revemos o se"uinte, %n test..om %l %u 1PP 1P9 PC@7,P1PP :FP2PP 95\ +]0PPP2 PC@7,P1P@ ::PAPP 95\ :]0PPPA PC@7,P1P& P17F +77 +]0:] PC@7,P1PF C72P I84 2P 5 <ltimo .omando [u[ M usado !ara verifi.ar Cue o !ro"rama foi .arre"ado na memKria. 5 Cue ele fa( M desmontar o .Kdi"o e mostr?%lo em assembly. 5s !ardmetros indi.am ao 7ebu" os endere=os ini.ial e final a serem desmontados. 5 7ebu" sem!re .arre"a os !ro"ramas na memKria no endere=o 1PPh0 .onforme j? .omentamos. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 @, )65G6+9+HI5 +SSE9:/;
Conte<do, @.1.Construindo !ro"ramas em +ssembly @.2.)ro.esso +ssembly @.@.)eCuenos !ro"ramas em +ssembly @.A.4i!os de instru=Bes %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
@.1.Construindo !ro"ramas em +ssembly. @.1.1.Soft2are ne.ess?rio @.1.2.)ro"rama=>o +ssembly
@.1.1.S5Z4W+6E 8ECESSR6I5 )ara Cue !ossamos .riar um !ro"rama0 !re.isamos de al"umas ferramentas, )rimeiro de um editor !ara .riar o !ro"rama fonte. Se"undo de um montador0 um !ro"rama Cue ir? transformar nosso fonte num !ro"rama objeto. E0 ter.eiro0 de um linOer #li"ador$ Cue ir? "erar o !ro"rama eEe.ut?vel a !artir do !ro"rama objeto. 5 editor !ode ser CualCuer um Cue dis!usermos. 5 montador ser? o 4+S9 ma.ro assembler da :orland0 e o linOer ser? o 4/I8^0 tambMm da :orland. 8Ks devemos .riar os !ro"ramas fonte .om a eEtens>o .+S9 !ara Cue o 4+S9 re.onhe=a e o transforme no !ro"rama objeto0 um [formato intermedi?rio[ do !ro"rama0 assim .hamado !orCue ainda n>o M um !ro"rama eEe.ut?vel e t>o !ou.o um !ro"rama fonte. 5 linOer "era a !artir de um !ro"rama .5:J0 ou da .ombina=>o de v?rios deles0 um !ro"rama eEe.ut?vel0 .uja eEtens>o M normalmente .E]E0 embora !ossa ser .C59 de!endendo da forma .omo for montado e li"ado.
@.1.2.)65G6+9+HI5 +SSE9:/; )ara .onstruirmos os !ro"ramas .om o 4+S90 devemos estruturar o fonte de forma diferen.iada ao Cue fa(Qamos .om o !ro"rama debu". S im!ortante in.luir as se"uintes diretivas assembly, .957E/ S9+// 7efine o melo de memKria a usar em nosso !ro"rama .C57E 7efine as instru=Bes do !ro"rama0 rela.ionado ao se"mento de .Kdi"o .S4+C^ 6eserva es!a=o de memKria !ara as instru=Bes de !ro"rama na !ilha E87 Zinali(a um !ro"rama assembly \amos !ro"ramar )rimeiro !asso Use CualCuer editor !ara .riar o !ro"rama fonte. Entre .om as se"uintes linhas, )rimeiro eEem!lo 3 use 3 !ara fa(er .oment?rios em !ro"ramas assembly .957E/ S9+// 3modelo de memKria .S4+C^ 3es!a=o de memKria !ara instru=Bes do !ro"rama na !ilha .C57E 3as linhas se"uintes s>o instru=Bes do !ro"rama mov ah0P1h 3move o valor P1h !ara o re"istrador ah mov .E0PDh 3move o valor PDh !ara o re"istrador .E int 1Ph 3interru!=>o 1Ph mov ah0A.h 3move o valor A.h !ara o re"istrador ah int 21h 3interru!=>o 21h E87 3finali(a o .Kdi"o do !ro"rama Este !ro"rama assembly muda o tamanho do .ursor. Se"undo !asso Salvar o arCuivo .om o se"uinte nome, eEam1.asm 8>o esCue.er de salv?%lo no formato +SCII. 4er.eiro !asso Usar o !ro"rama 4+S9 !ara .onstruir o !ro"rama objeto. EEem!lo, C,_`tasm eEam1.asm 4urbo +ssembler \ersion 2.P Co!yri"ht #.$ 19FF0 199P :orland International +ssemblin" file, eEam1.asm Error messa"es, 8one Warnin" messa"es, 8one )asses, 1 6emainin" memory, AD1O 5 4+S9 sK !ode .riar !ro"ramas no formato .5:J0 Cue ainda n>o !ode ser eEe.utado... Vuarto !asso Usar o !ro"rama 4/I8^ !ara .riar o !ro"rama eEe.ut?vel. EEem!lo, C,_`tlinO eEam1.obj 4urbo /inO \ersion @.P Co!yri"ht #.$ 19FD0 199P :orland International C,_` 5nde eEam1.obj M o nome do !ro"rama intermedi?rio0 .5:J. 5 .omando a.ima "era diretamente o arCuivo .om o nome do !ro"rama intermedi?rio e a eEtens>o .E]E. S o!.ional a .olo.a=>o da eEtens>o .obj no .omando. Vuinto !asso EEe.utar o !ro"rama eEe.ut?vel .riado. C,_`eEam1aenterb /embre%se0 este !ro"rama assembly muda o tamanho do .ursor no 75S. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
@.2.)ro.esso +ssembly. @.2.1.Se"mentos @.2.2.4abela de eCuival*n.ia
@.2.1.SEG9E845S + arCuitetura dos !ro.essadores EF& for=a%nos a usar se"mentos de memKria !ara "eren.iar a informa=>o0 o tamanho destes se"mentos M de &A^b. + ra(>o de ser destes se"mentos M Cue0 .onsiderando Cue o tamanho m?Eimo de um n<mero Cue o !ro.essador !ode "eren.iar M dado !or uma !alavra de 1& bits ou re"istrador0 assim n>o seria !ossQvel a.essar mais do Cue &@& lo.ais da memKria usando a!enas um destes re"istradores. 9as a"ora0 se a memKria do )C M dividida em "ru!os de se"mentos0 .ada um .om &@& lo.ais0 e !odemos usar um endere=o ou re"istrador eE.lusivo !ara en.ontrar .ada se"mento0 e ainda fa(emos .ada endere=o de um es!e.Qfi.o slot .om dois re"istradores0 nos M !ossQvel a.essar a Cuantidade de A29A9&D29& bytes de memKria0 Cue M0 atualmente0 a maior memKria Cue !odemos instalar num )C. 7esta forma0 !ara Cue o montador seja .a!a( de "eren.iar os dados0 se fa( ne.ess?rio Cue .ada informa=>o ou instru=>o se en.ontre na ?rea .orres!ondente ao seu se"mento. 5 endere=o do se"mento M forne.ido ao montador !elos re"istradores 7S0 ES0 SS e CS. /embrando um !ro"rama no 7ebu"0 observe, 1C:P,P1P2 95\ +]0:] 5 !rimeiro n<mero 1C:P0 .orres!onde ao se"mento de memKria Cue est? sendo usado0 o se"undo M uma refer*n.ia ao endere=o dentro do se"mento0 M um deslo.amento dentro do se"mento offset. 5 modo usado !ara indi.ar ao montador .om Cuais se"mentos vamos trabalhar M fa(endo uso das diretivas .C57E0 .7+4+ e .S4+C^. 5 montador ajusta o tamanho dos se"mentos tomando .omo base o n<mero de bytes Cue .ada instru=>o assembly !re.isa0 j? Cue seria um des!erdQ.io de memKria usar se"mentos inteiros. )or eEem!lo0 se um !ro"rama !re.isa de a!enas 1P^b !ara arma(enar dados0 o se"mento de dados seria a!enas de 1P^b e n>o de &A^b0 .omo !oderia a.onte.er se feito manualmente.
@.2.2.4+:E/+S 7E EVUI\+/f8CI+ Cada uma das !artes numa linha de .Kdi"o assembly M .onhe.ida .omo toOen0 !or eEem!lo, 95\ +]0\ar +Cui temos tr*s toOens0 a instru=>o 95\0 o o!erador +] e o o!erador \+6. 5 Cue o montador fa( !ara "erar o .Kdi"o 5:J M ler .ada um dos toOens e !ro.urar a eCuival*n.ia em .Kdi"o de m?Cuina em tabelas .orres!ondentes0 seja de !alavras reservadas0 tabela de .Kdi"os de o!era=>o0 tabela de sQmbolos0 tabela de literais0 onde o si"nifi.ado dos mnemUni.os e os endere=os dos sQmbolos Cue usamos ser>o en.ontrados. + maioria dos montadores s>o de duas !assa"ens. Em sQntese na !rimeira !assa"em temos a defini=>o dos sQmbolos0 ou seja0 s>o asso.iados endere=os a todas as instru=Bes do !ro"rama. Se"uindo este !ro.esso0 o assembler l* 95\ e !ro.ura%o na tabela de .Kdi"os de o!era=>o !ara en.ontrar seu eCuivalente na lin"ua"em de m?Cuina. 7a mesma forma ele l* +] e en.ontra%o na tabela .orres!ondente .omo sendo um re"istrador. 5 !ro.esso !ara \ar M um !ou.o diferen.iado0 o montador verifi.a Cue ela n>o M uma !alavra reservada0 ent>o !ro.ura na tabela de sQmbolos0 l? en.ontrando%a ele desi"na o endere=o .orres!ondente0 mas se n>o en.ontrou ele a insere na tabela !ara Cue ela !ossa re.eber um endere=o na se"unda !assa"em. +inda na !rimeira !assa"em M eEe.utado !arte do !ro.essamento das diretivas0 M im!ortante notar Cue as diretivas n>o .riam .Kdi"o objeto. 8a !assa"em dois s>o montadas as instru=Bes0 tradu(indo os .Kdi"os de o!era=>o e !ro.urando os endere=os0 e M "erado o .Kdi"o objeto. 1? sQmbolos Cue o montador n>o .onse"ue en.ontrar0 uma ve( Cue !odem ser de.lara=Bes eEternas. 8este .aso o linOer entra em a=>o !ara .riar a estrutura ne.ess?ria a fim de li"ar as diversas !ossQveis !artes de .Kdi"o0 di(endo ao loader Cue o se"mento e o toOen em Cuest>o s>o definidos Cuando o !ro"rama M .arre"ado e antes de ser eEe.utado. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
@.@.9ais !ro"ramas. 5utro eEem!lo )rimeiro !asso Use CualCuer editor e .rie o se"uinte, 3eEem!lo2 .model small .sta.O ..ode mov ah02h 3move o valor 2h !ara o re"istrador ah mov dl02ah 3move o valor 2ah !ara o re"istrador dl 3#M o valor +SCII do .ara.tere '$ int 21h 3interru!=>o 21h mov ah0A.h 3fun=>o A.h0 sai !ara o sistema o!era.ional int 21h 3interru!=>o 21h end 3finali(a o !ro"rama Se"undo !asso Salvar o arCuivo .om o nome, eEam2.asm 8>o esCue.er de salvar em formato +SCII. 4er.eiro !asso Usar o !ro"rama 4+S9 !ara .onstruir o !ro"rama objeto. C,_`tasm eEam2.asm 4urbo +ssembler \ersion 2.P Co!yri"ht #.$ 19FF0 199P :orland International +ssemblin" file, eEam2.asm Error messa"es, 8one Warnin" messa"es, 8one )asses, 1 6emainin" memory, AD1O Vuarto !asso Usar o !ro"rama 4/I8^ !ara .riar o !ro"rama eEe.ut?vel. C,_`tlinO eEam2.obj 4urbo /inO \ersion @.P Co!yri"ht #.$ 19FD0 199P :orland International C,_` Vuinto !asso EEe.utar o !ro"rama, C,_`eEam2aenterb ' C,_` Este !ro"rama im!rime o .ara.ter ' na tela. CliCue aCui !ara obter mais !ro"ramas %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
@.A.4i!os de instru=Bes. @.A.1.9ovimento de dados @.A.2.5!era=Bes lK"i.as e aritmMti.as @.A.@.Saltos0 la=os e !ro.edimentos
@.A.1.95\I9E845 7E 7+75S Em CualCuer !ro"rama h? ne.essidade de se mover dados na memKria e em re"istradores da C)U3 h? v?rios modos de se fa(*%lo, !ode%se .o!iar os dados da memKria !ara al"um re"istrador0 de re"istrador !ara re"istrador0 de um re"istrador !ara a !ilha0 da !ilha !ara um re"istrador0 transmitir dados !ara um dis!ositivo eEterno e vi.e%versa. Este movimento de dados M sujeito a re"ras e restri=Bes0 entre elas, '8>o M !ossQvel mover dados de um lo.al da memKria !ara outro diretamente3 M ne.ess?rio !rimeiro mover o dado do lo.al de ori"em !ara um re"istrador e ent>o do re"istrador !ara o lo.al de destino. '8>o M !ossQvel mover uma .onstante diretamente !ara um re"istrador de se"mento3 !rimeiro deve%se mover !ara um re"istrador. S !ossQvel mover blo.os de dados atravMs de instru=Bes movs0 Cue .o!ia uma .adeia de bytes ou !alavras3 movsb .o!ia n bytes de um lo.al !ara outro3 e movs2 .o!ia n !alavras. + <ltima das duas instru=Bes toma os valores dos endere=os definidos !or 7S,SI .omo o "ru!o de dados a mover e ES,7I .omo a nova lo.ali(a=>o dos dados. )ara mover dados h? tambMm estruturas .hamadas !ilhas0 onde o dado M introdu(ido .om a instru=>o !ush e M eEtraQdo .om a instru=>o !o! 8uma !ilha o !rimeiro dado a entrar M o <ltimo a sair0 !or eEem!lo, )US1 +] )US1 :] )US1 C] )ara retornar os valores da !ilha referentes N .ada re"istrador M ne.ess?rio se"uir%se a ordem, )5) C] )5) :] )5) +] )ara a .omuni.a=>o .om dis!ositivos eEternos o .omando de saQda M usado !ara o envio de informa=Bes a uma !orta e o .omando de entrada M usado !ara re.eber informa=>o de uma !orta. + sintaEe do .omando de saQda, 5U4 7]0+] 5nde 7] .ontMm o valor da !orta Cue ser? usada !ara a .omuni.a=>o e +] .ontMm a informa=>o Cue ser? enviada. + sintaEe do .omando de entrada, I8 +]07] 5nde +] M o re"istrador onde a informa=>o ser? arma(enada e 7] .ontMm o endere=o da !orta de onde .he"ar? a informa=>o.
@.A.2.5)E6+HgES /hGIC+S E +6I49S4IC+S +s instru=Bes de o!era=Bes lK"i.as s>o, and0 not0 or e Eor. Elas trabalham a nQvel de bits em seus o!eradores. )ara verifi.ar o resultado das o!era=Bes usamos as instru=Bes .m! e test. +s instru=Bes usadas !ara o!era=Bes al"Mbri.as s>o, !ara adi=>o add0 !ara subtra=>o sub0 !ara multi!li.a=>o mul e !ara divis>o div. Vuase todas as instru=Bes de .om!ara=>o s>o baseadas na informa=>o .ontida no re"istrador de fla". 8ormalmente os fla"s do re"istrador Cue !odem ser manuseados diretamente !elo !ro"ramador s>o os da dire=>o de dados 7Z0 usado !ara definir as o!era=Bes sobre .adeias. Uma outro Cue !ode tambMm ser manuseado M o fla" IZ atravMs das instru=Bes sti e .li0 !ara ativar e desativar as interru!=Bes.
@.A.@.S+/45S0 /55)S E )65CE7I9E845S Saltos in.ondi.ionais na es.rita de !ro"ramas em lin"ua"em assembly s>o dados !ela instru=>o jm!3 um salto M usado !ara modifi.ar a seCT*n.ia da eEe.u=>o das instru=Bes de um !ro"rama0 enviando o .ontrole ao endere=o indi.ado0 ou seja0 o re"istrador .ontador de !ro"rama re.ebe este novo endere=o. Um loo!0 tambMm .onhe.ido .omo intera=>o0 M a re!eti=>o de um !ro.esso um .erto n<mero de ve(es atM atin"ir a .ondi=>o de !arada. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 A, I8S46UHgES +SSE9:/; Conte<do, A.1.Instru=Bes de o!era=>o de dados A.2.Instru=Bes lK"i.as e aritmMti.as A.@.Instru=Bes de .ontrole de !ro.essos %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
A.1. Instru=Bes de o!era=>o de dados Conte<do, A.1.1.Instru=Bes de transfer*n.ia A.1.2.Instru=Bes de .ar"a A.1.@.Instru=Bes de !ilha
A.1.1.Instru=Bes de transfer*n.ia. S>o usadas !ara mover o .onte<do dos o!eradores. Cada instru=>o !ode ser usada .om diferentes modos de endere=amento. 95\ 95\S #95\S:$ #95\SW$
I8S46UHI5 95\ )ro!Ksito, 4ransfer*n.ia de dados entre .Mlulas de memKria0 re"istradores e o a.umulador. SintaEe, 95\ 7estino0Zonte 7estino M o lu"ar !ara onde o dado ser? movido e Zonte M o lu"ar onde o dado est?. 5s diferentes movimentos de dados !ermitidos !ara esta instru=>o s>o, '7estino, memKria. Zonte, a.umulador '7estino, a.umulador. Zonte, memKria '7estino, re"istrador de se"mento. Zonte, memKriaLre"istrador '7estino, memKriaLre"itrador. Zonte, re"istrador de se"mento '7estino, re"istrador. Zonte, re"istrador '7estino, re"istrador. Zonte, memKria '7estino, memKria. Zonte, re"istrador '7estino, re"istrador. Zonte, dado imediato '7estino, memKria. Zonte, dado imediato EEem!lo, 95\ +]0PPP&h 95\ :]0+] 95\ +]0ACPPh I84 21h Este !eCueno !ro"rama move o valor PPP&h !ara o re"istrador +]0 ent>o ele move o .onte<do de +] #PPP&h$ !ara o re"istrador :]0 e finalmente move o valor ACPPh !ara o re"istrador +] !ara terminar a eEe.u=>o .om a o!=>o AC da interru!=>o 21h.
I8S46UHgES 95\S #95\S:$ #95\SW$ )ro!Ksito, 9over byte ou .adeias de !alavra da fonte0 endere=ada !or SI0 !ara o destino endere=ado !or 7I. SintaEe, 95\S Este .omando n>o ne.essita de !ardmetros uma ve( Cue toma .omo endere=o fonte o .onte<do do re"istrador SI e .omo destino o .onte<do de 7I. + se"uinte seCT*n.ia de instru=Bes ilustra isso, 95\ SI0 5ZZSE4 \+61 95\ 7I0 5ZZSE4 \+62 95\S )rimeiro ini.iali(amos os valores de SI e 7I .om os endere=os das vari?veis \+61 e \+62 res!e.tivamente0 ent>o a!Ks a eEe.u=>o de 95\S o .onte<do de \+61 M .o!iado !ara \+62. +s instru=Bes 95\S: e 95\SW s>o usadas do mesmo modo Cue 95\S0 a !rimeira move um byte e a se"unda move uma !alavra.
Instru=Bes de .ar"a. S>o instru=Bes es!e.Qfi.as !ara re"istradores0 usadas !ara .arre"ar bytes ou .adeias de bytes num re"istrador. /57S #/57S:$ #/57SW$ /+1Z /7S /E+ /ES
I8S46UHgES /57S #/57S:$ #/57SW$ )ro!Ksito, Carre"ar .adeias de um byte ou uma !alavra !ara o a.umulador. SintaEe, /57S Esta instru=>o toma a .adeia en.ontrada no endere=o es!e.ifi.ado !or SI0 a .arre"a !ara o re"istrador +/ #ou +]$ e adi.iona ou subtrai0 de!endendo do estado de 7Z0 !ara SI se M uma transfer*n.ia de bytes ou de !alavras. 95\ SI0 5ZZSE4 \+61 /57S 8a !rimeira linha vemos a .ar"a do endere=o de \+61 em SI e na se"unda M tomado o .onte<do daCuele lo.al !ara o re"iustrador +/. 5s .omandos /57S: e /57SW s>o usados do mesmo modo0 o !rimeiro .arre"a um byte e o se"undo uma !alavra #usa todo o re"istrador +]$.
I8S46UHI5 /+1Z )ro!Ksito, 4ransferir o .onte<do dos fla"s !ara o re"istrador +1. SintaEe, /+1Z Esta instru=>o M <til !ara verifi.ar o estado dos fla"s durante a eEe.u=>o do nosso !ro"rama. 5s fla"s s>o deiEados na se"uinte ordem dentro do re"istrador, SZ cZ JJ +Z JJ )Z JJ CZ 5 [JJ[ si"nifi.a Cue haver? um valor indefinido naCueles bits.
I8S46UHI5 /7S )ro!Ksito, Carre"ar o re"istrador de se"mento de dados. SintaEe, /7S destino0fonte 5 o!erador fonte deve ser uma double 2ord na memKria. + !alavra asso.iada .om o maior endere=o M transferida !ara 7S0 em outras !alavras isto M tomado .omo o endere=o de se"mento. + !alavra asso.iada .om o menor endere=o M o endere=o de deslo.amento e M de!ositada no re"istrador indi.ado .omo destino.
I8S46UHI5 /E+ )ro!Ksito, Carre"ar o endere=o do o!erador fonte. SintaEe, /E+ destino0fonte 5 o!erador fonte deve estar lo.ali(ado na memKria0 e seu deslo.amento M .olo.ado no re"istrador de Qndi.e ou !onteiro es!e.ifi.ado no destino. )ara ilustrar uma das fa.ilidades Cue temos .om este .omando0 vejamos, 95\ SI05ZZSE4 \+61 S eCuivalente a, /E+ SI0\+61 S muito !rov?vel Cue !ara o !ro"ramador M muito mais f?.il .riar !ro"ramas "randes usando este <ltimo formato.
I8S46UHI5 /ES )ro!Ksito, Carre"ar o re"istrador de se"mento eEtra SintaEe, /ES destino0fonte 5 o!erador fonte deve ser uma !alavra du!la na memKria. 5 .onte<do da !alavra .om endere=o maior M inter!retado .omo o endere=o do se"mento e M .olo.ado em ES. + !alavra .om endere=o menor M o endere=o do deslo.amento e M .olo.ada no re"istrador es!e.ifi.ado no !ardmetro de destino.
Instru=Bes de mani!ula=>o da !ilha. Estas instru=Bes !ermitem usar a !ilha !ara arma(enar ou re.u!erar dados. )5) )5)Z )US1 )US1Z
I8S46UHI5 )5) )ro!Ksito, 6e.u!erar uma !arte de informa=>o da !ilha. SintaEe, )5) destino Esta instru=>o transfere o <ltimo valor arma(enado na !ilha !ara o o!erador de destino0 e in.rementa de 2 o re"istrador S). Este in.remento M du!lo !elo fato de Cue a !ilha do mais alto endere=o de memKria !ara o mais baiEo0 e a !ilha trabalha a!enas .om !alavras0 2 bytes0 lo"o deve ser 2 o in.remento de S)0 na realidade 2 est? sendo subtraQdo do tamanho real da !ilha.
I8S46UHI5 )5)Z )ro!Ksito, EEtrair os fla"s arma(enados na !ilha. SintaEe, )5)Z Este .omando transfere os bits da !alavra arma(enada na !arte mais alta da !ilha !ara re"istrador de fla". 5 modo da transfer*n.ia M .omo se se"ue, :I4 Z/+G P CZ 2 )Z A +Z & cZ D SZ F 4Z 9 IZ 1P 7Z 11 5Z 5s lo.ais dos bits s>o os mesmos !ara o uso da instru=>o )US1Z. Uma ve( feita a transfer*n.ia o re"istrador S) M in.rementado de 20 .onforme vimos anteriormente.
I8S46UHI5 )US1 )ro!Ksito, Colo.a uma !alavra na !ilha. SintaEe, )US1 fonte + instru=>o )US1 de.rementa de dois o valor de S) e ent>o transfere o .onte<do do o!erador fonte !ara o novo endere=o desultante no re"istrador re.Mm modifi.ado. 5 de.remento no endere=o M du!lo !elo fato de Cue Cuando os valores s>o adi.ionados N !ilha0 Cue .res.e do maior !ara o menor endere=o0 lo"o Cuando subraQmos de 2 o re"istrador S) o Cue fa(emos M in.rementar o tamanho da !ilha em dois bytes0 Cue M a <ni.a Cuantidade de informa=>o Cue a !ilha !ode manusear em .ada entrada e saQda.
I8S46UHI5 )US1Z )ro!Ksito, Colo.ar os valores dos fla"s na !ilha. SintaEe, )US1Z Este .omando de.rementa de 2 o valor do re"istrador S) e ent>o o .onte<do do re"istrador de fla" M transferido !ara a !ilha0 no endere=o indi.ado !or S). 5s fla"s s>o arma(enados na memKria da mesma forma Cue o .omando )5)Z. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
A.2. Instru=Bes lK"i.as e aritmMti.as Conte<do, A.2.1.Instru=Bes lK"i.as A.2.2.Instru=Bes aritmMti.as
I8S46UHI5 +87 )ro!Ksito, 6eali(a a .onjun=>o de o!eradores bit a bit. SintaEe, +87 destino0fonte Com esta instru=>o a o!era=>o lK"i.a [y[ !ara ambos os o!eradores M usada .omo na tabela, Zonte 7estino i 7estino %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1 1 i 1 1 P i P P 1 i P P P i P 5 resultado desta o!era=>o M arma(enado no o!erador de destino.
I8S46UHI5 8EG )ro!Ksito, Gera o .om!lemento de 2. SintaEe, 8EG destino Esta instru=>o "era o .om!lemento de 2 do o!erador destino e o arma(ena no mesmo o!erador. )or eEem!lo0 if +] arma(ena o valor 12@A10 ent>o, 8EG +] Isto far? .om o Cue o valor E7CC1 fCue arma(enado no re"istrador +].
I8S46UHI5 854 )ro!Ksito, Za( a ne"a=>o do o!erador de destino bit a bit. SintaEe, 854 destino 5 resultado M arma(enado no mesmo o!erador de destino.
I8S46UHI5 56 )ro!Ksito, 6eali(a um 5U lK"i.o. SintaEe, 56 destino0fonte + instru=>o 560 fa( uma disjun=>o lK"i.a bit a bit dos dois o!eradores, Zonte 7estino i 7estino %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1 1 i 1 1 P i 1 P 1 i 1 P P i P
I8S46UHI5 4ES4 )ro!Ksito, Com!ara lo"i.amente os o!eradores. SintaEe, 4ES4 destino0fonte 6eali(a uma .onjun=>o0 bit a bit0 dos o!eradores0 mas difere da instru=>o +870 uma ve( Cue n>o .olo.a o resultado no o!erador de destino. 4em efeito sobre o re"istrador de fla".
I8S46UHI5 ]56 )ro!Ksito, 6eali(a um 5U eE.lusivo. SintaEe, ]56 destino0fonte Esta instru=>o reali(Ea uma disjun=>o eE.lusiva de dois o!eradores bit a bit. Zonte 7estino i 7estino %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1 1 i P P P i 1 P 1 i 1 P P i P
A.2.2.Instru=Bes aritmMti.as. S>o usadas !ara reali(ar o!era=Bes aritmMti.as nos o!eradores. +7C +77 7I\ I7I\ 9U/ I9U/ S:: SU:
I8S46UHI5 +7C )ro!Ksito, Efetuar a soma entre dois o!erandos .om .arry. SintaEe, +7C destino0fonte Esta instru=>o efetua a soma entre dois o!erandos0 mais o valor do fla" CZ0 eEistente antes da o!era=>o. +!enas o o!erando destino e os fla"s s>o afetados. 5 resultado M arma(enado no o!erador de destino.
I8S46UHI5 +77 )ro!Ksito, +di=>o de dois o!eradores. SintaEe, +77 destino0fonte Esta instru=>o adi.iona dois o!eradores e arma(ena o resultado no o!erador destino.
I8S46UHI5 7I\ )ro!Ksito, 7ivis>o sem sinal. SintaEe, 7I\ fonte 5 divisor !ode ser um byte ou uma !alavra e M o o!erador Cue M dado na instru=>o. Se o divisor M de F bits0 o re"istrador +] de 1& bits M tomado .omo dividendo e se o divisor M de 1& bits0 o !ar de re"istradores 7],+] ser? tomado .omo dividendo0 tomando a !alavra alta de 7] e a baiEa de +]. Se o divisor for um byte0 ent>o o Cuo.iente ser? arma(enado no re"istrador +/ e o resto em +1. Se for uma !alavra0 ent>o o Cuo.iente M arma(enado em +] e o resto em 7].
I8S46UHI5 I7I\ )ro!Ksito, 7ivis>o .om sinal. SintaEe, I7I\ fonte Consiste basi.amente .omo a instru=>o 7I\0 diferen.ia%se a!enas !or reali(ar a o!era=>o .om sinal. )ara os resultados s>o usados os mesmos re"istradores da instru=>o 7I\.
I8S46UHI5 9U/ )ro!Ksito, 9ulti!li.a=>o .om sinal. SintaEe, 9U/ fonte Esta instru=>o reali(a uma multi!li.a=>o n>o sinali(ada entre o .onte<do do a.umulador +/ ou +] !elo o!erando%fonte0 devolvendo o resultado no a.umulador +] .aso a o!era=>o tenha envolvido +/ .om um o!erando de F bits0 ou em 7] e +] .aso a o!era=>o tenha envolvido +] e um o!erando de 1& bits.
I8S46UHI5 I9U/ )ro!Ksito, 9ulti!li.=>o de dois n<meros inteiros .om sinal. SintaEe, I9U/ fonte Esta instru=>o fa( o mesmo Cue a anterior0 difere a!enas !ela in.lus>o do sinal. 5s resultados s>o mantidos nos mesmos re"istradores usados !ela instru=>o 9U/.
I8S46UHI5 S:: )ro!Ksito, Subtra=>o .om .arry. SintaEe, S:: destino0fonte Esta instru=>o subtrai os o!eradores e subtrai um do resultado se CZ est? ativado. 5 o!erador fonte M sem!re subtraQdo do destino. Este ti!o de subtra=>o M usado Cuando se trabalha .om Cuantidades de @2 bits.
I8S46UHI5 SU: )ro!Ksito, Subtra=>o. SintaEe, SU: destino0fonte Esta instru=>o subtrai o o!erador fonte do destino.
%%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% A.@.Instru=Bes de .ontrole de !ro.essos
Conte<do, A.@.1.Instru=Bes de salto A.@.2.Instru=Bes de la=os, loo! A.@.@.Instru=Bes de .onta"em A.@.A.Instru=Bes de .om!ara=>o A.@..Instru=Bes de fla"
A.@.1.Instru=Bes de salto. Usadas !ara transferir o !ro.esso de eEe.u=>o do !ro"rama !ara o o!erador indi.ado. J9) J+ #J8:E$ J+E #J8:E$ J: #J8+E$ J:E #J8+$ JE #Jc$ J8E #J8c$ JG #J8/E$ JGE #J8/$ J/ #J8GE$ J/E #J8G$ JC J8C J85 J8) #J)5$ J8S J5 J) #J)E$ JS
I8S46UHI5 J9) )ro!Ksito, Salto in.ondi.ional. SintaEe, J9) destino Esta instru=>o M usada !ar adesviar o .urso do !ro"rama sem tomar em .onta as .ondi=Bes atuais dos fla"s ou dos dados.
I8S46UHI5 J+ #J8:E$ )ro!Ksito, Salto .ondi.ional. SintaEe, J+ sQmbolo +!Ks uma .om!ara=>o este .omando salta se n>o M i"ual. Isto Cuer di(er Cue o salto sK M feito se o fla" CZ ou o fla" cZ est>o desativados0 ou seja0 se um dos dois for (ero.
I8S46UHI5 J+E #J8:$ )ro!Ksito, Salto .ondi.ional. SintaEe, J+E sQmbolo + instru=>o salta se est? u!0 se est? eCual ou se est? not do2n. 5 salto M feito se CZ est? desativado.
I8S46UHI5 J: #J8+E$ )ro!Ksito, Salto .ondi.ional. SintaEe, J: sQmbolo + instru=>o salta se est? do2n0 se est? not u! ou se est? eCual. 5 salto M feito se CZ est? ativado.
I8S46UHI5 J:E #J8+$ )ro!Ksito, Salto .ondi.ional. SintaEe, J:E sQmbolo + instru=>o salta se est? do2n0 se est? eCual ou se est? not u!. 5 salto M feito se CZ ou cZ est>o ativados0 ou seja0 se um deles for 1.
I8S46UHI5 JE #Jc$ )ro!Ksito, Salto .ondi.ional. SintaEe, JE sQmbolo + instru=>o salta se est? eCual ou se est? (ero. 5 salto M feito se cZ est? ativado.
I8S46UHI5 J8E #J8c$ )ro!Ksito, Salto .ondi.ional. SintaEe, J8E sQmbolo + instru=>o salta se est? not eCual ou se est? (ero. 5 salto M feito se cZ est? desativado.
I8S46UHI5 JG #J8/E$ )ro!Ksito, Salto .ondi.ional0 e o sinal M tomado. SintaEe, JG sQmbolo + instru=>o salta se est? lar"er0 se est? not lar"er ou se est? eCual. 5 salto o.orre se cZ Y P ou se 5Z Y SZ.
I8S46UHI5 JGE #J8/$ )ro!Ksito, Salto .ondi.ional0 e o sinal M tomado. SintaEe, JGE sQmbolo + instru=>o salta se est? lar"er0 se est? less than ou se est? eCual. 5 salto M feito se SZ Y 5Z.
I8S46UHI5 J/ #J8GE$ )ro!Ksito, Salto .ondi.ional0 e o sinal M tomado. SintaEe, J/ sQmbolo + instru=>o salta se est? less than0 se est? not lar"er than ou se est? eCual. 5 salto M feito se SZ M diferente de 5Z.
I8S46UHI5 J/E #J8G$ )ro!Ksito, Salto .ondi.ional0 e o sinal M tomado. SintaEe, J/E sQmbolo + instru=>o salta se est? less than0 se est? eCual ou se est? not lar"er. 5 salto M feito se cZ Y 1 ou se SZ M diferente de 5Z.
I8S46UHI5 JC )ro!Ksito, Salto .ondi.ional0 e os fla"s s>o tomados. SintaEe, JC sQmbolo + instru=>o salta se h? .arry. 5 salto M feito se CZ Y 1.
I8S46UHI5 J8C )ro!Ksito, Salto .ondi.ional0 e o estado dos fla"s M tomado. SintaEe, J8C sQmbolo + instru=>o salta se n>o h? .arry. 5 salto M feito se CZ Y P.
I8S46UHI5 J85 )ro!Ksito, Salto .ondi.ional0 e o estado dos fla"s M tomado. SintaEe, J85 sQmbolo + instru=>o salta se n>o h? overflo2 5 salto M feito se 5Z Y P.
I8S46UHI5 J8) #J)5$ )ro!Ksito, Salto .ondi.ional0 e o estado dos fla"s M tomado. SintaEe, J8) sQmbolo + instru=>o salta se n>o h? !aridade ou se a !aridade M Qm!ar. 5 salto M feito se )Z Y P.
I8S46UHI5 J8S )ro!Ksito, Salto .ondi.ional0 e o estado dos fla"s M tomado. SintaEe, J8) sQmbolo + instru=>o salta se o sinal est? desativado. 5 salto M feito se SZ Y P.
I8S46UHI5 J5 )ro!Ksito, Salto .ondi.ional0 e o estado dos fla"s M tomado. SintaEe, J5 sQmbolo + instru=>o salta se h? overflo2. 5 salto M feito se 5Z Y 1.
I8S46UHI5 J) #J)E$ )ro!Ksito, Salto .ondi.ional0 e o estado dos fla"s M tomado. SintaEe, J) sQmbolo + instru=>o salta se h? !aridade ou se a !aridade M !ar. 5 salto M feito se )Z Y 1.
I8S46UHI5 JS )ro!Ksito, Salto .ondi.ional0 e o estado dos fla"s M tomado. SintaEe, JS sQmbolo + instru=>o salta se o sinal est? ativado. 5 salto M feito se SZ Y1. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
A.@.2.Instru=Bes !ara la=os, /55). Estas instru=Bes transferem a eEe.u=>o do !ro.esso0 .ondi.ional ou in.ondi.ionalmente0 !ara um destino0 re!etindo a a=>o atM o .ontador ser (ero. /55) /55)E /55)8E
I8S46UHI5 /55) )ro!Ksito, Gerar um la=o no !ro"rama. SintaEe, /55) sQmbolo + instru=>o /55) de.rementa C] de 1 e transfere a eEe.u=>o do !ro"rama !ara o sQmbolo Cue M dado .omo o!erador0 .aso C] ainda n>o seja 1.
I8S46UHI5 /55)E )ro!Ksito, Gerar um la=o no !ro"rama0 .onsiderando o estado de cZ. SintaEe, /55)E sQmbolo Esta instru=>o de.rementa C] de 1. Se C] M diferente de (ero e cZ M i"ual a 10 ent>o a eEe.u=>o do !ro"rama M transferida !ara o sQmbolo indi.ado .omo o!erador.
I8S46UHI5 /55)8E )ro!Ksito, Gerar um la=o no !ro"rama0 .onsiderando o estado de cZ. SintaEe, /55)8E sQmbolo Esta instru=>o de.rementa C] de 1 e transfere a eEe.u=>o do !ro"rama a!enas se cZ M diferente de P.
%%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% A.@.@.Instru=Bes .ontadoras. Estas instru=Bes s>o usadas !ara de.rementar ou in.rementar o .onte<do de .ontadores. 7EC I8C
7EC I8S46UC4I58 )ro!Ksito, 7e.rementar o o!erador. SintaEe, 7EC destino Esta instru=>o subtrai 1 do o!erador destino e arma(ena o novo valor no mesmo o!erador.
I8S46UHI5 I8C )ro!Ksito, In.rementar o o!erador. SintaEe, I8C destino Esta instru=>o adi.iona 1 ao o!erador destino e mantMm o resultado no mesmo o!erador. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
A.@.A.Instru=Bes de .om!ara=>o. Estas instru=Bes s>o usadas !ara .om!arar os o!eradores0 e elas afetam o .onte<do dos fla"s. C9) C9)S #C9)S:$ #C9)SW$
I8S46UHI5 C9) )ro!Ksito, Com!arar os o!eradores. SintaEe, C9) destino0fonte Esta instru=>o subtrai o o!erador fonte do destino0 mas n>o arma(ena o resultado da o!era=>o0 a!enas afeta o estado dos fla"s.
I8S46UHI5 C9)S #C9)S:$ #C9)SW$ )ro!Ksito, Com!arar .adeias de um byte ou uma !alavra. SintaEe, C9) destino0fonte Esta instru=>o .om!ara efetuando uma subtra=>o entre o byte ou !alavra endere=ado !or 7I0 dentro do se"mento eEtra de dados0 e o byte ou !alavra endere=ado !or SI dentro do se"mento de dados0 afetando o re"istrador de fla"s0 mas sem devolver o resultado da subtra=>o. + instru=>o automati.amente in.rementa ou de.rementa os re"istradores de Qndi.e SI e 7I0 de!endendo do valor do fla" 7Z0 de modo a indi.ar os !rKEimos dois elementos a serem .om!arados. 5 valor de in.remento ou de.remento M uma de uma ou duas unidades0 de!endendo da nature(a da o!era=>o. 7iante desta instru=>o0 !ode%se usar um !refiEo !ara re!eti=>o0 de modo a .om!arar dois blo.os de memKria entre si0 re!etindo a instru=>o de .om!ara=>o atM Cue ambos se tornem i"uais ou desi"uais.
%%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% A.@..Instru=Bes de fla". Estas instru=Bes afetam diretamente o .onte<do dos fla"s. C/C C/7 C/I C9C S4C S47 S4I
I8S46UHI5 C/C )ro!Ksito, /im!ar o fla" de .arry. SintaEe, C/C Esta instru=>o desli"a o bit .orres!ondente ao fla" de .arry. Em outras !alavras0 ela o ajusta !ara (ero.
I8S46UHI5 C/7 )ro!Ksito, /im!ar o fla" de endere=o. SintaEe, C/7 Esta instru=>o desli"a o bit .orres!ondente ao fla" de endere=o.
I8S46UHI5 C/I )ro!Ksito, /im!ar o fla" de interru!=>o. SintaEe, C/I Esta instru=>o desli"a o fla" de interru!=Bes0 desabilitando0 deste modo0 interru!=Bes mas.ar?veis. Uma interru!=>o mas.ar?vel M aCuela .ujas fun=Bes s>o desativadas Cuando IZYP.
I8S46UHI5 C9C )ro!Ksito, Com!lementar o fla" de .arry. SintaEe, C9C Esta instru=>o .om!lementa o estado do fla" CZ. Se CZ Y P a instru=>o o i"uala a 1. Se CZ Y 10 a instru=>o o i"uala a P. )oderQamos di(er Cue ela a!enas inverte o valor do fla".
I8S46UHI5 S4C )ro!Ksito, +tivar o fla" de .arry. SintaEe, S4C Esta instru=>o ajusta !ara 1 o fla" CZ.
I8S46UHI5 S47 )ro!Ksito, +tivar o fla" de endere=o. SintaEe, S47 Esta instru=>o ajusta !ara 1 o fla" 7Z.
I8S46UHI5 S4I )ro!Ksito, +tivar o fla" de insterru!=>o. SintaEe, S4I Esta instru=>o ativa o fla" IZ0 e habilita interru!=Bes eEternas mas.ar?veis #Cue sK fun.ionam Cuando IZ Y 1$.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 , I84E66U)HgES E GE6f8CI+ 7E +6VUI\5S
Conte<do, .1.Interru!=Bes .2.Geren.iamento de arCuivos %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
Conte<do .1.1.Interru!=Bes de hard2are interno .1.2.Interru!=Bes de hard2are eEterno .1.@.Interru!=Bes de soft2are .1.A.Interru!=Bes mais .omuns
.1.1.Interru!=Bes de hard2are interno Interru!=Bes internas s>o "eradas !or .ertos eventos Cue o.orrem durante a eEe.u=>o de um !ro"rama. Este ti!o de interru!=Bes s>o "eren.iadas0 na sua totalidade0 !elo hard2are e n>o M !ossQvel modifi.?%las. Um eEem!lo .laro deste ti!o de interru!=Bes M a Cue atuali(a o .ontador do .lo.O interno do .om!utador0 o hard2are .hama esta interru!=>o muitas ve(es durante um se"undo. 8>o nos M !ermitido "eren.iar diretamente esta interru!=>o0 uma ve( Cue n>o se !ode .ontrolar a hora atuali(ada !or soft2are. 9as !odemos usar seus efeitos no .om!utador !ara o nosso benefQ.io0 !or eEem!lo !ara .riar um virtual .lo.O atuali(ado .ontinuamente !elo .ontador interno de .lo.O. )ara tanto0 !re.isamos a!enas ler o valor atual do .ontador e o transformar num formato .om!reensQvel !elo usu?rio. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.1.2.Interru!=Bes de hard2are eEterno Interru!=Bes eEternas s>o "eradas atravMs de dis!ositivos !erifMri.os0 tais .omo te.lados0 im!ressoras0 !la.as de .omuni.a=>o0 entre outros. S>o tambMm "eradas !or .o%!ro.essadores. 8>o M !ossQvel desativar interru!=Bes eEternas. Estas interru!=Bes n>o s>o enviadas diretamente !ara a C)U0 mas0 de uma forma melhor0 s>o enviadas !ara um .ir.uito inte"rado .uja fun=>o eE.lusiva M manusear este ti!o de interru!=>o. 5 .ir.uito0 .hamado )ICF29+0 M .ontrolado !ela C)U atravMs de uma sMrie de .omuni.a=>o .hamada !aths. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.1.@.Interru!=Bes de soft2are Interru!=Bes de soft2are !odem ser ativadas diretamente !or nossos !ro"ramas assembly0 invo.ando o n<mero da interru!=>o desejada .om a instru=>o I84. 5 uso das interru!=Bes fa.ilita muito a .ria=>o dos !ro"ramas0 torna%os menores. +lMm disso0 M f?.il .om!reend*%las e "eram boa !erforman.e. Este ti!o de interru!=Bes !odem ser se!aradas em duas .ate"orias, Interru!=Bes do Sistema 5!era.ional 75S e interru!=Bes do :I5S. + diferen=a entre ambas M Cue as interru!=Bes do sistema o!era.ional s>o mais f?.eis de usar0 mas tambMm s>o mais lentas0 uma ve( Cue a.essam os servi=os do :I5S. )or outro lado0 interru!=Bes do :I5S s>o muito mais r?!idas0 mas !ossuem a desvanta"em de serem !arte do hard2are0 o Cue si"nifi.a serem es!e.Qfi.as N arCuitetura do .om!utador em Cuest>o. + es.olha sobre Cual o ti!o de interru!=>o usar ir? de!ender somente das .ara.terQsti.as Cue vo.* deseja dar ao seu !ro"rama, velo.idade #use :I5S$0 !ortabilidade #use 75S$. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.1.A.Interru!=Bes mais .omuns
Conte<do .1.A.1.Int 211 #Interru!=>o do 75S$ 9<lti!las .hamadas N fun=Bes 75S. .1.A.2.Int 1P1 #Interru!=>o do :I5S$ Entrada e SaQda de \Qdeo. .1.A.@.Int 1&1 #Interru!=>o do :I5S$ Entrada e SaQda do 4e.lado. .1.A.A.Int 1D1 #Interru!=>o do :I5S$ Entrada e SaQda da Im!ressora.
%%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% .1.A.1.Interru!=>o 211 )ro!Ksito, Chamar uma diversidade de fun=Bes 75S. SintaEe, Int 211 8ota, Vuando trabalhamos .om o !ro"rama 4+S9 M ne.ess?rio es!e.ifi.ar Cue o valor Cue estamos usando est? em heEade.imal. Esta interru!=>o tem muitas fun=Bes0 !ara a.essar .ada uma delas M ne.ess?rio Cue o n<mero .orres!ondente da fun=>o esteja no re"istrador +1 no momento da .hamada da interru!=>o. Zun=Bes !ara mostrar informa=Bes no vQdeo. P21 EEibe um .ara.ter P91 EEibe uma .adeia de .ara.teres AP1 Es.reve num dis!ositivoLarCuivo Zun=Bes !ara ler informa=Bes do te.lado. P11 Entrada do te.lado P+1 Entrada do te.lado usando buffer @Z1 /eitura de um dis!ositivoLarCuivo Zun=Bes !ara trabalhar .om arCuivos. 8esta se=>o s>o a!enas es!e.ifi.adas as tarefas de .ada fun=>o0 !ara uma refer*n.ia a.er.a dos .on.eitos usados0 veja Introdu=>o ao "eren.iamento de arCuivos. 9Mtodo ZC: PZ1 +bertura de arCuivo 1A1 /eitura seCTen.ial 11 Es.rita seCTen.ial 1&1 Cria=>o de arCuivo 211 /eitura randUmi.a 221 Es.rita randUmi.a 1andles @C1 Cria=>o de arCuivo @71 +bertura de arCuivo @E1 Ze.hamento de arCuivo @Z1 /eitura de arCuivoLdis!ositivo AP1 Es.rita de arCuivoLdis!ositivo A21 9ove !onteiro de leituraLes.rita num arCuivo
ZU8HI5 P21 Uso, 9ostra um .ara.ter na tela. 6e"istradores de .hamada, +1 Y P21 7/ Y \alor de .ara.ter a ser mostrado. 6e"istradores de retorno, 8enhum. Esta fun=>o mostra o .ara.ter .ujo .Kdi"o heEade.imal .orres!onde ao valor arma(enado no re"istrador 7/0 e n>o modifi.a nenhum re"istrador. 5 uso da fun=>o AP1 M re.omendado ao invMs desta fun=>o.
ZU8HI5 P91 Uso, 9ostra uma .adeia de .ara.teres na tela. 6e"istradores de .hamada, +1 Y P91 7S,7] Y Endere=o de inQ.io da .adeia de .ara.teres. 6e"istradores de retorno, 8enhum. Esta fun=>o mostra os .ara.teres0 um !or um0 a !artir do endere=o indi.ado nos re"istradores 7S,7] atM en.ontrar um .ara.ter j0 Cue M inter!retado .omo fim da .adeia. S re.omendado usar a fun=>o AP1 ao invMs desta.
ZU8HI5 AP1 Uso, Es.rever num dis!ositivo ou num arCuivo. 6e"istradores de .hamada, +1 Y AP1 :] Y 8<mero do handle C] Y Vuantidade de bytes a "ravar 7S,7] Y Rrea onde est? o dado 6e"istradores de retorno, CZ Y P se n>o houve erro +] Y 8<mero de bytes es.rito CZ Y 1 se houve erro +] Y CKdi"o de erro )ara usar esta fun=>o !ara mostrar a informa=>o na tela0 fa=a o re"istrador :] ser i"ual a 10 Cue M o valor default !ara o vQdeo no 75S.
ZU8HI5 P11 Uso, /er um .ara.ter do te.lado e mostr?%lo. 6e"istradores de .hamada +1 Y P11 6e"istradores de retorno, +/ Y Cara.ter lido S muito f?.il ler um .ara.ter do te.lado .om esta fun=>o0 o .Kdi"o heEade.imal do .ara.ter lido M arma(enado no re"istrador +/. 8os .aso de te.las es!e.iais0 .omo as de fun=>o Z10 Z20 alMm de outras0 o re"istrador +/ .onter? o valor 10 sendo ne.ess?rio .hamar a fun=>o novamente !ara obter o .Kdi"o daCuele .ara.ter.
ZU8HI5 P+1 Uso, /er .ara.teres do te.lado e arma(en?%los num buffer. 6e"istradores de .hamada, +1 Y P+1 7S,7] Y Endere=o ini.ial da ?rea de arma(enamento :;4E P Y Vuantidade de bytes na ?rea :;4E 1 Y Vuantidade de bytes lidos do :;4E 2 atM :;4E P X 2 Y .ara.teres lidos 6e"istradores de retorno, 8enhum. 5s .ara.teres s>o lidos e arma(enados num es!a=o de memKria Cue foi definido. + estrutura deste es!a=o indi.a Cue o !rimeiro byte re!resentar? a Cuantidade m?Eima de .ara.teres Cue !ode ser lida. 5 se"undo0 a Cuantidade de .ara.teres lidos e0 no ter.eiro byte0 o ini.io onde eles s>o arma(enados. Vuando se atin"e a Cuantidade m?Eima !ermitida0 ouve%se o som do s!eaOer e CualCuer .ara.ter adi.ional M i"norado. )ara finali(ar a entrada0 basta di"itar aE84E6b.
ZU8HI5 @Z1 Uso, /er informa=>o de um dis!ositivo ou de um arCuivo. 6e"istradores de .hamada, +1 Y @Z1 :] Y 8<mero do handle C] Y 8<mero de bytes a ler 7S,7] Y Rrea !ara re.eber o dado 6e"istradores de retorno, CZ Y P se n>o h? erro e +] Y n<mero de bytes lidos. CZ Y 1 se h? erro e +] .onter? o .Kdi"o de erro.
ZU8HI5 PZ1 Uso, +brir um arCuivo ZC:. 6e"istradores de .hamada, +1 Y PZ1 7S,7] Y )onteiro !ara um ZC: 6e"istradores de retorno, +/ Y PP1 se n>o h? !roblemas0 de outra forma retorna PZZ1
ZU8HI5 1A1 Uso, /eitura seCuen.ial num arCuivo ZC:. 6e"istradores de .hamada, +1 Y 1A1 7S,7] Y )onteiro !ara um ZC: j? aberto. 6e"istradores de retorno, +/ Y P se n>o h? erros0 de outra forma o .Kdi"o .orres!ondente de erro retornar?, 1 erro no fim do arCuivo0 2 erro na estrutura ZC: e @ erro de leitura !ar.ial. 5 Cue esta fun=>o fa( M ler o !rKEimo blo.o de informa=Bes do endere=o dado !or 7S,7]0 e atuali(ar este re"istro.
ZU8HI5 11 Uso, Es.rita seCuen.ial e arCuivo ZC:. 6e"istradores de .hamada, +1 Y 11 7S,7] Y )onteiro !ara um ZC: ja aberto. 6e"istradores de retorno, +/ Y PP1 se n>o h? erros0 de outra forma .onter? o .Kdi"o de erro, 1 dis.o .heio ou arCuivo somente de leitura0 2 erro na forma=>o ou na es!e.ifi.a=>o do ZC:. + fun=>o 11 atuali(a o ZC: a!Ks a es.rita do re"istro !ara o !resente blo.o.
ZU8HI5 1&1 Uso, Criar um arCuivo ZC:. 6e"istradores de .hamada, +1 Y 1&1 7S,7] Y )onteiro !ara um ZC: j? aberto. 6e"istradores de retorno, +/ Y PP1 se n>o h? erros0 de outra forma .onter? o valor PZZ1. S baseada na informa=>o advinda de um ZC: !ara .riar um arCuivo num dis.o.
ZU8HI5 211 Uso, /er de modo randUmi.o um arCuivo ZC:. 6e"istradores de .hamada, +1 Y 211 7S,7] Y )onteiro !ara ZC: aberto. 6e"istradores de retorno, + Y PP1 se n>o h? erro0 de outra forma +1 .onter? o .Kdi"o de erro, 1 se M o fim do arCuivo0 2 se h? um erro de es!e.ifi.a=>o no ZC: e @ se um re"istro foi lido !ar.ialmente ou o !onteiro de arCuivo est? no fim do mesmo. Esta fun=>o l* o re"istro es!e.ifi.ado !elos .am!os do blo.o atual e re"istro de um ZC: aberto e .olo.a a informa=>o na 74+0 Rrea de 4ransfer*n.ia do 7is.o.
ZU8HI5 221 Uso, Es.rita randUmi.a num arCuivo ZC:. 6e"istradores de .hamada, +1 Y 221 7S,7] Y )onteiro !ara um ZC: aberto. 6e"istradores de retorno, +/ Y PP1 se n>o h? erro0 de outra forma .onter? o .Kdi"o de erro, 1 se o dis.o est? .heio ou o arCuivo M a!enas de leitura e 2 se h? um erro na es!e.ifi.a=>o ZC:. Es.reve o re"istro es!e.ifi.ado !elos .am!os do blo.o atual e re"istro de um ZC: aberto. Esta informa=>o M do .onte<do da 74+.
ZU8HI5 @C1 Uso, Criar um arCuivo se n>o eEiste ou deiE?%lo .om .om!irmento P se eEiste. 6e"istradores de .hamada, +1 Y @C1 C1 Y +tributo do arCuivo 7S,7] Y 8ome do arCuivo0 no formato +SCII. 6e"istradores de retorno, CZ Y P e +] informa o n<mero do handle se n>o h? erro. Se .aso houver erro0 CZ ser? 1 e +] .onter? o .Kdi"o de erro, @ .aminho n>o en.ontrado0 A n>o h? handles dis!onQveis e a.esso ne"ado. Esta fun=>o substitui a fun=>o 1&1. 5 nome do arCuivo M es!e.ifi.ado numa .adeia +SCII de bytes terminados !elo .ara.ter P. 5 arCuivo .riado .onter? os atributos definidos no re"istrador C]0 do se"uinte modo, \alor +tributos PP1 8ormal P21 1idden PA1 System P&1 1idden e System 5 arCuivo M .riado .om !ermiss>o de leitura e es.rita. 8>o M !ossQvel a .ria=>o de diretKrios atravMs desta fun=>o.
ZU8HI5 @71 Uso, +bre um arCuivo e retorna um handle. 6e"istradores de .hamada, +1 Y @71 +/ Y modo de a.esso 7S,7] Y 8ome do arCuivo0 no formato +SCII. 6e"istradores de retorno, CZ Y P e +] Y n<mero do handle se n>o h? erros0 de outra forma CZ Y 1 e +] Y .Kdi"o de erro, P11 se a fun=>o n>o M v?lida0 P21 se o arCuivo n>o foi en.ontrado0 P@1 se o .aminho n>o foi en.ontrado0 PA1 se n>o h? handles dis!onQveis0 P1 a.esso ne"ado0 e PC1 se o .Kdi"o de a.esso n>o M v?lido. 5 handle retornado M de 1& bits. 5 .Kdi"o de a.esso M es!e.ifi.ado da se"uinte maneira, :I4S D & A @ 2 1 . . . . P P P +!enas leitura . . . . P P 1 +!enas es.rita . . . . P 1 P /eituraLEs.rita . . . E . . . 6ESE6\+75
ZU8HI5 @E1 Uso, Ze.ha um arCuivo #handle$. 6e"istradores de .hamada, +1 Y @E1 :] Y 8<mero do handle asso.iado 6e"istradores de retorno, CZ Y P se n>o h? erros0 ou CZ ser? 1 e +] .onter? o .Kdi"o de erro, P&1 se o handle M inv?lido. Esta fun=>o atuali(a o arCuivo e libera o handle Cue estava usando. ZU8HI5 @Z1 Uso, /er uma Cuantidade es!e.Qfi.a de bytes de um arCuivo aberto e arma(en?%los num buffer es!e.Qfi.o. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.1.A.2.Interru!=>o 1Ph )ro!Ksito, Chamar uma diversidade de fun=Bes do :I5S SintaEe, Int 1P1 Esta interru!=>o tem v?rias fun=Bes0 todas !ara entrada e saQda de vQdeo. )ara a.essar .ada uma delas M ne.ess?rio .olo.ar o n<mero da fun=>o .orres!ondente no re"istrador +1. \eremos a!enas as fun=Bes mais .omuns da interru!=>o 1P1. Zun=>o P210 sele.iona a !osi=>o do .ursor Zun=>o P910 eEibe um .ara.ter e o atributo na !osi=>o do .ursor Zun=>o P+10 eEibe um .ara.ter na !osi=>o do .ursor Zun=>o PE10 modo alfanumMri.o de eEibi=>o de .ara.teres
Zun=>o P2h Uso, 9ove o .ursor na tela do .om!utador usando o modo teEto. 6e"istradores de .hamada, +1 Y P21 :1 Y )?"ina de vQdeo onde o .ursor est? !osi.ionado. 71 Y linha 7/ Y .oluna 6e"istradores de retorno, 8enhum. + !osi=>o do .ursor M definida !elas suas .oordenadas0 ini.iando%se na !osi=>o P0P atM a !osi=>o D902A. /o"o os valores !ossQveis !ara os re"istradores 71 e 7/ s>o, de P a 2A !ara linhas e de P a D9 !ara .olunas.
Zun=>o P9h Uso, 9ostra um determinado .ara.ter v?rias ve(es na tela do .om!utador .om um atributo definido0 ini.iando !ela !osi=>o atual do .ursor. 6e"istradores de .hamada, +1 Y P91 +/ Y Cara.ter a eEibir :1 Y )?"ina de vQdeo0 onde o .ara.ter ser? mostrado :/ Y +tributo do .ara.ter C] Y 8<mero de re!eti=Bes. 6e"istradores de retorno, 8enhum Esta fun=>o mostra um .ara.ter na tela v?rias ve(es0 de a.ordo .om o n<mero es!e.ifi.ado no re"istrador C]0 mas sem mudar a !osi=>o do .ursor na tela.
Zun=>o P+h Uso, EEibe um .ara.ter na !osi=>o atual do .ursor. 6e"istradores de .hamada, +1 Y P+1 +/ Y Cara.ter a eEibir :1 Y )?"ina de vQdeo onde o .ara.ter ser? eEibido :/ Y Cor do .ara.ter #a!enas em modo "r?fi.o$ C] Y 8<mero de re!eti=Bes 6e"istradores de retorno, 8enhum. + !rin.i!al diferen=a entre esta fun=>o e a anterior M !ermitir mudan=a nos atributos0 bem .omo mudar a !osi=>o do .ursor.
Zun=>o PE1 Uso, EEibir um .ara.ter na tela do .om!utador atuali(ando a !osi=>o do .ursor. 6e"istradores de .hamada, +1 Y PE1 +/ Y Cara.ter a eEibir :1 Y )?"ina de vQdeo onde o .ara.ter ser? eEibido :/ Y Cor a usar #a!enas em modo "r?fi.o$ 6e"istradores de retorno, 8enhum %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.1.A.@.Interru!=>o 1&1 \eremos duas fun=Bes da interru!=>o 1&1. + eEem!lo das demais interru!=Bes0 usa%se o re"istrador +1 !ara .ham?%las.
Zun=Bes da interru!=>o 1&h Zun=>o PP10 l* um .ara.ter do te.lado. Zun=>o P110 l* o estado atual do te.lado. Zun=>o PP1 Uso, /er um .ara.ter do te.lado. 6e"istradores de .hamada, +1 Y PP1 6e"istradores de retorno, +1 Y CKdi"o da te.la !ressionada +/ Y \alor +SCII do .ara.ter Vuando se usa esta interru!=>o0 os !ro"ramas eEe.utam atM Cue uma te.la seja !ressionada. Se M um valor +SCII0 M arma(enado no re"istrador +1. Caso .ontr?rio0 o .Kdi"o M arma(enado no re"istrador +/ e +1YP. Este valor de +/ !ode ser utili(ado Cuando Cueremos dete.tar te.las Cue n>o est>o diretamente re!resentadas !elo seu valor +SCII0 tais .omo a+/4baC58465/b.
Zun=>o P1h Uso, /er o estado do te.lado 6e"istradores de .hamada, +1 Y P11 6e"istradores de retorno, Se o re"istrador de fla" M (ero0 si"nifi.a Cue h? informa=>o no buffer de te.lado na memKria. Caso .ontr?rio0 o buffer est? va(io. )ortanto o valor do re"istrador +1 ser? o valor da te.la arma(enada no buffer. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.1.A.A.Interru!=>o 1D1 )ro!Ksito, 9anusear a entrada e saQda da im!ressora. SintaEe, Int 1D1 Esta interru!=>o M usada !ara enviar .ara.teres0 setar ou ler o estado de uma im!ressora. Zun=Bes da interru!=>o 1Dh Zun=>o PP10 im!rime um valor +SCII Zun=>o P110 seta a im!ressora Zun=>o P210 l* estado da im!ressora Zun=>o PP1 Uso, Im!rimir um .ara.ter numa im!ressora. 6e"istradores de .hamada, +1 Y PP1 +/ Y Cara.ter a im!rimir 7] Y )orta de .oneE>o 6e"istradores de retorno, +1 Y Estado da im!ressora 5s valores da !orta a .olo.ar no re"istrador 7] s>o, /)41 Y P0 /)42 Y 10 /)4@ Y 2 ... 5 estado da im!ressora M .odifi.ado bit a bit .omo se"ue, :I4 1LP SIG8IZIC+75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% P 1 Estado de time%out 1 % 2 % @ 1 Erro de entrada e saQda A 1 Im!ressora sele.ionada 1 Zim de !a!el & 1 6e.onhe.imento de .omuni.a=>o D 1 + im!ressora est? !ronta !ara o uso 5s bits 1 e 2 bits n>o s>o relevantes + maioria dos :I5S su!ortam @ !ortas !aralelas0 havendo al"uns Cue su!ortam A. Zun=>o P1h Uso, Setar uma !orta !aralela. 6e"istradores de .hamada, +1 Y P11 7] Y )orta 6e"istradores de retorno, +1 Y Status da im!ressora + !orta definida no re"istrador 7] !ode ser, /)41YP0 /)42Y10 assim !or diante. 5 estado da im!ressora M .odifi.ado bit a bit .omo se"ue, :I4 1LP SIG8IZIC+75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% P 1 Estado de time%out 1 % 2 % @ 1 Erro de entrada e saQda A 1 Im!ressora sele.ionada 1 Zim de !a!el & 1 6e.onhe.imento de .omuni.a=>o D 1 + im!ressora est? !ronta !ara o uso 5s bits 1 e 2 bits n>o s>o relevantes Zun=>o P2h Uso, 5bter o status da im!ressora. 6e"istradores de .hamada, +1 Y P11 7] Y )orta 6e"istradores de retorno +1 Y Status da im!ressora + !orta definida no re"istrador 7] !ode ser, /)41YP0 /)42Y10 assim !or diante. 5 estado da im!ressora M .odifi.ado bit a bit .omo se"ue, :I4 1LP SIG8IZIC+75 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% P 1 Estado de time%out 1 % 2 % @ 1 Erro de entrada e saQda A 1 Im!ressora sele.ionada 1 Zim de !a!el & 1 6e.onhe.imento de .omuni.a=>o D 1 + im!ressora est? !ronta !ara o uso 5s bits 1 e 2 bits n>o s>o relevantes %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2. Geren.iamento de +rCuivos
Conte<do, .2.1.9odos de trabalhar .om arCuivos .2.2.9Mtodo ZC: .2.@.9Mtodos de .anais de .omuni.a=>o
.2.1.9odos de trabalhar .om arCuivos. 1? dois modos de trabalhar .om arCuivos. 5 !rimeiro M atravMs de ZC: # blo.os de .ontrole de arCuivo$0 o se"undo M atravMs de .anais de .omuni.a=>o0 tambMm .onhe.idos .omo handles. 5 !rimeiro modo de manusear arCuivos tem sido usado desde o sistema o!era.ional C)90 !rede.essor do 75S0 lo"o !ermite .ertas .om!atibilidades .om muitos arCuivos velhos do C)9 bem .omo .om a vers>o 1.P do 75S0 alMm deste mMtodo !ermitir%nos ter um n<mero ilimitado de arCuivos abertos ao mesmo tem!o. Se vo.* Cuiser .riar um volume !ara o dis.o0 a <ni.a forma M atravMs deste mMtodo. 7e!ois de .onsiderarmos as vanta"ens de ZC:0 o uso do mMtodo de Canais de Comuni.a=>o M muito sim!les e !ermite%nos um melhor manuseio de erros. )ara uma melhor fa.ilidade0 daCui !or diante nos referiremos aos :lo.os de Controle de +rCuivo .omo ZC:s e aos Canais de Comuni.a=>o .omo handles. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.2.9Mtodo ZC:. .2.2.1.Introdu=>o .2.2.2.+bertura de arCuivo .2.2.@.Criar um novo arCuivo .2.2.A.Es.rita seCTen.ial .2.2../eitura seCTen.ial .2.2.&./eitura e es.rita randUmi.a .2.2.D.Ze.har um arCuivo %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% .2.2.1.I84657UHI5 1? dois ti!os de ZC:0 o normal0 .ujo .om!rimento M @D bytes0 e o eEtendido0 .om AA bytes. 8este tutorial iremos assumir o !rimeiro0 ou seja0 Cuando falarmos em ZC:0 estaremos fa(endo refer*n.ia ao ti!o normal #@D bytes$. 5 ZC: M .om!osto de informa=Bes dadas !elo !ro"ramador e !or informa=Bes Cue ele toma diretamente do sistema o!era.ional. Vuando estes ti!os de arCuivos s>o usados0 sK M !ossQvel se trabalhar no diretKrio .orrente0 !ois ZC:s n>o forne.em su!orte ao sistema de or"ani(a=>o de arCuivos atravMs de diretKrios do 75S. ZC: M .om!osto !elos se"uintes .am!os, )5SIHI5 C59)6I9E845 SIG8IZIC+75 PP1 1 :yte 7rive P11 F :ytes 8ome do arCuivo P91 @ :ytes EEtens>o PC1 2 :ytes 8<mero do blo.o PE1 2 :ytes 4amanho do re"istro 1P1 A :ytes 4amanho do arCuivo 1A1 2 :ytes 7ata de .ria=>o 1&1 2 :ytes 1ora de .ria=>o 1F1 F :ytes 6eservado 2P1 1 :ytes 6e"istro .orrente 211 A :ytes 6e"istro randUmi.o )ara sele.ionar o drive de trabalho0 assuma, drive + Y 13 drive : Y 23 et.. Se for usado P0 o drive Cue est? sendo usado no momento ser? tomado .omo o!=>o. 5 nome do arCuivo deve ser justifi.ado N esCuerda e M ne.ess?rio !reen.her .om es!a=os os bytes remanes.entes0 a eEtens>o M .olo.ada do mesmo modo. 5 blo.o .orrente e o re"istro .orrente di(em ao .om!utador Cue re"istro ser? a.essado nas o!era=Bes de leitura e es.rita. Um blo.o M um "ru!o de 12F re"istros. 5 !rimeiro blo.o de arCuivo M o blo.o P. 5 !rimeiro re"istro M o re"istro P0 lo"o o <ltimo re"istro do !rimeiro blo.o deve ser o 12D0 uma ve( Cue a numera=>o M ini.iada .om P e o blo.o !ode .onter 12F re"istradores no total. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.2.2.+:E64U6+ 7E +6VUI\5 )ara abrir um arCuivo ZC: M usada a fun=>o PZ1 da interru!=>o 21h. + unidade0 o nome e a eEtens>o do arCuivo devem ser ini.iali(adas antes da abertura. 5 re"istrador 7] deve a!ontar !ara o blo.o. Se o valor ZZ1 M retornado no re"istrador +1 Cuando da .hamada da interru!=>o0 ent>o o arCuivo n>o foi en.ontrado. Se tudo der .erto0 o valor P M retornado. Se o arCuivo M aberto0 ent>o o 75S ini.iali(a o blo.o .orrente em P0 o tamanho do re"istro !ara 12F bytes. 5 tamanho do arCuivo e a sua data s>o !reen.hidos .om as informa=Bes en.ontradas no diretKrio. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.2.@.C6I+6 U9 85\5 +6VUI\5 )ara a .ria=>o de arCuivos M usada a fun=>o 1&1 da interru!=>o 21h. 5 re"istrador 7] deve a!ontar !ara uma estrutura de .ontrole .ujo os reCuisitos s>o de Cue !elo menos a unidade lK"i.a0 o nome e a eEtens>o do arCuivo sejam definidas. Caso o.orra !roblema0 o valor ZZ1 deve retornar em +/0 de outra forma este re"istrador .onter? o valor P. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.2.A.ESC6I4+ SEVkE8CI+/ +ntes de .onse"uirmos reali(ar es.rita !ara o dis.o0 M ne.ess?rio definir a ?rea de transfer*n.ia de dados usando0 !ara tanto0 a fun=>o 1+1 da interru!=>o 21h. + fun=>o 1+1 n>o retorna CualCuer estado do dis.o nem da o!era=>o. 9as a fun=>o 110 Cue usaremos !ara es.rever !ara o dis.o0 fa( isso no re"istrador +/. Se este for i"ual a (ero0 ent>o n>o h? erro e os .am!os de re"istro .orrente e de blo.o s>o atuali(ados.
%%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% .2.2../EI4U6+ SEVkE8CI+/ +ntes de tudo0 devemos definir a ?rea de transfer*n.ia de arCuivo ou 74+. )ara a leitura seCTen.ial usaremos a fun=>o 1A1 da interru!=>o 21h. 5 re"istro a ser lido M definido !elos .am!os re"istro e blo.o .orrente. 5 re"istrador +/ retorna o estado da o!era=>o. Se +/ .ontMm o valor 1 ou @0 si"nifi.a Cue foi atin"ido o fim do arCuivo. Um valor 20 !or sua ve(0 si"nifi.a Cue o ZC: est? estruturado erroneamente. Caso n>o o.orra erro0 +/ .onter? o valor P e os .am!os de re"istro e blo.o .orrente s>o atuali(ados. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.2.&./EI4U6+ E ESC6I4+ 6+87l9IC+ + fun=>o 211 e a fun=>o 221 da insterru!=>o 21h s>o usadas N reali(a=>o0 res!e.tivamente0 da es.rita e leitura randUmi.a. 5 n<mero de re"istro randUmi.o e o blo.o .orrente s>o usados !ara .al.ular a !osi=>o relativa do re"istro a ser lido ou es.rito. 5 re"istrador +/ retorna a mesma informa=>o do Cue !ar a es.rita e leitura seCTen.ial. + informa=>o a ser lida ser? retornada na ?rea de transfer*n.ia do dis.o0 bem .omo a informa=>o a ser es.rita retorna na 74+. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.2.D.ZEC1+6 U9 +6VUI\5 )ara fe.har um arCuivo usamos a fun=>o 1P1 da interru!=>o 21h. Se a!Ks invo.ar esta fun=>o0 o re"isatrador +/ .onter o valor ZZ10 si"nifi.a Cue o arCuivo foi mudado de !osi=>o0 o dis.o foi mudado ou h? erro de a.esso a dis.o. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.@.Canais de .omuni.a=>o. .2.@.1.4rabalhando .om handles .2.@.2.Zun=Bes !ara usar handles
.2.@.1.46+:+/1+875 C59 1+87/ES 5 uso de handles !ara "eren.iar arCuivos tra( "randes fa.ilidades na .ria=>o de arCuivos e o !ro"ramador !ode .on.entrar%se em outros as!e.tos da !ro"rama=>o sem !reo.u!ar%se .om detalhes Cue !odem ser manuseados !elo sistema o!era.ional. + fa.ilidade dos handles .onsiste em Cue !ara o!erarmos sobre um arCuivo M a!enas ne.ess?rio definirmos o nome do mesmo e o n<mero de handle a usar0 todo o resto da informa=>o M manuseada internamente !elo 75S. Vuando usamos este mMtodo !ara trabalhar .om arCuivos0 n>o h? distin=>o entre a.esso seCTen.ial ou randUmi.o0 o arCuivo M sim!lesmente tomado .omo uma rede de bytes. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
.2.@.2.ZU8HgES )+6+ US+6 1+87/ES +s fun=Bes usadas !ara o manuseio de arCuivos atravMs de handles s>o des.ritas na !?"ina sobre, Interru!=Bes0 na se=>o dedi.ada N interru!=>o 21h.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 &, 9+C65S E )65CE7I9E845S Conte<do &.1.)ro.edimentos &.2.9a.ros
&.1.)ro.edimentos &.1.1.7efini=>o de !ro.edimento &.1.2.SintaEe de um !ro.edimento %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
&.1.1.7efini=>o de um !ro.edimento Um !ro.edimento M uma .ole=>o de instru=Bes !ara as Cuais M !ossQvel dire.ionar o .urso de nosso !ro"rama0 e uma ve( Cue a eEe.u=>o destas instru=Bes do !ro.edimento tenha a.abado0 o .ontrole retorna !ara linha Cue se"ue N Cue .hamou o !ro.edimento. )ro.edimentos nos ajudam a .riar !ro"ramas le"Qveis e f?.eis de modifi.ar. Vuando se invo.a um !ro.edimento0 o endere=o da !rKEima instru=>o do !ro"rama M mantido na !ilha0 de onde M re.u!erado Cuando do retorno do !ro.edimento. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
&.1.2.SintaEe de um !ro.edimento 1? dois ti!os de !ro.edimentos0 os intrase"ments0 Cue se lo.ali(am no mesmo se"mento da instru=>o Cue o .hama0 e os inter se"ments0 Cue !odem se lo.ali(ar em diferentes se"mentos de memKria. Vuando os !ro.edimentos intrase"ments s>o usados0 o valor de I) M arma(enado na !ilha e Cuando os !ro.edimentos inter se"ments s>o usados o valor de CS,I) M arma(enado. /embre%se Cue o re"istrador CS indi.a Cual o se"mento de .Kdi"o. + diretiva Cue .hama um !ro.edimento M .omo se"ue, C+// 8omedo)ro.edimento +s !artes Cue .om!Bem um !ro.edimento s>o as se"uintes, 7e.lara=>o do !ro.edimento CKdi"o do !ro.edimento 7iretiva de retorno 4Mrmino do !ro.edimento )or eEem!lo0 se Cuisermos uma rotina Cue soma dois bytes arma(enados em +1 e +/0 e o resultado da soma em :], Soma )ro. 8ear 3 7e.lara=>o do )ro.edimento 9ov :]0 P 3 Conte<do do )ro.edimento... 9ov :/0 +1 9ov +10 PP +dd :]0 +] 6et 3 7iretiva de retorno Soma End) 3 Zim do )ro.edimento 8a de.lara=>o0 a !rimeira !alavra0 Soma0 .orres!onde ao nome do !ro.edimento. )ro. de.lara%o e a !alavra 8ear indi.a Cue o !ro.edimento M do ti!o intrase"ment0 ou seja0 no mesmo se"mento. + diretiva 6et .arre"a I) .om o endere=o arma(enado na !ilha !ara retornar ao !ro"rama Cue .hamou. Zinalmente0 Soma End) indi.a o fim do !ro.edimento. )ara de.larar um !ro.edimento inter se"ment0 basta substituir a !alavra 8ear !ara Z+6. + .hamada deste !ro.edimento M feito de modo id*nti.o, Call Soma 9a.ros ofere.em uma "rande fleEibilidade na !ro"rama=>o0 .om!aradas aos !ro.edimentos. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
&.2.9a.ros &.2.1.7efini=>o de uma 9a.ro &.2.2.SintaEe de uma 9a.ro &.2.@.:ibliote.as de 9a.ros &.2.1.7efini=>o de uma 9a.ro Uma ma.ro M um "ru!o de instru=Bes re!etitivas em um !ro"rama Cue s>o .odifi.adas a!enas uma ve( e0 assim0 !ou!am es!a=o0 !odendo ser utili(adas tantas ve(es Cuantas forem ne.ess?rio. + !rin.i!al diferen=a entre uma ma.ro e um !ro.edimento M Cue numa ma.ro M !ossQvel a !assa"em de !ardmetros e num !ro.edimento n>o. 8o momento em Cue a ma.ro M eEe.utada0 .ada !ardmetro M substituQdo !elo nome ou valor es!e.ifi.ado na hora da .hamada. )odemos di(er0 desta forma0 Cue um !ro.edimento M uma eEtens>o de um determinado !ro"rama0 enCuanto Cue uma ma.ro M um mKdulo Cue es!e.ifi.a fun=Bes Cue !odem ser utili(adas !or diferentes !ro"ramas. Uma outra diferen=a entre uma ma.ro e um !ro.edimento M o modo de .hamada de .ada um. )ara .hamar um !ro.edimento0 se fa( ne.ess?rio a diretiva C+//0 !or outro lado0 !ara .hamada de ma.ros M feita .om se fosse uma instru=>o normal da lin"ua"em assembly. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% &.2.2.SintaEe de uma 9a.ro +s !artes Cue .om!Bem uma ma.ro s>o as se"uintes, 7e.lara=>o da ma.ro CKdi"o da ma.ro 7iretiva de tMrmino da ma.ro + de.lara=>o da ma.ro M feita .omo se se"ue, 8ome9a.ro 9+C65 a!ardmetro10 !ardmetro2...b 7o mesmo modo Cue temos a fun.ionalidade dos !ardmetros0 M !ossQvel tambMm a .ria=>o de uma ma.ro Cue n>o os !ossua. + diretiva de tMrmino da ma.ro M, E879 Um eEem!lo de uma ma.ro !ara .olo.ar o .ursor numa determinada !osi=>o da tela, )os 9+C65 /inha0 Coluna )US1 +] )US1 :] )US1 7] 95\ +10 P21 95\ 710 /inha 95\ 7/0 Coluna 95\ :10 P I84 1P1 )5) 7] )5) :] )5) +] E879 )ara usar uma ma.ro basta .ham?%la !elo seu nome0 tal .omo se fosse CualCuer instru=>o na lin"ua"em assembly, )os F0 & %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%%
&.2.@.:ibliote.a de 9a.ros Uma das fa.ilidades ofere.idas !elo uso de ma.ros M a .ria=>o de bibliote.as0 Cue s>o "ru!o de ma.ros0 !odendo ser in.luQdas num !ro"rama ori"in?rias de arCuivos diferentes. + .ria=>o destas bibliote.as M muito sim!les. Criamos um arCuivo .om todas as ma.ros Cue ser>o ne.ess?rias e o salvamos .omo um arCuivo teEto. )ara in.luir uma bibliote.a num !ro"rama0 basta .olo.ar a se"uinte instru=>o In.lude 8omedo+rCuivo na !arte ini.ial do !ro"rama0 antes da de.lara=>o do modelo de memKria. Su!ondo Cue o arCuivo de ma.ros tenha sido salvo .om o nome de 9+C65S.4]40 a instru=>o In.lude seria utili(ada do se"uinte modo, 3InQ.io do !ro"rama In.lude 9+C65S.4]4 .957E/ S9+// .7+4+ 35s dados v>o aCui .C57E Ini.io, 35 .Kdi"o do !ro"rama .ome=a aCui .S4+C^ 3+ !ilha M de.larada End Ini.io 3Zim do !ro"rama ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 D, E]E9)/5S 7E )65G6+9+S
Conte<do, D.1.EEem!los de )ro"ramas .om 7ebu" D.2.EEem!los de )ro"ramas .om 4+S9 %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% D.1.EEem!los de )ro"ramas .om 7ebu" 8esta se=>o forne.eremos al"uns !ro"ramas feitos no debu" do 75S. \o.* !ode eEe.utar .ada !ro"rama assembly usando o .omando ["[ #"o$0 !ara ver o Cue .ada !ro"rama fa(. )ro.edimento )rimeiro !asso Carre"ar o !ro"rama eEem!lo )or eEem!lo, C,_`debu" %n one..om %l %u 1PP 1P9 P7FP,P1PP :FP&PP 95\ +]0PPP& P7FP,P1P@ ::PAPP 95\ :]0PPPA P7FP,P1P& P17F +77 +]0:] P7FP,P1PF C72P I84 2P % 8ota, %n one..om 7ar nome ao !ro"rama a ser .arre"ado %l Carre"?%lo %u 1PP 1P9 7esmontar o .Kdi"o do endere=o ini.ial ao final es!e.ifi.ado Se"undo !asso 7i"ite o .omando " )or eEem!lo, %" )ro"ram terminated normally %
EEem!los de !ro"ramas no 7ebu" )rimeiro eEem!lo %aP1PP 29D7,P1PP 95\ +]0PPP& 3)Be o valor PPP& no re"istrador +] 29D7,P1P@ 95\ :]0PPPA 3)Be o valor PPPA no re"istrador :] 29D7,P1P& +77 +]0:] 3+di.iona :] ao .onte<do de +] 29D7,P1PF I84 2P 3Zinali(a o )ro"rama + <ni.a .oisa Cue este !ro"rama fa( M salvar dois valores em dois re"istradores e adi.ionar o valor de um ao outro. Se"undo eEem!lo % a1PP PC1:,P1PP jm! 12 3Salta !ara o endere=o 12h PC1:,P1P2 aEnterb % e 1P2 m1ello0 1o2 are you Jm Pd Pa mjm % a12 PC1:,P12 95\ 7]0P1P2 3Co!ia a strin" !ara re"istrador 7] PC1:,P12F 95\ C]0PPPZ 3Vuantas ve(es a strin" ser? mostrada PC1:,P12: 95\ +10P9 3Co!ia o valor P9 !ara re"istrador +1 PC1:,P127 I84 21 39ostra a strin" PC1:,P12Z 7EC C] 3Subtrai 1 de C] PC1:,P1@P JC]c P1@A 3Se C] M i"ual a P salta !ara o endere=o P1@A PC1:,P1@2 J9) P127 3Salta ao endere=o P127 PC1:,P1@A I84 2P 3Zinali(a o !ro"rama Este !ro"rama mostra 1 ve(es na tela a strin" de .ara.teres. 4er.eiro eEem!lo %a1PP 29D7,P1PP 95\ +10P1 3Zun=>o !ara mudar o .ursor 29D7,P1P2 95\ C]0PPPD 3Zormata o .ursor 29D7,P1P I84 1P 3Chama interru!=>o do :I5S 29D7,P1PD I84 2P 3Zinali(a o !ro"rama Este !ro"rama muda o formato do .ursor. Vuarto eEem!lo %a1PP 29D7,P1PP 95\ +10P1 3Zun=>o 1 #l* .ara.tere do te.lado$ 29D7,P1P2 I84 21 3Chama interru!=>o do 75S 29D7,P1PA C9) +/0P7 3Com!ara se o .ara.tere lido M um E84E6 29D7,P1P& J8c P1PP 3Se n>o M0 l* um outro .ara.tere 29D7,P1PF 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P1P+ 95\ 7/0+/ 3Chara.ter to 2rite on +/ 29D7,P1PC I84 21 3Chama interru!=>o do 75S 29D7,P1PE I84 2P 3Zinali(a o !ro"rama Este !ro"rama usa a interru!=>o 21h do 75S. Usa duas fun=Bes da mesma, a !rimeira l* um .ara.tere do te.lado #fun=>o 1$ e a se"undo es.reve um .ara.tere na tela. 5 !ro"rama l* .ara.teres do te.lado atM en.ontrar um E84E6. Vuinto eEem!lo %a1PP 29D7,P1PP 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P1P2 95\ C]0PPPF 3)Be o valor PPPF no re"istrador C] 29D7,P1P 95\ 7/0PP 3)Be o valor PP no re"istrador 7/ 29D7,P1PD 6C/ :/01 36ota.iona o byte em :/ um bit !ara a esCuerda 29D7,P1P9 +7C 7/0@P 3Converte o re"istrador de fla" !ara 1 29D7,P1PC I84 21 3Chama interru!=>o do 75S 29D7,P1PE /55) P1P 3Salta se C] ` P !ara o endere=o P1P 29D7,P11P I84 2P 3Zinali(a o !ro"rama Este !ro"rama mostra na tela um n<mero bin?rio atravMs de um .i.lo .ondi.ional #/55)$ usando a rota=>o do byte. SeEto eEem!lo %a1PP 29D7,P1PP 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P1P2 95\ 7/0:/ 3)Be o valor de :/ em 7/ 29D7,P1PA +77 7/0@P 3+di.iona o valor @P a 7/ 29D7,P1PD C9) 7/0@+ 3Com!ara o valor @+ .om o .onte<do de 7/ sem afet?%lo 3seu valor a!enas modifi.a o estado do fla" de .arry 29D7,P1P+ J/ P1PZ 3salta ao endere=o P1Pf0 se for menor 29D7,P1PC +77 7/0PD 3+di.iona o valor PD a 7/ 29D7,P1PZ I84 21 3Chama interru!=>o do 75S 29D7,P111 I84 2P 3Zinali(a o !ro"rama Este !ro"rama im!rime um valor (ero em dQ"itos heEade.imais. SMtimo eEem!lo %a1PP 29D7,P1PP 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P1P2 95\ 7/0:/ 3)Be o valor de :/ em 7/ 29D7,P1PA +87 7/0PZ 34rans!orta fa(endo +87 dos n<meros bit a bit 29D7,P1PD +77 7/0@P 3+di.iona @P a 7l 29D7,P1P+ C9) 7/0@+ 3Com!ara 7l .om @+ 29D7,P1P7 J/ P112 3Salta ao endere=o P1120 se menor 29D7,P1PZ +77 7/0PD 3+di.iona PD a 7/ 29D7,P112 I84 21 3Chama interru!=>o do 75S 29D7,P11A I84 2P 3Zinali(a o !ro"rama Este !ro"rama M usado !ara im!rimir dois dQ"itos heEade.imais. 5itavo eEem!lo %a1PP 29D7,P1PP 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P1P2 95\ 7/0:/ 3)Be o valor de :/ em 7/ 29D7,P1PA 95\ C/0PA 3)Be o valor PA em C/ 29D7,P1P& S16 7/0C/ 37eslo.a os A bits mais altos do n<mero ao nibble mais N direita 29D7,P1PF +77 7/0@P 3+di.iona @P a 7/ 29D7,P1P: C9) 7/0@+ 3Com!ara 7l .om @+ 29D7,P1PE J/ P11@ 3Salta ao endere=o P11@0 se menor 29D7,P11P +77 7/0PD 3+di.iona PD a 7/ 29D7,P11@ I84 21 3Chama interru!=>o do 75S 29D7,P11 I84 2P 3Zinali(a o !ro"rama Este !ro"rama im!rime o !rimeiro de dois dQ"itos heEade.imais. 8ono eEem!lo %a1PP 29D7,P1PP 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P1P2 95\ 7/0:/ 3)Be o valor de :/ em 7/ 29D7,P1PA 95\ C/0PA 3)Be o valor PA em C/ 29D7,P1P& S16 7/0C/ 37eslo.a os A bits mais altos do n<mero ao nibble mais N direita 29D7,P1PF +77 7/0@P 3+di.iona @P a 7/ 29D7,P1P: C9) 7/0@+ 3Com!ara 7l .om @+ 29D7,P1PE J/ P11@ 3Salta ao endere=o P11@0 se menor 29D7,P11P +77 7/0PD 3+di.iona PD a 7/ 29D7,P11@ I84 21 3Chama interru!=>o do 75S 29D7,P11 95\ 7/0:/ 3)Be o valor de :/ em 7/ 29D7,P11D +87 7/0PZ 34rans!orta fa(endo +87 dos n<meros bit a bit 29D7,P11+ +77 7/0@P 3+di.iona @P a 7/ 29D7,P117 C9) 7/0@+ 3Com!ara 7l .om @+ 29D7,P12P J/ P12 3Salta ao endere=o P120 se menor 29D7,P122 +77 7/0PD 3+di.iona PD a 7/ 29D7,P12 I84 21 3Chama interru!=>o do 75S 29D7,P12D I84 2P 3Zinali(a o !ro"rama Este !ro"rama im!rime o se"undo de dois dQ"itos heEade.imais. 7M.imo eEem!lo %a1PP 29D7,P1PP 95\ +10P1 3Zun=>o 1 #l* .ara.tere do te.lado$ 29D7,P1P2 I84 21 3Chama interru!=>o do 75S 29D7,P1PA 95\ 7/0+/ 3)Be o valor de +/ em 7/ 29D7,P1P& SU: 7/0@P 3Subtrai @P de 7/ 29D7,P1P9 C9) 7/0P9 3Com!ara 7/ .om P9 29D7,P1PC J/E P111 3Salta ao endere=o P1110 se menor ou i"ual 29D7,P1PE SU: 7/0PD 3Subtrai PD de 7/ 29D7,P111 95\ C/0PA 3)Be o valor PA em C/ 29D7,P11@ S1/ 7/0C/ 3Insere (eros N direita 29D7,P11 I84 21 3Chama interru!=>o do 75S 29D7,P11D SU: +/0@P 3Subtrai @P de +/ 29D7,P119 C9) +/0P9 3Com!ara +/ .om P9 29D7,P11: J/E P11Z 3Salta ao endere=o P11f0 se menor ou i"ual 29D7,P117 SU: +/0PD 3Subtrai PD de +/ 29D7,P11Z +77 7/0+/ 3+di.iona +/ a 7/ 29D7,P121 I84 2P 3Zinali(a o !ro"rama Este !ro"rama !ode ler dois dQ"itos heEade.imais. 7M.imo !rimeiro eEem!lo %a1PP 29D7,P1PP C+// P2PP 3Chama um !ro.edimento 29D7,P1P@ I84 2P 3Zinali(a o !ro"rama %a2PP 29D7,P2PP )US1 7] 3)Be o valor de 7] na !ilha 29D7,P2P1 95\ +10PF 3Zun=>o F 29D7,P2P@ I84 21 3Chama interru!=>o do 75S 29D7,P2P C9) +/0@P 3Com!ara +/ .om @P 29D7,P2PD J: P2P@ 3Salta se CZ M ativado ao endere=o P2P@ 29D7,P2P9 C9) +/0A& 3Com!ara +/ .om A& 29D7,P2P: J+ P2P@ 3Salta ao endere=o P2P@0 se diferente 29D7,P2P7 C9) +/0@9 3Com!ara +/ .om @9 29D7,P2PZ J+ P21: 3Salta ao endere=o P21:0 se diferente 29D7,P211 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P21@ 95\ 7/0+/ 3)Be o valor de +/ em 7/ 29D7,P21 I84 21 3Chama interru!=>o do 75S 29D7,P21D SU: +/0@P 3Subtrai @P de +/ 29D7,P219 )5) 7] 3EEtrai o valor de 7] da !ilha 29D7,P21+ 6E4 36etorna o .ontrole ao !ro"rama !rin.i!al 29D7,P21: C9) +/0A1 3Com!ara +/ .om A1 29D7,P217 J: P2P@ 3Salta se CZ M ativado ao endere=o P2P@ 29D7,P21Z 95\ +10P2 3Zun=>o 2 #es.reve um .ara.tere na tela$ 29D7,P22 95\ 7/0+/ 3)Be o valor +/ em 7/ 29D7,P22@ I84 21 3Chama interru!=>o do 75S 29D7,P22 SU: +/0@D 3Subtrai @D de +/ 29D7,P22D )5) 7] 3EEtrai o valor de 7] da !ilha 29D7,P22F 6E4 36etorna o .ontrole ao !ro"rama !rin.i!al Este !ro"rama se mantMm lendo .ara.teres atM re.eber um Cue !ossa ser .onvertido !ara um n<mero heEade.imal. %%%%%%%%%%%%%%% LL %%%%%%%%%%%%%%% D.2.EEem!los de )ro"ramas .om 4+S9 8esta se=>o forne.eremos a vo.* v?rios eEem!los de !ro"ramas a serem montados fa(endo uso do 4+S9 da :orland. )ro.edimento, )ara mont?%los0 si"a os se"uintes !assos, )rimeiro !asso 9ontar o !ro"rama )or eEem!lo, C,_`tasm one.asm 4urbo +ssembler \ersion 2.P Co!yri"ht #.$ 19FF0 199P :orland International +ssemblin" file, one.asm Error messa"es, 8one Warnin" messa"es, 8one )asses, 1 6emainin" memory, AD1O C,_` Isto .riar? um !ro"rama objeto .om o mesmo nome do fonte0 neste .aso, one.obj Se"undo !asso Criar o !ro"rama eEe.ut?vel )or eEem!lo, C,_`tlinO one.obj 4urbo /inO \ersion @.P Co!yri"ht #.$ 19FD0 199P :orland International C,_` Isto .ria o !ro"rama eEe.ut?vel .om o mesmo nome do objeto e .om eEtens>o diferente0 one.eEe 4er.eiro !asso 6odar o !ro"rama eEe.ut?vel. :asta di"itar o nome do !ro"rama .riado.
EEem!los de )ro"ramas +ssembly )rimeiro eEem!lo 3nome do !ro"rama, one.asm 3 .model small .sta.O ..ode mov +101h 3Zun=>o 1 do 75S Int 21h 3l* o .ara.ter e returna o .Kdi"o +SCII ao re"istrador +/ mov 7/0+/ 3move o .Kdi"o +SCII !ara o re"istrador 7/ sub 7/0@Ph 3subtrai de @Ph !ara .onverter a um dQ"ito de P a 9 .m! 7/09h 3.om!ara se o dQ"ito est? entre P e 9 jle di"it1 3se verdadeiro obtMm o !rimeiro n<mero #A bits$ sub 7/0Dh 3se falso0 subtrai de Dh !ara .onverter a uma letra +%Z di"it1, mov C/0Ah 3!re!ara !ara multi!li.ar !or 1& shl 7/0C/ 3multi!li.a !ara .onverter dentro dos A bits mais altos int 21h 3obtMm o !rKEimo .ara.ter sub +/0@Ph 3re!ete a o!era=>o de .onvers>o .m! +/09h 3.om!ara o valor 9h .om o .onte<do do re"istrador +/ jle di"it2 3se verdadeiro0 obtMm o se"undo dQ"ito sub +/0Dh 3se falso0 subtrai de Dh di"it2, add 7/0+/ 3adi.iona o se"undo dQ"ito mov +10ACh 3fun=>o ACh do 75S #eEit$ Int 21h 3interru!=>o 21h End 3finali(a o !ro"rama Este !ro"rama l* dois .ara.teres e os im!rime na tela Se"undo eEem!lo 3nome do !ro"rama, t2o.asm .model small .sta.O ..ode )6I84n+nJ )65C 95\ 7/0m+m 3move o .hara.ter + !ara o re"istrador 7/ 95\ C]01P 3move o valor de.imal 1P !ara o re"istrador C] 3este valor M usado !ara fa(er la=o .om 1P intera=Bes )6I84n/55), C+// W6I4EnC1+6 3Im!rime o .ara.ter em 7/ I8C 7/ 3In.rementa o valor do re"istrador 7/ /55) )6I84n/55) 3/a=o !ara im!rimir 1P .ara.teres 95\ +10ACh 3Zun=>o ACh0 !ara sair ao 75S I84 21h 3Interru!=>o 21h )6I84n+nJ E87) 3Zinali(a o !ro.edimento W6I4EnC1+6 )65C 95\ +102h 3Zun=>o 2h0 im!rime .ara.ter I84 21h 3Im!rime o .ara.ter Cue est? em 7/ 6E4 36etorna o .ontrole ao !ro.edimento Cue .hamou W6I4EnC1+6 E87) 3Zinali(a o !ro.edimento E87 )6I84n+nJ 3Zinali(a o !ro"rama Este !ro"rama mostra os .ara.teres +:C7EZG1IJ na tela. 4er.eiro eEem!lo 3nome do !ro"rama, three.asm .model small .S4+C^ ..ode 4ES4nW6I4En1E] )65C 95\ 7/0@Zh 39ove o valor @Zh !ara o re"istrador 7/ C+// W6I4En1E] 3Chama a sub%rotina 95\ +10AC1 3Zun=>o ACh I84 21h 36etorna o .ontrole ao 75S 4ES4nW6I4En1E] E87) 3Zinali(a o !ro.edimento )U:/IC W6I4En1E] 3........................................................3 3Este !ro.edimento .onverte !ara heEade.imal o byte 3 3arma(enado no re"istrador 7/ e mostra o dQ"ito 3 3Use,W6I4En1E]n7IGI4 3 3........................................................3 W6I4En1E] )65C )US1 C] 3.olo.a na !ilha o valor do re"istrador C] )US1 7] 3.olo.a na !ilha o valor do re"istrador 7] 95\ 7107/ 3move o valor do re"istrador 7/ !ara o re"istrador 71 95\ C]0A 3move o valor A !ara o re"istrador C] S16 7/0C/ C+// W6I4En1E]n7IGI4 3mostra na tela o !rimeiro n<mero heEade.imal 95\ 7/071 3move o valor do re"istrador 71 !ara o re"istrador 7/ +87 7/0PZh C+// W6I4En1E]n7IGI4 3mostra na tela o se"undo n<mero heEade.imal )5) 7] 3retira da !ilha o valor do re"istrador 7] )5) C] 3retira da !ilha o valor do re"istrador C] 6E4 36etorna o .ontrole ao !ro.edimento Cue .hamou W6I4En1E] E87) )U:/IC W6I4En1E]n7IGI4 3......................................................................3 3Este !ro.ediento .onverte os A bits mais baiEos do re"istrador 7/ 3 3!ara um n<mero heEade.imal e o mostrana tela do .om!utador 3 3Use, W6I4EnC1+6 3 3......................................................................3 W6I4En1E]n7IGI4 )65C )US1 7] 3.olo.a na !ilha o valor de 7] C9) 7/01P 3.om!ara se o n<mero de bits M menor do Cue 1P J+E 1E]n/E44E6 3se n>o0 salta !ara 1E]n/E4E6 +77 7/0[P[ 3se sim0 .onverte !ara n<mero J9) Short W6I4En7IGI4 3es.reve o .ara.ter 1E]n/E44E6, +77 7/0[+[%1P 3.onverte um .ara.ter !ara heEade.imal W6I4En7IGI4, C+// W6I4EnC1+6 3im!rime o .ara.ter na tela )5) 7] 36etorna o valor ini.ial do re"istrador 7] 3!ara o re"istrador 7/ 6E4 36etorna o .ontrole ao !ro.edimento Cue .hamou W6I4En1E]n7IGI4 E87) )U:/IC W6I4EnC1+6 3......................................................................3 3Este !ro.edimento im!rime um .ara.ter na tela usando o 7.5.S. 3 3......................................................................3 W6I4EnC1+6 )65C )US1 +] 3Colo.a na !ilha o valor do re"istarador +] 95\ +102 3Zun=>o 2h I84 21h 3Interru!=>o 21h )5) +] 3EEtrai da !ilha o valor de +] 6E4 36etorna o .ontrole ao !ro.edimento Cue .hamou W6I4EnC1+6 E87) E87 4ES4nW6I4En1E] 3Zinali(a o !ro"rama Vuarto eEem!lo 3nome do !ro"rama, four.asm .model small .sta.O ..ode 4ES4nW6I4En7ECI9+/ )65C 95\ 7]012@A 39ove o valor de.imal 12@A !ara o re"istrador 7] C+// W6I4En7ECI9+/ 3Chama o !ro.edimento 95\ +10AC1 3Zun=>o ACh I84 21h 3Interru!=>o 21h 4ES4nW6I4En7ECI9+/ E87) 3Zinali(a o !ro.edimento )U:/IC W6I4En7ECI9+/ 3.................................................................3 3Este !ro.edimento es.reve um n<mero de 1& bit .omo um n<mero 3 3sem sinal em nota=>o de.imal 3 3Use, W6I4En1E]n7IGI4 3 3.................................................................3 W6I4En7ECI9+/ )65C )US1 +] 3)Be na !ilha o valor do re"istrador +] )US1 C] 3)Be na !ilha o valor do re"istrador C] )US1 7] 3)Be na !ilha o valor do re"istrador 7] )US1 SI 3)Be na !ilha o valor do re"istrador SI 95\ +]07] 3move o valor do re"istrador 7] !ara +] 95\ SI01P 3move o valor 1P !ara o re"istrador SI ]56 C]0C] 3(era o re"istrador C] 858ncE65, ]56 7]07] 3(era o re"istrador C] 7I\ SI 3divi(>o entre SI )US1 7] 3)Be na !ilha o valor do re"istrador 7] I8C C] 3in.rementa C] 56 +]0+] 3n>o (ero J8E 858ncE65 3salta !ara 858ncE65 W6I4En7IGI4n/55), )5) 7] 36etorna o valor em modo reverso C+// W6I4En1E]n7IGI4 3Chama o !ro.edimento /55) W6I4En7IGI4n/55) 3loo! E87n7ECI9+/, )5) SI 3retira da !ilha o valor do re"istrador SI )5) 7] 3retira da !ilha o valor do re"istrador 7] )5) C] 3retira da !ilha o valor do re"istrador C] )5) +] 3retira da !ilha o valor do re"istrador +] 6E4 36etorna o .ontrole ao !ro.edimento Cue .hamou W6I4En7ECI9+/ E87) 3Zinali(a o !ro.edimento )U:/IC W6I4En1E]n7IGI4 3......................................................................3 3 3 3Este !ro.edimento .onverte os A bits mais baiEos do re"istrador 7/ 3 3num n<mero heEade.imal e os im!rime 3 3Use, W6I4EnC1+6 3 3......................................................................3 W6I4En1E]n7IGI4 )65C )US1 7] 3)Be na !ilha o valor do re"istrador 7] C9) 7/01P 3Com!ara o valor 1P .om o valor do re"istrador 7/ J+E 1E]n/E44E6 3se n>o0 salta !ara 1E]n/E4E6 +77 7/0[P[ 3se M0 .onverte em dQ"ito numMri.o J9) Short W6I4En7IGI4 3es.reve o .ara.ter 1E]n/E44E6, +77 7/0[+[%1P 3.onverte um .ara.ter !ara um n<mero heEade.imal W6I4En7IGI4, C+// W6I4EnC1+6 3mostra o .ara.ter na tela )5) 7] 36etorna o valor ini.ial !ara o re"istrador 7/ 6E4 36etorna o .ontrole ao !ro.edimento Cue .hamou W6I4En1E]n7IGI4 E87) )U:/IC W6I4EnC1+6 3......................................................................3 3Este !ro.edimento im!rime um .ara.ter na tela usando uma fun=>o 7.5.S.3 3......................................................................3 W6I4EnC1+6 )65C )US1 +] 3)Be na !ilha o valor do re"istrador +] 95\ +102h 3Zun=>o 2h I84 21h 3Interru!=>o 21h )5) +] 36etira da !ilha o valor ini.ial do re"istrador +] 6E4 36etorna o .ontrole ao !ro.edimento Cue .hamou W6I4EnC1+6 E87) E87 4ES4nW6I4En7ECI9+/ 3finali(a o !ro"rama Este !ro"rama mostra na tela os n<meros 12@A Vuinto eEem!lo 3nome do !ro"rama, five.asm .model small .sta.O ..ode )6I84n+SCII )65C 95\ 7/0PPh 3move o valor PPh !ara o re"istrador 7/ 95\ C]02 3move o valor de.imal 2 !ara o re"istrador C] 3usado !ara fa(er um la=o .om 2 intera=Bes )6I84n/55), C+// W6I4EnC1+6 3Chama o !ro.edimento Cue im!rime I8C 7/ 3In.rementa o valor do re"istrador 7/ /55) )6I84n/55) 3/oo! !ara im!rimir 1P .ara.teres 95\ +10ACh 3Zun=>o ACh I84 21h 3Interru!=>o 21h )6I84n+SCII E87) 3Zinali(a o !ro.edimento W6I4EnC1+6 )65C 95\ +102h 3Zun=>o 2h !ara im!rimir um .ara.ter I84 21h 3Im!rime o .ara.ter Cue est? em 7/ 6E4 36etorna o .ontrole ao !ro.ediemento Cue .hamou W6I4EnC1+6 E87) 3Zinali(a o !ro.edimento E87 )6I84n+SCII 3Zinali(a o !ro"rama Este !ro"rama mostra na tela o valor dos 2& .ara.teres do .Kdi"o +SCII. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' C+)G4U/5 F, :I:/I5G6+ZI+ CrMditos, 9oni.o :riseoo C.0 En"enheiro IdMia 5ri"inal 7esenvolvimento e Im!lementa=>o da edi=>o 199& 1u"o Eduardo )Mre( ). 7esenvolvimento e Im!lementa=>o da edi=>o 199 \Q.tor 1u"o +vila :. \ers>o In"lesa Jeferson :otelho do +maral \ers>o )ortu"uesa +na 9arQa )era(a )ro"ramadora de /in"ua"em +ssembly Gra.iela Sal.edo 9an.illa )ro"ramadora 4.lL4O Juan 5lmos 9onroy 7esi"ner Gr?fi.o
6efer*n.ias :iblio"r?fi.as, +ssembly /an"ua"e Zor I:9 9i.ro.om!uters J. 4erry Godfrey )renti.e 1all 1is!anoameri.ana0 S.+. 9eEi.o :asi. +ssembler +. 6ojas Ed Com!ute. Editores S.+. de C.\. 9eEi.o I:9 )ersonal Com!uter +ssembly /an"ua"e 4utorial Joshua +uerba.h ;ale University 5r"ani(a=>o Estruturada de Com!utadores +ndre2 S. 4anenbaum )renti.e 1all do :rasil Guia do )ro"ramador !ara as )la.as EG+ e \G+ 6i.hard Z. Zerraro Ed. Ci*n.ia 9oderna )ro"ramando em +ssembler FPF&LFPFF Jeremias 6. 7. )ereira dos Santos Edison 6aymundi Junior 9.Gra2%1ill +ssembly I:9 )C % 4M.ni.as de )ro"rama=>o +lan 6. 9iller E:6+S0 Editora :rasileira /in"ua"em +ssembly !ara I:9 )C )eter 8orton John So.ha Editora Cam!us C % CaiEa de Zerramentas Carlos +u"usto ). Gomes +ntonio Carlos :arbosa Editora Sri.a Interru!=Bes 9S%75S0 659%:I5S Euri.o Soalheiro :r?s 9.Gra2%1ill 7esenvolvimento de Soft2are :?si.o /eland /. :e.O Editora Cam!us )ro"rama=>o +ssembly FP@F& % Guia )r?ti.o !ara )ro"ramadores 6oss ). 8elson 9.Gra2%1ill