Elérhető anyagok
A bemutatott HelloAsm.asm file elérhető ezen a linken.
A bemutatott HelloAsm.asm file elérhető ezen a linken.
Az Irvine fejlesztőcsomag sok függvényt biztosít számunkra a könnyebb fejlesztés érdekében. Így például számok, sztringek kiíratása képernyőre, vagy bekérése billentyűzetről, képernyőtörlés, sztring hosszának lekérése, késleltetés egy adott parancs végrehajtása előtt, stb. Ha a megvalósított függvényeket szeretnénk használni, nincs más teendőnk, mint be include-olni az Irvine32.inc fájlt, majd megfelelő módon meghívni az adott függvényt. A megvalósított függvényekkel részletesebben később foglalkozunk. Vegyük a következő programot (HelloAsm.asm) példaként (ne felejtsük el, hogy a sorszámozás nem része a programnak):
Az adat szegmensben egy sztring (HelloTxt, 5.sor) és egy duplaszó (A, 6.sor) számára történt területfoglalás. A HelloTxt-t a 12., míg az A-t a 16. sorban íratjuk ki a képernyőre. Ennek megfelelően a képernyőn az alábbi kell, hogy megjelenjen:
Feladatok:
1. Nyissuk meg a HelloAsm.asm fájlt a projektünkben. Fordítsuk, majd futtassuk le.
2. Lépkedjünk végig a programon debug módban, nyomkövetéssel.
a. Figyeljük meg, hogy melyik regiszter értéke hogyan változik a futás közben!
b. Figyeljük a terminált is, hogyan kerülnek egymás után végrehajtásra a kiíratások az adott függvényhívások hatására!
3. Helyezzünk el egy töréspontot (breakpoint) a main függvény valamely sorában, és csak attól a ponttól kezdve lépkedjünk végig nyomkövetéssel a programon. Ha már nem szeretnénk nyomkövetést alkalmazni:
a. Állítsuk le a program futását kézileg (Shift + F5), vagy
b. lépjünk ki a debug módból és folytassuk úgy a program futtatását.
4. Helyezzünk valamilyen hibát szándékosan a kódba (pl. rontsuk el valahol egy parancselírással). Fordítsuk a programot.
a. Nézzük meg milyen hibaüzenetet kapunk.
b. Majd nézzük meg a lista fájlban is, hogy milyen visszajelzést kaptunk a hibáról.
5. Írjuk át az A változónak adott értéket hexadecimálisról binárisra vagy decimálisra (az átadott érték után elhelyezett b vagy d betű segítségével). Majd figyeljük meg, most miként változik az EAX regiszter értéke. Nagyobb számértékek használata esetén nem egyforma értéket látunk az EAX regiszterben megjelenítve, illetve a képernyőre kiíratva, vagy mégis?
6. Módosítsuk az adatszegmensben létrehozott A változó előjelét. Nézzük meg milyen hatásai vannak ennek a műveletnek ha DWORD vagy ha SDWORD adattípusként hoztuk létre.
7. Az Irvine32.inc fájlba belenézve megláthatjuk, milyen függvényeket tudunk még használni, többek között kiíratásra is. Válasszunk más számrendszerben való kiíratást és nézzük meg, miként változik a kiírt eredmény.
8. A sztring szövegét változtatva figyeljük meg a Disassembly listában a memória címeket. Hogyan változnak a memória címek a sztring hosszát módosítva? (Elsősorban a HelloTxt és az A változó címeinek különbségét figyelembe véve.)
Az alábbi linkre kattintva további beépített Irvine eljárásokat találhatunk, melyek használata hasznos lehet a félév folyamán, illetve a beadandó program elkészítésékor:
http://programming.msjc.edu/asm/help/index.html?page=source%2Fabout.htm
Szintaxis kiemelő Visual Studio-hoz (syntax highlighting):
#1: MASM syntax highlighting - Kip Irvine weboldala alapján (kiszínezi a regisztereket és típusokat is, viszont a kommenteket nem)
#2: AsmHighlighter - Visual Studio weboldala (telepítős, regisztereket és típusokat nem színezi ki, viszont megkülönbözteti a kommenteket)