Assembly programozás gyakorlat 2014-2015/2

13. gyakorlat


Minta Nagy ZH

Megoldás ( Tartalmazza a B/4. feladat órán ismertetett megoldását is. )

JÖVŐ HÉTEN NAGY ZH!

Beadandó program beadási határidő május 3-ig (vasárnap), védés utolsó héten (gyakorlaton).





12. gyakorlat


Makrók és stuktúrák ( Németh Gábor )

Programok:

    Sturtúra létrehozása és használata: struc.asm

    Makró létrehozása és használata: macro.asm

    A gyakorlati anyag végén lévő feladatok megoldásai:

      Haromszog-egyenlőtlenség struktúrával: 3szog.asm

      Makró abszolút érték meghatározására: absmacro.asm

Beadandó program felvételi lehetőség április 26-ig (vasárnap).



MarkMyProfessor

A MarkMyProfessor egy weboldal, ahol oktatókat lehet értékelni. Van egy ETR-es értékelés is, de azt ki tudja mikor kapom meg, illetve sokan nem hisznek az ETR-en keresztül történő anoním értékelésben ("nem is értem miért").

Az alábbi linken elérhető az én adatlapom is. Itt az értékelőknek ki kellene választania az "Assembly programozás gyakorlat"-ot a tanított tárgyak közül és utána értékelni, majd az Értékelem gomb lenyomásával véglegesíteni.

Pl.: ilyen és ehhez hasonló érvek alapján: megtartottam-e az órákat, értelmesen adtam-e elő, tudtam is az anyagot vagy csak össze vissza beszéltem, lehetett-e kérdezni, tudtam-e válaszolni a kérdésekre, igyekeztem-e segítséget nyújtani ZH-kon, mennyire voltam segítőkész órákon/órák után/hét közben, válaszoltam-e az email-ekre, mennyire voltak élvezhetőek az órák, mennyire voltam jó arc, stbstb..

Szeretném kérni, hogy a szöveges megjegyzéshez is írjatok mindenképpen valamit, mivel csak úgy van igazán értelme, a számok nem sokat mondanak. :)





11. gyakorlat


Eljárások paramétereinek átadása ( Németh Gábor )

Programok:

    Paraméter átadás szabványos adatterületen: param.asm

    Paraméter átadás vermen keresztül: vparam.asm

    A gyakorlati anyag végén lévő feladatok megoldásai:

Jövő héten 4. kis ZH!

    Semmi újdonság, ugyanaz várható, mint ami a 3. kis ZH-ban is volt. A 8. gyakorlatnál leírt ZH összefoglaló érvényes most is.





10. gyakorlat


Tavaszi szünet!

Otthoni gyakorlásra: 8-szomszédságú összefüggő komponensek keresése (röviden: hogyan ragasszuk össze a széttört húsvéti tojás haját...) PS.: nerd joke.. Happy Easter!





9. gyakorlat


3. kis ZH

Példák sztringek kezelésére ( Németh Gábor )

Programok:

A gyakorlati anyag végén lévő feladatok megoldásai:

    Eljárás, amely egy string tartalmát megfordítja, verem használata nélkül: strinv.asm

    Eljárás, amely egy string tartalmát megfordítja, verem használatával: strinvsp.asm


Kiegészítés az órai anyaggal kapcsolatban:

    CLD: az operandus nélküli CLD (CLear Direction flag) a DF flag-et törli. Emlékeztető: ha DF = 0, a string műveletek iránya növekvő, ha DF = 1, akkor pedig csökkenő.





8. gyakorlat


( 2. kis ZH feladatainak átbeszélése )

Példák számok kiírására ( Németh Gábor )

Programok:

Jövő héten 3. kis ZH!

A gyakorlati anyag végén lévő feladatok megoldásai: gyak08_1.asm , gyak08_2.asm , gyak08_3.asm

A minta ZH feladatainak megoldásai: ZH03.asm


Összefoglaló a 3. kis ZH-ra:

    Tehát lesz egy 3 pontos feladat: vagy egy karaktersorozaton ( gyak07.asm ), vagy egy számsorozaton ( sormax.asm , gyak08_1.asm , gyak08_2.asm , gyak08_3.asm ) kell műveleteket végezni.

    Valamint egy 2 pontos feladat: egy összetettebb aritmetikai műveletsorozat, mint amit már eddig is láttunk, adott adatszegmens tartalom mellett.

    És természetesen a ZH03.asm minta ZH megoldás átnézése ajánlott, ha már arra fog hajazni a ZH.

    Megjegyzés: igyekezzünk ne csak átnézni a kódokat, hanem megpróbálni újraoldani a feladatokat, de minimum másolva újra írni (Tényleg sokat tud segíteni, ha nem is oldjuk újra, de legalább lemásoljuk egyszer-kétszer a lényegi részt). Nézegetéssel nem lehet programozni tanulni. (Célzás a ZH-k javítása közben leszűrt hibák alapján.)


Kiegészítés az órai anyaggal kapcsolatban:

    STOSB: Karakter eltárolását a STOSB (STOre String Byte) intézi el. Működése: AL-t eltárolja az ES:DI címre, majd DI-t megnöveli eggyel, ha DF = 0, illetve csökkenti, ha DF = 1. A STOSW (STOre String Word) utasítás, hasonlóan a LODSW-hez, AX-szel dolgozik, és DI-t 2-vel növeli vagy csökkenti. Emlékeztető: ha DF = 0, a string műveletek iránya növekvő, ha DF = 1, akkor pedig csökkenő.

    JCXZ: Jump if CX Zero, tehát az utána megadott címkéhez ugrik akkor, ha a CX értéke 0.


Egy kis dorgálás:

LEGFŐBB HIBÁK A ZH-BAN (IGEN, INDOKOLT A CAPS LOCK):

DB - BYTE (8 BIT)
DW - WORD (16 BIT)
NEM TESZÜNK 8 BITES REGISZTERBE 16 BITES ADATTAGOT
NEM TESZÜNK 16 BITES REGISZTERBE 8 BITES ADATTAGOT
NEM VÉGZÜNK MŰVELETEKET KÜLÖNBÖZŐ NAGYSÁGÚ REGISZTEREK KÖZÖTT NAGY ÁTLAGBAN, KIVÉTEL PL AZ OSZTÁS
A CBW-NEK, A SZORZÁSNAK ÉS AZ OSZTÁSNAK CSAK EGY OPERANDUSA VAN
CBW
    AL -> AX CSAK ÉS KIZÁRÓLAG
MUL
    HA OP = 8 BIT,  AL*OP -> AX
    HA OP = 16 BIT, AX*OP -> DX:AX
DIV
    HA OP = 8 BIT,     AX/OP -> AL
                       AX%OP -> AH
    HA OP = 16 BIT, DX:AX/OP -> AX
                    DX:AX%OP -> DX
    DX-ET LE KELL NULLÁZNI 16 BITES OSZTÁS ESETÉN ELŐTTE




7. gyakorlat


2. kis ZH

Példák karakterek kiírására ( Németh Gábor )

Programok:

    "Hello World!"-höz hasonló program: haho.asm

    És továbbra se feledkezzünk meg róla sem: hello.asm (változatlanul)

A gyakorlati anyag végén lévő feladatok megoldásai: gyak07.asm (A kabinetben nem fordul. Az általam feltett otthoni MASM-al igen. Igyekszem szerkeszteni egy kabinet-kompatibilist is)


Kiegészítés az órai anyaggal kapcsolatban:

    ASCII kódtábla

    Többsoros komment:

    COMMENT @
    	amit ide írok nem fog lefutni
    @
    

Beadandó feladatok leírása:





6. gyakorlat


( 1. kis ZH feladatainak átbeszélése )

Példák vezérlés átadásra ( Németh Gábor )

Programok:

    "Hello World!" assembly módra: hello.asm (ugyanaz, mint az előző gyakorlati)

    Kódkezdemény a gyakorláshoz: vezerles.asm (számsor feldolgozása - csak a 3. kis ZH-ban várható; addig is segítség a "Gyakorló feladatok"-ban)

Jövő héten 2. kis ZH!

Gyakorló feladatok


Összefoglaló a 2. kis ZH-ra:

    Varható utasítások jellemzésének leírása. Egyezzünk ki abban, hogy az alábbi utasításokat kérdezhetem: Parancsok.pdf (6. gyakorlatig).

    Rövid programrész írása:

      Kiszámítani adott aritmetikai utasítássorozat eredményét (összeadás, kivonás, szorzás, osztás).

      Valamilyen vezérlési szerkezet vagy ciklus megvalósátása.

    Nagyon áttanulmányozni az alábbi kódot: ZH02.asm. A 6. gyakorlati anyag végén szereplő feladatok közül kettőnek a megoldása, illteve a minta ZH feladatainak megoldása, melyet órán is néztünk.

    Valamint a 6. gyakorlati anyagban szereplő 1-1 példát a feltételes vezérlés átadásra és ciklus szervezésre.


Kiegészítés az órai anyaggal kapcsolatban:

    LODSB: A LODSB (LOaD String Byte) a DS:SI címen levő bájtot betölti AL-be, majd SI-t eggyel növeli, ha DF = 0, illetve csökkenti, ha DF = 1. Másik alakja, a LODSW (LOaD String Word) AX-be tölti be a DS:SI-n levő szót, és SI-t 2-vel növeli vagy csökkenti DF-től függően. Egyetlen flag-et sem változtat meg. Megjegyzés: Ha hivatkozunk valamelyik flag-re, akkor a flag-ek betűjeleihez még hozzáírjuk az „F” betűt is. A CF (Carry), IF (Interrupt) és DF (Direction - a string műveletek iránya,) flag-ek értékét közvetlenül is befolyásolhatjuk.

    (Példa rá a hello.asm-ben)

    JMP: (jump) egy operandusa van, az a címke, ahol szeretnénk, hogy a JMP utasítás végrehajtása után folytatódjon a program futása.

    JMP itt
      .
      .
      .
    itt:	; <-- ide fog ugrani a vezérlés
      .
      .
      .
    

    LOOP: A tényleges ciklusképzést a LOOP utasítás végzi. Működése: csökkenti CX-et, majd ha az zérussá válik, akkor a LOOP utáni utasításra kerül a vezérlés, különben elugrik az operandus által mutatott memóriacímre. Tehát a CX regisztert használjuk indexként. Minden egyes LOOP ciklusképzés előtt a CX-et be kell állítani a megfelelő értékre. A csökkentés során egyetlen flag értéke sem változik meg.

    ciklus: . . .       ; elvégzünk bizonyos műveleteket
            LOOP ciklus ; ha CX != 0, akkor csökkentjük eggyel az értékét és folytatjuk a 'ciklus' címkénél a ciklust
    




5. gyakorlat


1. kis ZH

Aritmetikai utasítások II. ( Németh Gábor )

Programok:

    Minimális assembly program: min.asm

    "Hello World!" assembly módra: hello.asm

    Kódkezdemény a gyakorláshoz: szamok.asm (kiíratások, változók használata)

Assembly program fordítási segédletek:

Gyakorló feladatok (múlt órai folytatása)


Kiegészítés az órai anyaggal kapcsolatban:

    AAA: jegyzet 60. oldal alja. Megjegyzés: Lehetéségünk van 8 biten egy vagy két decimális jegy tárolására is. Ennek alapján beszélhetünk pakolt (csomagolt) vagy pakolatlan (csomagolatlan) BCD számokról. Pakolt esetben két decimális jegyet tárolunk egyetlen bájtban, a bájt alsó felén a kisebb helyiértékű, felső felén (4 bitjén) pedig a magasabb helyiértékő jegyet. Pakolatlan esetben a bájt felső 4 bitjének nincs szerepe, ott nem tárolunk semmit sem. Fontos, hogy csak nemnegatív értékeket tárolhatunk ilyen módon!

    CMP: két operandust hasonlít össze. A két operandus méretétől függően bizonyos ugrásokat hajthatunk végre a programon belül. Az alábbi táblázat mutatja be, hogy mikor mit kérdezünk le ugrás (művelet végrehajtás) előtt:

    előjeles JE JNE JG JL JGE JLE JNG JNL JNGE JNLE
    op1 ? op2 == != > < >= <= !> !< !>= !<=
    előjeltelen JE JNE JA JB JAE JBE JNA JNB JNAE JNBE

    Betűk eredete: Equal, Not, Greater, Less, Above, Below





4. gyakorlat


Aritmetikai utasítások I. ( Németh Gábor )

Gyakorló feladatok

Jövő héten 1. kis ZH!


Egy kis összefoglaló az 5. gyakorlatra:

- Továbbra is 1. kis ZH!

- Az óra elején fogjátok megírni a ZH-t, kb 10 perc áll majd rendelkezésetekre

- Mindenki használhat a ZH-n kézi számológépet (telefon vagy számítógép (stb) használata nem engedélyezett)

- ZH megírása után folytatódik a gyakorlat, haladunk tovább az anyaggal

Fontosabb anyagrészek az 1. kis ZH-ra:

- Számrendszerek közti átalakítások (minden számrendszer között), számábrázolás, számrendszereken belüli műveletek (összeadás)

- Memória felépítése, fizikai memóriacím kiszámítása

- Regiszterek

- A tanult aritmetikai utasításokról minden - tulajdonságaik, használatuk

- Tanultak (látottak) alapján rövid programrészek megírása

- Figyelem felhívás: a regiszterek és a változók is különböző méretűek lehetnek, a változóknak vagy/és a bennük tárolt értékeknek lehet előjele, operandusok száma, mérete és sorrendje nem elhanyagolandó, címzés során elért érték és regiszterbe pakolása nem mindig egyforma

"Ajánlott irodalom" az 1. kis ZH-ra:

- 2., 3. és 4. gyakorlat anyaga

- Minta ZH





3. gyakorlat


Címzési módok ( Németh Gábor )

Memóriacímzések összefoglalása röviden

Egy másik jegyzet, melyben a regisztereket mutogattam. ( Címzési módokhoz NE ezt használjuk, hanem az eredeti gyakjegyzetet! )


Egy kis emlékeztető a memóriáról:

                 MEMÓRIA
                ~~~~~~~~~ <-- kistenger azt jelenti, hogy a memóriának csak egy részét ragadtuk ki
                |       |
  BÁZISCÍM -->_ |_______| _ 
      OFFSET |  |       |  |
             |_ |adat   |  |
                |       |  | SZEGMENS - összefüggő memóriaterület
                |_______| _|
                |       |  
                |       |
                |       |
                |_______|
                |       |
                ~~~~~~~~~ <-- és itt is

Az órán látott példa a Data Segment címzésére:

DS:0000 CD 20 FF 9F 00 9A F0 FE
-------------------------------

MOV AL, [0]    ; AL = CD   <- az AL 8 bites, ezért a MOV ("belehelyez") utasítás hatására a 0. helyen lévő CD kerül bele
MOV AX, [0]    ; AX = 20CD <- az AX 16 bites, little endian miatt először a CD kerül bele, majd a 20, mivel a kisebb helyértékek felöl kezd el feltölteni

Az eheti gyakorlati anyag végén lévő 1. feladat megoldása (magyarázat órán):

Melyik címzés helyes és melyik helytelen?

- [12h+56h]         helytelen
- ES:[09D3h]        helyes
- [123456789ABCh]   helytelen
- [SI+DI]           helytelen
- [IP]              helytelen
- [SI-500d]         helyes
- [AX]              helytelen
- SS:[BX+DI+1999d]  helyes
- [CX+1234h]        helytelen
- [SP+BP]           helytelen
- DS:[BP+SI]        helyes
- IP:[0000h]        helytelen

A mellette figyelt kép, mely egy fordítási eredményt tartalmaz. ( Varga László )





2. gyakorlat


Számrendszerek ( Varga László )

Az eheti gyakorlati anyag végén lévő feladatok megoldása elérhető itt .

Egy (a gyakorlaton is látott) összefoglaló táblázat a tanulmányozott számrendszerekhez:





1. gyakorlat


Követelmények ismertetése

Egyéb hasznos információk

Kurzusfórumnak a CooSpace-t fogjuk használni. A gyakorlat részteljesítéseinek (kisZH, nagyZH, kötprog) pontszámai ETR infosheet-re fognak felkerülni, de CooSpace-en is jelezni fogom, ha felkerülnek az újabb eredmények, hogy ne kelljen az infosheet-et figyelgetni.

Ha valakinek kérdése van az anyaggal kapcsolatban óra előtt/közben/után nyugodtan lehet kérdezni, illetve email-ben állok rendelkezésetekre. Az email-ekre jellemzően az esti órákban tudok majd válaszolni, de igyekszem minden email-re még az érkezése napján reagálni. A küldött email tárgya az alábbi formájú legyen: [assembly] .

A fogadóórám időpontja azt jelzi, hogy abban az időpontban elérhető vagyok minden héten, viszont nem mindig tartózkodom bent a Tanszéken. Tehát, ha valaki szeretne jönni fogadóórára, várom sok szeretettel, csak előző nap éjfélig írjon egy email-t, hogy biztos benn legyek. A fogadóórám időpontja: Csütörtök, 15:00 - 16:00 .

Terv szerint a gyakorlati anyag még az adott gyakorlatot megelőző héten elérhető lesz, ehhez igyekszünk tartani magunkat. Várhatóan ajánlott lesz a jegyzetelés a gyakorlaton, mivel lehetséges, hogy több minden fog felkerülni a táblára, mint ami a kiadott jegyzetben megtalálható lesz. Vissza kérve csak az lesz ami a jegyzetbe is bele kerül, viszont az órai jegyzetelés segíthet a megértésben és a későbbi tanulásban. ( Röviden: szokás szerint. )

     Vissza a lap tetejére.