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).
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).
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. :)
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:
Sorozat átlaga - kiinduló kód: atlag.asm, megoldás: atlagmo.asm
Vektor skaláris szorzata: 10skal.asm
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.
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!
3. kis ZH
Példák sztringek kezelésére ( Németh Gábor )
Programok:
Sztring beolvasása billentyűzetről: instring.asm
Palindroma ellenőrzés: palindroma.asm
Kettő az egyben: palindróma ellenőrzése billentyűzetről beolvasott sztringen : inpalindroma.asm
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ő.
( 2. kis ZH feladatainak átbeszélése )
Példák számok kiírására ( Németh Gábor )
Programok:
Decimális számok kiíratása: deckiir.asm
Hexadecimális számok kiíratása: hexkiir.asm
Számsorozat legnagyobb eleme: sormax.asm
Jövő héten 3. kis ZH!
3. kis ZH kisokos ( Elek Roland ) - egy kis összefoglalás a tanultakról
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
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
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:
Többsoros komment:
COMMENT @ amit ide írok nem fog lefutni @
Beadandó feladatok leírása:
( 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!
2. kis ZH kisokos ( Elek Roland ) - egy kis összefoglalás a tanultakról
Ö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
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:
Több féle fordító használatának leírása ( Varga László )
Fordítás a kabinetben (részletes)
Fordítás otthon (részletes)
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
Aritmetikai utasítások I. ( Németh Gábor )
Jövő héten 1. kis ZH!
1. kis ZH kisokos ( Elek Roland ) - egy kis összefoglalás a tanultakról
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
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ó )
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:
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.