Uma das principais caractersticas da linguagem Assembly consiste no acesso aos registradores da
CPU, desta forma, como primeiro passo importante conhecer os registradores utilizados nos
processadores Intel/AM para os computadores pessoais! A CPU possui alguns registradores internos,
entre eles A", #", C" e " $ue s%o registradores de uso geral! &stes registradores podem ser
referenciados modo completo, por e'emplo, A" ou tambm parcialmente, neste caso, de(emos
referenci)*los como, por e'emplo, A+ e A,! Abai'o est%o relacionados os registradores-
Registrador Funo Registrador Funo
A" Acumulador #" #ase
C" Contador " ados
. .egmento de ados &. .egmento &'tra
.. .egmento de Pilha C. .egmento de C/digo
#P Apontador da #ase .I 0ndice 1onte
I 0ndice estino .P Apontador de Pilha
IP Apontador da Pr/'ima Instru2%o 1 1lag
Programa DEBUG
3 debug um pe$ueno utilit)rio da linha de comando $ue permite a cria2%o e an)lise de pe$uenos
programas na linguagem Assembly! &le pode apenas criar ar$ui(os com a e'tens%o !com, e por causa das
caractersticas deste tipo de programa, eles n%o podem e'ceder os 45 6b e tambm de(em iniciar sempre
no endere2o 7877h, dentro do segmento especfico de mem/ria! 3s principais comandos do programa
debug s%o-
Comando Descrio
A Montar instru29es simb/licas em c/digo de m)$uina
Mostrar o conte:do de uma )rea da mem/ria
& &ntrar dados na mem/ria, iniciando num endere2o especfico
; <odar um programa e'ecut)(el na mem/ria
= ar nome a um programa
P Proceder, ou e'ecutar um con>unto de instru29es relacionadas
? .air do programa debug
< Mostrar o conte:do de um ou mais registradores
@ &'ecutar passo a passo as instru29es
U esmontar o c/digo de m)$uina em instru29es simb/licas
A ;ra(ar um programa em disco
@ambm poss(el (isualizar os (alores dos registradores internos da CPU usando o debug! Para
inici)*lo, basta digitar debug na linha de comando-
debug
Para criar um programa no debug, ser) usado inicialmente o comando BaB CassembleD e, em
seguida, o endere2o de incio do programa no segmento de mem/ria! Posteriormente, de(em ser
especificados os comandos dese>ados, por e'emplo-
a 100
MOV AX, 0002
MOV BX, 0004
ADD AX, BX
nop
8
Ap/s digitar o :ltimo comando do programa, pressionar a tecla enter duas (ezes para sair do modo
de edi2%o! A e'ecu2%o da aplica2%o criada pode ser realizada passo*a*passo atra(s do comando EtF, onde
tambm poss(el (isualizar o estado dos registradores ap/s cada instru2%o realizada!
&m $ual$uer momento poss(el (isualizar e alterar os (alores dos registradores atra(s do
comando ErF! 3utra alternati(a consiste em especificar o registrador dese>ado dentro do comando ErF, por
e'emplo-
r AX
=este caso, ap/s mostrar o (alor do registrador a', o programa tambm permite a altera2%o do seu
(alor! =o prompt mostrado digita*se o no(o (alor ou apenas tecle enter para manter o (alor atual, por
e'emplo-
r AX
AX 0002
:
3 pr/'imo e'emplo ir) mostrar uma pe$uena aplica2%o $ue permite repetir a e'ibi2%o da cadeia
de caracteres E3l) pessoalF conforme o (alor armazenado no registrador c'-
- a 100
0C1B:0100 JMP 125 ;Sa!a para o endere"o 125#
0C1B:0102
- e 102 $Oa pe%%oa&$ 0d 0a $'$
- a 125
0C1B:0125 MOV DX,0102 ;Cop(a a %!r(ng para reg(%!rador DX
0C1B:012) MOV CX,0001 ;*uan!a% +e,e% a %!r(ng %er- .o%!rada
0C1B:012B MOV A/,00 ;Cop(a o +aor 00 para reg(%!rador A/
0C1B:012D 123 21 ;Mo%!ra a %!r(ng
0C1B:0124 D5C CX ;Sub!ra( 1 de CX
0C1B:0160 JCX7 0164 ;Se CX 8 (gua a 0 %a!a para o endere"o 0164
0C1B:0162 JMP 012D ;Sa!a ao endere"o 012D
0C1B:0164 123 20 ;4(na(,a o progra.a
Criando aplicaes com o !A"#
3 =A.M um montador gratuito para a linguagem Assembly, com ele poss(el realizar o
processo de cria2%o de aplica29es! igite o e'emplo a seguir em um editor de te'to e sal(e o ar$ui(o com
o nome olapessoal!asm-
O9: 100#
.o+ d;,.%g
.o+ a#,0
(n! 21#
.o+ a#,4C#
(n! 21#
.%g db $Oa pe%%oa& <A%%e.b=>$,0D#,0A#,$'$
&m seguida utilizamos o montador para criar um programa e'ecut)(el-
na%. oape%%oa?a%. -o oape%%oa?@o.
G
Operaes Aritmticas
MAB Con!e: rea(,a u.a .u!(p(@a"Do en!re o @on!eEdo do a@u.uador AB
ou AX peo operando-Con!e, de+o+endo o re%u!ado no a@u.uador AX
@a%o a opera"Do !en#a en+o+(do AB @o. u. operando de ) b(!%, ou e. DX
e AX @a%o a opera"Do !en#a en+o+(do AX e u. operando de 1F b(!%?
D1V Con!e: Se o d(+(%or 8 de ) b(!%, o reg(%!rador AX de 1F b(!% 8
!o.ado @o.o d(+(dendo e %e o d(+(%or 8 de 1F b(!%, o par de
reg(%!radore% DX:AX %er- !o.ado @o.o d(+(dendo, !o.ando a paa+ra a!a
de DX e a ba(;a de AX? Se o d(+(%or Cor u. b=!e, en!Do o Guo@(en!e
%er- ar.a,enado no reg(%!rador AB e o re%!o e. A/? Se Cor u.a paa+ra,
en!Do o Guo@(en!e 8 ar.a,enado e. AX e o re%!o e. DX?
SAB de%!(no,Con!e: %ub!ra( o operador Con!e do de%!(no?
Primeiro exemplo
- a0100
20HD:0100 MOV AX,000F ;PIe o +aor 000F no reg(%!rador AX
20HD:0106 MOV BX,0004 ;PIe o +aor 0004 no reg(%!rador BX
20HD:010F ADD AX,BX ;Ad(@(ona BX ao @on!eEdo de AX
20HD:010) 123 20 ;4(na(,a o Progra.a
A En(@a @o(%a Gue e%!e progra.a Ca, 8 %a+ar do(% +aore% e. do(%
reg(%!radore% e ad(@(onar o +aor de u. ao ou!ro?
Segundo exemplo
- a100
0C1B:0100 J.p 125 ;Sa!a para o endere"o 125#
0C1B:0102 K5n!erL
- e 102 $/eo, /oM are =ou N$ 0d 0a $'$
- a125
0C1B:0125 MOV DX,0102 ;Cop(a a %!r(ng para reg(%!rador DX
0C1B:012) MOV CX,0004 ;*uan!a% +e,e% a %!r(ng %er- .o%!rada
0C1B:012B MOV A/,00 ;Cop(a o +aor 00 para reg(%!rador A/
0C1B:012D 123 21 ;Mo%!ra a %!r(ng
0C1B:0124 D5C CX ;Sub!ra( 1 de CX
0C1B:0160 JCX7 0164 ;Se CX 8 (gua a 0 %a!a para o endere"o 0164
0C1B:0162 JMP 012D ;Sa!a ao endere"o 012D
0C1B:0164 123 20 ;4(na(,a o progra.a
5%!e progra.a .o%!ra 15 +e,e% na !ea a %!r(ng de @ara@!ere%?
Terceiro exemplo
-a100
20HD:0100 MOV A/,01 ;4un"Do para .udar o @ur%or
20HD:0102 MOV CX,000H ;4or.a!a o @ur%or
20HD:0105 123 10 ;C#a.a (n!errup"Do do B1OS
20HD:010H 123 20 ;4(na(,a o progra.a
5%!e progra.a .uda o Cor.a!o do @ur%or?
Quarto exemplo
H
-a100
20HD:0100 MOV A/,01 ;4un"Do 1 <O @ara@!ere do !e@ado>
20HD:0102 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0104 CMP AB,0D ;Co.para %e o @ara@!ere (do 8 u. 52359
20HD:010F J27 0100 ;Se nDo 8, O u. ou!ro @ara@!ere
20HD:010) MOV A/,02 ;4un"Do 2 <e%@re+e u. @ara@!ere na !ea>
20HD:010A MOV DB,AB ;C#ara@!er !o Mr(!e on AB
20HD:010C 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0105 123 20 ;4(na(,a o progra.a
5%!e progra.a u%a a (n!errup"Do 21# do DOS? A%a dua% Cun"Ie% da .e%.a:
a pr(.e(ra O u. @ara@!ere do !e@ado <Cun"Do 1> e a %egundo e%@re+e
u. @ara@!ere na !ea? O progra.a O @ara@!ere% do !e@ado a!8
en@on!rar u. 52359?
Quinto exemplo
-a100
20HD:0100 MOV A/,02 ;4un"Do 2 <e%@re+e @ara@!ere na !ea>
20HD:0102 MOV CX,000) ;PIe o +aor 000) no reg(%!rador CX
20HD:0105 MOV DB,00 ;PIe o +aor 00 no reg(%!rador DB
20HD:010H 9CB BB,1 ;9o!a@(ona o b=!e e. BB u. b(! para a
e%Guerda
20HD:0100 ADC DB,60 ;Con+er!e o reg(%!rador de Cag para 1
20HD:010C 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0105 BOOP 0105 ;Sa!a %e CX P 0 para o endere"o 0105
20HD:0110 123 20 ;4(na(,a o progra.a
5%!e progra.a .o%!ra na !ea u. nE.ero b(n-r(o a!ra+8% de u. @(@o
@ond(@(ona <BOOP> u%ando a ro!a"Do do b=!e?
Sexto exemplo
-a100
20HD:0100 MOV A/,02 ;4un"Do 2 <e%@re+e @ara@!ere na !ea>
20HD:0102 MOV DB,BB ;PIe o +aor de BB e. DB
20HD:0104 ADD DB,60 ;Ad(@(ona o +aor 60 a DB
20HD:010H CMP DB,6A ;Co.para 6A @o. @on!eEdo de DB %e. aCe!--o
;apena% .od(C(@a o e%!ado do Cag de @arr=
20HD:010A JB 0104 ;%a!a ao endere"o 010C, %e Cor .enor
20HD:010C ADD DB,0H ;Ad(@(ona o +aor 0H a DB
20HD:0104 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0111 123 20 ;4(na(,a o progra.a
5%!e progra.a (.pr(.e u. +aor ,ero e. dQg(!o% #e;ade@(.a(%?
Stimo exemplo
-a100
20HD:0100 MOV A/,02 ;4un"Do 2 <e%@re+e @ara@!ere na !ea>
20HD:0102 MOV DB,BB ;PIe o +aor de BB e. DB
20HD:0104 A2D DB,04 ;3ran%por!a Ca,endo A2D do% nE.ero% b(! a b(!
20HD:010H ADD DB,60 ;Ad(@(ona 60 a D
20HD:010A CMP DB,6A ;Co.para D @o. 6A
20HD:010D JB 0112 ;Sa!a ao endere"o 0112, %e .enor
20HD:0104 ADD DB,0H ;Ad(@(ona 0H a DB
20HD:0112 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0114 123 20 ;4(na(,a o progra.a
5
5%!e progra.a 8 u%ado para (.pr(.(r do(% dQg(!o% #e;ade@(.a(%?
Oitavo exemplo
-a100
20HD:0100 MOV A/,02 ;4un"Do 2 <e%@re+e @ara@!ere na !ea>
20HD:0102 MOV DB,BB ;PIe o +aor de BB e. DB
20HD:0104 MOV CB,04 ;PIe o +aor 04 e. CB
20HD:010F S/9 DB,CB ;De%o@a o% 4 b(!% .a(% a!o% do nE.ero
;ao n(bbe .a(% R d(re(!a
20HD:010) ADD DB,60 ;Ad(@(ona 60 a DB
20HD:010B CMP DB,6A ;Co.para D @o. 6A
20HD:0105 JB 0116 ;Sa!a ao endere"o 0116, %e .enor
20HD:0110 ADD DB,0H ;Ad(@(ona 0H a DB
20HD:0116 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0115 123 20 ;4(na(,a o progra.a
5%!e progra.a (.pr(.e o pr(.e(ro de do(% dQg(!o% #e;ade@(.a(%?
Nono exemplo
-a100
20HD:0100 MOV A/,02 ;4un"Do 2 <e%@re+e @ara@!ere na !ea>
20HD:0102 MOV DB,BB ;PIe o +aor de BB e. DB
20HD:0104 MOV CB,04 ;PIe o +aor 04 e. CB
20HD:010F S/9 DB,CB ;De%o@a o% 4 b(!% .a(% a!o% do nE.ero
;ao n(bbe .a(% R d(re(!a
20HD:010) ADD DB,60 ;Ad(@(ona 60 a DB
20HD:010B CMP DB,6A ;Co.para D @o. 6A
20HD:0105 JB 0116 ;Sa!a ao endere"o 0116, %e .enor
20HD:0110 ADD DB,0H ;Ad(@(ona 0H a DB
20HD:0116 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0115 MOV DB,BB ;PIe o +aor de BB e. DB
20HD:011H A2D DB,04 ;3ran%por!a Ca,endo A2D do% nE.ero% b(! a
b(!
20HD:011A ADD DB,60 ;Ad(@(ona 60 a DB
20HD:011D CMP DB,6A ;Co.para D @o. 6A
20HD:0120 JB 0125 ;Sa!a ao endere"o 0125, %e .enor
20HD:0122 ADD DB,0H ;Ad(@(ona 0H a DB
20HD:0125 123 21 ;C#a.a (n!errup"Do do DOS
20HD:012H 123 20 ;4(na(,a o progra.a
5%!e progra.a (.pr(.e o %egundo de do(% dQg(!o% #e;ade@(.a(%?
Dcimo exemplo
-a100
20HD:0100 MOV A/,01 ;4un"Do 1 <O @ara@!ere do !e@ado>
20HD:0102 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0104 MOV DB,AB ;PIe o +aor de AB e. DB
20HD:010F SAB DB,60 ;Sub!ra( 60 de DB
20HD:0100 CMP DB,00 ;Co.para DB @o. 00
20HD:010C JB5 0111 ;Sa!a ao endere"o 0111, %e .enor ou (gua
20HD:0105 SAB DB,0H ;Sub!ra( 0H de DB
20HD:0111 MOV CB,04 ;PIe o +aor 04 e. CB
20HD:0116 S/B DB,CB ;1n%ere ,ero% R d(re(!a
20HD:0115 123 21 ;C#a.a (n!errup"Do do DOS
I
20HD:011H SAB AB,60 ;Sub!ra( 60 de AB
20HD:0110 CMP AB,00 ;Co.para AB @o. 00
20HD:011B JB5 0114 ;Sa!a ao endere"o 011C, %e .enor ou (gua
20HD:011D SAB AB,0H ;Sub!ra( 0H de AB
20HD:0114 ADD DB,AB ;Ad(@(ona AB a DB
20HD:0121 123 20 ;4(na(,a o progra.a
5%!e progra.a pode er do(% dQg(!o% #e;ade@(.a(%?
Dcimo primeiro exemplo
-a100
20HD:0100 CABB 0200 ;C#a.a u. pro@ed(.en!o
20HD:0106 123 20 ;4(na(,a o progra.a
-a200
20HD:0200 PAS/ DX ;PIe o +aor de DX na p(#a
20HD:0201 MOV A/,0) ;4un"Do )
20HD:0206 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0205 CMP AB,60 ;Co.para AB @o. 60
20HD:020H JB 0206 ;Sa!a %e C4 8 a!(+ado ao endere"o 0206
20HD:0200 CMP AB,4F ;Co.para AB @o. 4F
20HD:020B JA 0206 ;Sa!a ao endere"o 0206, %e d(Ceren!e
20HD:020D CMP AB,60 ;Co.para AB @o. 60
20HD:0204 JA 021B ;Sa!a ao endere"o 021B, %e d(Ceren!e
20HD:0211 MOV A/,02 ;4un"Do 2 <e%@re+e @ara@!ere na !ea>
20HD:0216 MOV DB,AB ;PIe o +aor de AB e. DB
20HD:0215 123 21 ;C#a.a (n!errup"Do do DOS
20HD:021H SAB AB,60 ;Sub!ra( 60 de AB
20HD:0210 POP DX ;5;!ra( o +aor de DX da p(#a
20HD:021A 953 ;9e!orna o @on!roe ao progra.a pr(n@(pa
20HD:021B CMP AB,41 ;Co.para AB @o. 41
20HD:021D JB 0206 ;Sa!a %e C4 8 a!(+ado ao endere"o 0206
20HD:0214 MOV A/,02 ;4un"Do 2 <e%@re+e @ara@!ere na !ea>
20HD:022 MOV DB,AB ;PIe o +aor AB e. DB
20HD:0226 123 21 ;C#a.a (n!errup"Do do DOS
20HD:0225 SAB AB,6H ;Sub!ra( 6H de AB
20HD:022H POP DX ;5;!ra( o +aor de DX da p(#a
20HD:022) 953 ;9e!orna o @on!roe ao progra.a pr(n@(pa
4