Tétel adatlapja
VisszaCÍMLAP

Gimesi László

Intel processzorok programozása assembly nyelven

TARTALOM, BEVEZETÉS


Tartalom

1. Bevezetés

2. Hardver
2.1. A rendszerbusz (sín)
2.2. CPU (Central Processing Unit)
2.3. Az operatív memória
2.4. Az input/output egységek

3. Bináris aritmetika
3.1. A számrendszerek
3.2. Adatábrázolás
3.3. Az Intel processzorok számábrázolása
3.4. Műveletvégzés

4. Az Intel mikroprocesszorok
4.1. Kezdetek
4.2. Mikroprocesszor
4.3. Az Intel processzorok regiszterkészlete
4.4. A matematikai társprocesszor

5. Az Intel processzorok utasításrendszere
5.1. Utasítások
5.2. Operandusok és címzési módok
5.3. A verem (stack)
5.4. Memóriaszervezés

6. Az assembly programozás
6.1. Szegmentálás
6.2. Kezdjünk el programot írni
6.3. Konstansok használata
6.4. Néhány egyszerűbb szubrutin
6.5. Az adatszegmens használata
6.6. Lemezmeghajtó kezelése
6.7. A karakteres videó-memória kezelése
6.8. Mintapéldák az INT 21h interrupthoz

7. Az assembly kapcsolata más nyelvekkel
7.1. Assembly rutinok Turbo Pascal programokban
7.2. Assembly rutinok C programokban

8. Irodalomjegyzék

9. Melléklet


Bevezetés

A tárolt program elvét Neumann János fogalmazta meg, miszerint a programutasítások és az adatok azonos formában (binárisan), ugyanabban a belső memóriában helyezkednek el. Így van ez a legkorszerűbb számítógépnél is. Ez azt jelenti, hogy a számítógépen bármilyen programozási nyelvet is használunk, az eredmény mindig egy bináris - az operatív memóriába tölthető - számsor (utasítássorozat).

Az első számítógépeket gépi kódban programozták, az utasításokat bináris számok formájában kellett a memóriába táplálni. 1946-ban kezdték használni a mnemonikus kódokat, majd a szimbolikus nyelveket, amelyekkel nagymértékben megnövelték a programírás hatékonyságát. Azonban az így elkészített utasítássorokat le kellett fordítani gépi kódra. Az első fordító (assembler) program 1949-ben készült el.

A programozás során legtöbbször egy folyamatot írunk le. Elképzeljük, hogy egy adott feladatot hogyan oldanánk meg (milyen lépések sorozatával tudnánk leírni), és azt próbáljuk a számítógéppel elvégeztetni. Egy programozási nyelvnek, és az azt lefordító fordítóprogramnak az a feladata, hogy megteremtse a kapcsolatot az emberi gondolatok és a CPU utasítás-végrehajtása között.

Minél közelebb áll egy programozási nyelv az emberi gondolkodáshoz, minél egyszerűbben lehet leírni benne a feladatot, annál magasabb színtű nyelvről (programozási nyelvről) beszélhetünk. Ekkor a fordítóprogramra hárul a nagyobb feladat, hogy a gépi kódot (futtatható állományt) előállítsa, ez a kód azonban nem lesz optimális. A működéskor felesleges utasításokat is kénytelen a processzor végrehajtani, ami megnöveli a program erőforrásigényét, de manapság - a korszerű, nagysebességű processzorok korában - a programozók nagy része ezzel nem foglalkozik.

Amikor programjaink optimalizálása, sebességének növelése a célunk, assemblyben (alacsony szinten) kell a programunkat elkészíteni. Ekkor a programozóra hárul a nagyobb feladat, hiszen neki kell összeállítani úgy az utasításokat, ahogy a CPU "gondolkodik".

Vannak olyan esetek, amikor az assembly írásakor nem az optimalizálás a célunk. Ilyen például, amikor egy magas színtű nyelv nincs felkészítve bizonyos feladatok elvégzésére: különböző konverziók, erőforrások és portok kezelése stb.

Ahhoz, hogy az assembly-t hatékonyan tudjuk használni, meg kell ismerni a számítógépek, mikroprocesszorok felépítését, és a bináris aritmetikát. E témákkal foglalkozik a jegyzet első része. Ezt követi az Intel mikroprocesszorok működésének és programozásának ismertetése.

A jegyzet egyszerű példák segítségével, lépésről-lépésre ismerteti az utasításokat és a MASM (Microsoft Macro Assembly) nyelvet, majd foglalkozik azzal is, hogy milyen módon lehet meghívni egy assembly rutint magas színtű programozási nyelvből.

A Függelékben - többek között - összefoglalásra kerül az Intel processzorok alaputasításkészlete és a fontosabb megszakítások (interrupt-ok) kezelése.


×