Assembly Programozás Gyakorlat 2011

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

2015.03.20.

Assemblyprogramozsgyakorlat2011

1.Gyakorlat

Szmrendszerek
Szmokkonvertlsa2es,10es,16osszmrendszerekkztt.Pl:
77d=1001101b=4Dh
185d=10111001b=0B9h
BEDh=101111101101b=3053d
19,625d=10011,101b
114,25d=1110010,01b

Hnyklnbzszmfejezhetkindarabbinrisszmjegyen?
Helyikalegnagyobb?
Harazalap?
Mveletek
sszeads,kivons2es,16osszmrendszerben.
Negatvszmok:1es,2eskomplemens.
Memriakezels
Szegmens:offszetcmzs:Lineriscm=segm*16+offs.
segm:1272h===>*16===>12720h
offs:1a3bh+1a3bh

1415bhlineriscm

Egylineriscmnekhnylogikai(szegmens:offszet)cmevan?
Mondjunkolyanlogikaicmeket,melyekaz12345hlineriscmremutatnak!Miahelyzet
a0ffffh:0010hcmmel?
Miaklnbsgalineriscmsafizikaicmkztt?
Cmzs
Kdbaptettadat
Cmzs:[BXv.BP]+[SIv.DI]+[rel8v.rel16]

Alaprtelmezettszegmens:DS,vagyBPhasznlataesetnSS.Szegmensfellbrlssal
CS,DS,ES,SSelrhet.Alternatvjellsmdok:[BX][SI],vagy04h[BX]
Cmzsek
Melyikcmzshelyessmelyiknem?
[12h+56h]
ES:[09D3h]
[
123456789ABCh]
[SI+DI]
[IP]
[SI500d]
[AX]
SS:[BX+DI+1999d]
[CX+1234h]
[SP+BP]
DS:[BP+SI]
IP:[0000h]

2.gyakorlat
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

1/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

TurboDebugger
Csomagoldkiatasm.zipllomnytegytetszlegesknyvtrba.Atd.exetkellelindtani.
MASM
AMASMelrhetakabinetesgpeken.AMASMhasznlata.
sszeadas
Tegykfelhogyakvetkezpldkbanazadatszegmensnkgynzki:
ds:0000CD20FF9F009AF0FE
moval,[0];al=CD
movax,[0];ax=20CDBjtsorrend!!
movax,5h;ax=0005h
addal,0001h;ax=0006h
movax,5h
addal,[0001h];ax=0025h
movax,5h
movbx,6h
addax,bx;ax=000Bh
movax,5h
movbx,6h
addax,[bx];ax=FEF5h

Adjunk ssze egy 8 bites eljeles szmot s egy 16 bites eljeltelen szmot! Pldul a
10dtsa2525dt.
moval,10d;al=0f6h
movbx,2525d;bx=09ddh
cbw;ax=0fff6h
addax,bx;ax=09d3h

Szorzs
movax,0102h
movcx,0003h
mulcl;ax=0006h
movax,0102h
movcx,0003h
mulcx;dxax=00000306h
movax,0202h
movsi,0003h;ds:0003=9fh
mulbyteptr[si];ax=013eh
movax,0602h
movsi,0003h;ds:0003=9f00h
mulwordptr[si];0602h*009fh=0003bb3eh

Eljelesszorzs:
moval,2d;al=0feh
movcl,3d;cl=03h
imulcl;ax=fffah

Szorozzunksszeegy8biteseljeles,ill.egy16biteseljelesszmot!Pldula2dts
a520dt.
moval,2d;al=0feh
cbw;ax=0fffeh
movcx,520d;cx=0fdf8h
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

2/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

imulcl;dxax=00000410hazaz1024d

3.gyakorlat

Feladat
rjunk egy programrszletet, amely kiszmolja az albbi kifejezs rtkt! Feltesszk,
hogy minden regiszter eljeltelen szmot tartalmaz s minden mvelet eredmnye elfr
16biten.Azeredmnyttroljukaxben.
(cx+ax)*bx
bx*dx+ax
ax*ax+bx*bx
Gyakorls
Legyena8biteseljeles(pl.2),b16biteseljeles(3),sc8biteseljeltelen(130d)
szm.Adjuksszeket!
Oszts
movax,0007h
movcx,0003h
divcl;ax=0102h

Osszukela1234ht00hval!Mifogtrtnni?
Osszukela1234ht03hval!
Feladat
Legyenasb8biteseljeltelen,cpedig16biteseljeles.Szmoljukkia(a*b+c)/b
kifejezst!
4.gyakorlat

Felttelesugrsok
Szmoljukkiakvetkezkifejezsrtkt!AzeredmnythelyezzkAXregiszterbe!
AX:=min(a*c,a+b)
adatsegment
adb4;elojeltelen
cdb3;elojeltelen
bdw9;elojeltelen
adatends

Oldjukmegafeladatoteljelesszmokrais!Tovbbikifejezsek:
AX:=max(a+b,a+c)
AX:=mid(a,b,c)
AX:=(a+b)==c?a:b+c
AX:=abs(a+b)
5.gyakorlat

resassemblyprogram
Az res assembly program nem tartalmaz mst, mint azokat a ktelez utastsokat,
amelyekaprogramelindulshozsbefejezdshezkellenek.
Sztringhossza
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

3/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

Szmoljukmeg,hogymilyenhosszegysztring!Tegykfel,hogyasztringeta0karakter
zrja.Azadatszegmensnkakvetkez:
adatsegment
hahostrdb"Haho!",0
adatends

Ateljesforrskdletlthetinnen.
TurboDebugger
TurboDebugger(TASM)hasznlata.AhhozhogyaDebuggerbenaforrsprogramunkat
islssuk,akvetkezkppenkellafordtstsalinkelstvgezni(%1aforrsfileneve
kiterjesztsnlkl)
tasm/zd%1.asm
tlink/v%1.obj

Debuggols:td.exe
MASM
AMASMelrhetakabinetesgpeken.AMASMhasznlata. A fordts menete MASM
hasznlatval:
masm%1.asm,,,,
link%1.obj,,,,

Debuggols:debug
Feladatok
Oldjukmegazalbbifeladatokatasztringhosszaprogramtrsval!
1. Szmoljukmeg,hogyhnydarab"a"betvanegykarakterlncban!
2. Cserljnkleegystringminden"a"betjt"b"betre.
3. Titkosts: Cserljnk ki minden bett (AZ, s az) az "x" betre, az egyb
karakterekethagyjukmeg.
4. Cserljnk le egy string minden kisbetjt nagybetre (UPPER CASE). Mit kell
mdostaniaprogramon,hogyanagybetkbllegyenekkisbetk?(lowercase)
5. Invetljukakissnagybetketegykaraktersorozatban.(iNVERTcASE)
6. Aszavakelsbetjtlltsuknagybetsre,atbbirsztpedigkisbetsre.Aszavakat
szkzkvlasztjkel.(ProperCase)
Szvegkirsa
rjunkeljrst,amelykirjaazALbentallhatkaraktertakpernyre.
;eljrsamikiregyetlenbett.abetkdjtalben
;vrja
betukiirproc;albenakiirandbet
movah,14;BIOSrutinparamtere
int10h;10hmegszaktshvsa
ret;visszatrs
betukiirendp

rjunkeljrst,amikiregy0valzrdkarakterlncotakpernyre!
;eljrsamikiregy0valzrdkarakterlncot
;astringelejtsimutatja
strkiirproc
kov:moval,[si];kvetkezbet
cmpal,0;0jelziastrvgt
jestrvege;haelrtnkavgreugrunk
callbetukiir;egybetkiirsa
incsi;mutatakvetkezbetre
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

4/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

jmpkov;ugrs
strvege:
ret;eljrsvge
strkiirendp

Ateljesforrskdletlthetinnen.
6.gyakorlat

Szmkirsa
rjunk ki egy eljeltelen 16 bites szmot decimlis alakban a kpernyre! Algoritmus: a
szmotosztjuktzzel.Amaradkotkirjuk,ahnyadostpedigtovbbosztjuk.
;eljrs,amikiregyszmotdecimlisalakban
;aszmotaxregiszterbenvrja
szamkiirproc
movbx,10d;szmrendszeralapja
movcx,0;verembetettszmokszmllja
k1:
cmpax,0;addigosztunkamgnullanemlesz
jev1;hanullaugrik
movdx,0;akovut.dx:axetosztja!
divbx;osztsbx
pushdx;maradekaverembe
inccx
jmpk1
v1:
jcxzcxnulla;ugrik,hanemtettnksemmitaverembe
k2:
popax;kivesznkegyrtketaverembl
addal,'0';hozzadjuka'0'ASCIIkdjt
callbetukiir;kirjukaszmot(mintbett)
loopk2;jhetakvetkez
jmpv2
cxnulla:
moval,'0';haaxben0volt,
callbetukiir;rjunkkiegy0t
v2:
ret
szamkiirendp

Ateljesforrskdletlthetinnen.Feladatok:
1. rjuktaprogramot,hogy8bitesszmokatrjonkiakpernyre.
2. rjuktaprogramot,hogymsszmrendszerbeniskitudjonrniszmokat.
3. rjuktaprogramot,hogyeljelesszmotiskitudjonrni.
Maximum
Keressk meg egy bjtokbl ll szmsorozat legnagyobb elemt! A szmsorozat
hosszt a len vltoz tartalmazza. Az eredmnyt taroljuk a max vltozban. Az
adatszegmensplakvetkezislehet:
adatsegment
lendw5
maxdb0
sordb4,5,2,7,3
adatends

Feladatok:
1. Mdostsuk a maximum keres programot hogy szavakbl (dupla bjt) ll
szmsorozatraismkdjn.
2. Mdostsukamaximumkeresprogramotminimumkeresprogramra!Azazkeressk
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

5/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

megasorozatlegkisebbelemt.Figyeljnkamegfelelkezdrtkekre!
3. Egsztsk ki a maximum keres programot, hogy a legnagyobb szm els/utols
elfordulsihelyta"pos"vltozbantroljuk!
7.gyakorlat

Stringbeolvassbillentyzetrl
Irjunkegyeljrst,amiabillentyzetrlbeolvasegysztringetegybufferbe.
;eljrsamibeolvasegystringetazSIaltalmutatottbufferbe
strolvasproc
pushsi;simentse
olv:
movah,1h;bioseljrssorszma
int21h;biosinterrupt
cmpal,0dh;enterkdja
jeolvasvege
mov[si],al;bettrolsaamemriban
incsi;akvetkezbetegyelmagasabbmem.cmrekerljn
jmpolv;visszaazolvasselejre
olvasvege:
movbyteptr[si],0;astringveget0vallezrjuk

movax,0e0ah;jsorkarakterkirsa
int10h

popsi
ret
strolvasendp

Stringfordts
Fordtsunk meg egy stringet! rjunk eljrst, amely egy string tartalmt megfordtja. Az
eljrsSIregiszterbenvrjaastringelejt.Kiindulsiforrs:strford.asm.
Oldjukmegafeladatotaveremhasznlatanlkl!
Hasznljukavermetamegoldshoz!
Hasznljukasztingkezelutastsokat
8.gyakorlat

Paramterekaveremben!
rjukegyeljrstamelysszead2szmot.Aparamtereketaverembenadjukt!
...
movax,2d
pushax
movax,4d
pushax
callosszead
addsp,4
...
osszeadproc
pushbp;bpmentse
movbp,sp;veremteteje
pushbx;bxmentse

movbx,[bp+4];2.paramter
movax,[bp+6];1.paramter
addax,bx;sszeads
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

6/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

popbx;bxvisszatltse
popbp;bpvisszatltse
ret
osszeadendp

Ateljesforrskdletlthetinnen.
tlag
rjunk egy eljrst, amely kiszmolja egy sorozat tlagt! Az eljrsnak 2 paramtere
legyen (melyeket a veremben kap): az els a sorozat offsetje, a msodik a sorozat
hossza.Kiindulsiforrsagyakorlatimunkhoz:atlag.asm
Skalrszorzat
rjunk eljrst, ami 2 n hosszsg vektor skalrszorzatt hatrozza meg! A
paramtereketavermenkeresztlkapja!Ateljesforrskdletlthetinnen.
9.gyakorlat

Rendezs
rjunkprogramot,sorbarendezegybjtokbllleljeltelenszmsorozatot.Mkdsielv:
a sorozat minden egyes elemre vgrehajtjuk a kvetkezket: vgigmegynk a
rkvetkezelemeken,shakisebbettallunkmintazaktulis,akkormegcserljkket.
;eljrsbxbenvrjaabjtsorozatelejt
;hatallazelselemnlkisebbelemet,akkor
;megcserliket
minproc
movdl,[bx];dlbenazelsoszm
movsi,bx;simutassonazelejre
k1:moval,[si];aktszmbetltse
cmpal,0;nulla?
jev1;haigen:vge
cmpal,dl;akt.szmsazeddigilegkisebb
jaek2;haazakt.nagyobbugorjunk
movdl,al;jegyezzkmegmertkisebb
xchgal,[bx];csere
mov[si],al;csere
k2:incsi;kvbet
jmpk1;
v1:ret;visszatrs
minendp
;eljrs,melyrendezegybjtsorozatot
rendezproc
k3:moval,[bx];aktszmbetlt
cmpal,0;nulla?
jev2;haigen:vge
callmin;tegykazelejrealegkisebbet
incbx;kvbet
jmpk3
v2:ret;eljrsvge
rendezendp

Ateljesforrskdletlthetinnen.Feladatok:rjuktaprogramotgyhogy,...
szmoljuk,hogyhnycseretrtnik,majdirassukkiacserkszmtkpernyre!
kirjaazeredetisarendezettsorozatotisakpernyre!
eljelesszmokatkezeljen!rjukmegaszamkiireljaraseljelesvltozattis!
16bitesszmokatkezeljen!
cskkensorrendberendezzeaszmokat!
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

7/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

ASCIItoInteger
rjukmegazatoi()fggvnyteljeltelenszmokra.Ateljesforrskdletlthetinnen.
movsi,[bp+4];parameteratvetele
movcx,10;szmrendszeralapja
movax,0;axbenlesznekarszeredmnyek
movbh,0;blbenleszazaktulisszmjegy,bhbanmegnulla
kovszamjegy:
movbl,[si];betltnkegybett
cmpbl,0;vgeeasztringnek?
jevege
subbl,'0';levonjaazelsszmjegyASCIIkdjt,megkapjukazrtkt
mulcx;eddigirszeredmnyx10
addax,bx;hozzadjukazaktulisszmjegyet
incsi;lpsakvbetre
jmpkovszamjegy
vege:

Feladatok:rjuktaprogramotgyhogy,...
hexadecimlis/binrisszmokramkdjn!
eljelesszmokatkezeljen!
lebegpontosszmokatiskezeljen!
GyakorlfeladatokZHra

Stringek
String esetn a kezdcm SI regiszterben van megadva, ill. a vgt a 0 jelzi. Az
eredmnyt(feltvehogyvan)AXbenkelltrolni.
1. Hatrozdmegazels"a"betpozcijt(azelsbetanulladik,amsodikazels,
stb...)!Hanincs"a"betastringbenlegyen1avisszatrsirtk!
2. Szmoldmeghnybetvanegystringbenaszkzksrsjeleknlkl!
3. Szmoldmeghnyszvanegysztringben.(duplaszkzkesetnaszavakszma
nemvltozik!)
4. Konvertldastringetcsupanagy,ill.kisbetsre!(Touppercase/tolowercase)
5. Egystringsszesnagybetjtvltsdkicsire,akicsiketpedignagyra!(Invertcase)
6. Mindenszkezdbetjtlltsdnagybetsre!(Capitalize)
7. Hatrozdmeghnykisbet(nagybet,szmkarakter,rsjel)vanaszvegben!
8. Hatrozd meg melyik bet hnyszor fordul el. (Pl. DI egy 256 elem tblzat elejt
mutatja)(hisztogram)
9. Hatrozdmeg,hogyaDIltalmutattotstringbetihnyszorfordulnakelsszesen!
10. Hatrozdmeg,hogyaDIltalmutattotstringhnyszorfordulel!
11. HatrozdmegaDIltalmutatottstringels/utolselfordulasnakpozcijt!(strstr)
12. Hatrozdmegaszismtlsekszmt!(na,ezmrdurva...)
Szmsorozatok,tmbk
SzmsorozatkezdcmeSIben,ahosszaCXbenvanmegadva.Azeredmnyt(feltve
hogyvan)AXbenkelltrolni.Asorozatleheteljeles/eljeltelen,8/16bites.
1. Hatrozdmeghnydarabszmesik100s200kz!
2. Hatrozdmegalegnagyobb/legkisebbszmot!
3. Hatrozdmegalegnagyobb/legkisebbszm(els/utolselfordulsnak)pozcijt!
4. Hatrozdmegalegnagyobb/legkisebbszmelfordulsainakszmt!
5. Szmoljtlagot/szrst.
6. Hatrozdmeghnyszorszerepelktegyformaszmegymsmellett!
7. Hatrozdmeghnyszorszerepelktegyformaabszolultrtkszmegymsmellett!
8. Hatrozdmeghnyszorszerepelndarabegyformaszmegymsmellett!
9. Hatrozdmeghnyneloszthatszmvanasorozatban!
data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

8/9

2015.03.20.

Assemblyprogramozsgyakorlat2011

10. Hatrozdmeghnyngyzetszmvanasorozatban!
11. Hatrozdmeghnyeljelvltstrtnikasorozatban!
12. Hatrozdmeg,hogyaszmsorozatnvekv/cskkensorrendbenvane!AXlegyen
1,haigen,klnben0.
13. Hatrozdmeg,hogyaszmsorozatszmtanisorozatotalkote.AXlegyen1,haigen,
klnben0.
14. Hatrozd meg, hogy a szmsorozat mrtani sorozatot alkot e. AX legyen 1, ha igen,
klnben0.
15. Hatrozdmeg,hogyaszmsorozatFobonaccisorozatotalkote.AXlegyen1,haigen,
klnben0.
16. Hatrozd meg, a leghosszabb nvekv/cskken rszsorozat hosszt. AX legyen 1,
haigen,klnben0.
neloszthatszmok
Szmoljukmeghnyneloszthatszmvanegysorozatban!
;eljrsamelyikmeghatrozza,h.hnyneloszthat
;szmvansorozatban.Azeredmnytaxbeteszi.
;1.param:16biteseljeltelensorozateleje
;2.param:hossz
;3.param:n
ndivproc
pushbp;bpmentse
movbp,sp;bp=si
pushsibxcxdx;regiszterekmentse
movsi,[bp+8];sorozateleje
movcx,[bp+6];hossz
movbx,0;szmoljaazneloszthatelemeket
kezd:
movax,[si];axbeasorkvetkezeleme
movdx,0;akv.divdx:axetosztja!
divwordptr[bp+4];osztunknel
cmpdx,0
jnenemoszthato
incbx;szmllnvel
nemoszthato:
addsi,2;kovelem
loopkezd
movax,bx;eredmnyaxbe
popdxcxbxsi;regiszterekvisszatltse
popbp
ret
ndivendp

Ateljesforrskdletlthetinnen.

data:text/htmlcharset=utf8,%3Ch4%20style%3D%22fontfamily%3A%20Verdana%2C%20Arial%2C%20sansserif%3B%20fontsize%3A%2014px%3B

9/9

You might also like