Ez a lap az ELTE programtervező matematikus hallgatóinak tartott fordítóprogramok I tárgy gyakorlatának segédanyaga lesz. A gyakorlaton assembly programok készítésével foglalkozunk. Lesznek magyarázatok, linkek, példaprogramok. Jelenleg nincs időm rendesen belefogni, de remélhetőleg még a nyáron többen nekiállunk, és a következő félév elejére el is készül.

Tehát még egyszer: ez a lap nem általában az assembly programozásról, hanem kimondottan az ELTE-n tartott gyakorlatról szól. Ha szeretnél írni egy wikikönyvet az assemblyről általában, akkor csinálj egy másik wikikönyvet.

Előszó

Adatábrázolás

Számrendszerek, átváltás, negatív egészek ábrázolása (egyes/kettes komplemens), fixpontos és lebegőpontos számok, IEEE. Karakterek, ASCII, ISO-8859-2. Logikai értékek ábrázolása.

Bevezetés az assemblybe

Helló világ! Az assembly programok felépítése, kommentezés. Az elkészült program lefordítása, összeszerkesztése, futtatása.

Technikai háttér

A számítógépek felépítése, processzor, memória, regiszterek, órajel, flagek. Memóiakezelés, lapozás, szegmentálás.

Memóriacímzés

Abszolút és relatív címzés, eltolások. A NASM címzés-kiterjesztései.

Alapvető műveletek

mov
db, dw, dd, resb, resw, resd
inc, dec, add, adc, sub, mul, imul, div, idiv
cbw, cwd, cwde, cdq
and, or, xor, not, neg, shl, shr, sal, sar, rol, ror, rcl, rcr
cmp
Cimkék. Feltétel nélküli: jmp, feltételes előjelfüggetlen: je, jz, jne, jnz, feltételes előjel nélküli: ja, jnbe, jna, jbe, jb, jnae, je jae, jnb, jnc, feltételes előjeles: jg, jnle, jle, jng, jl, jnge, jge, jnl ugró utasítások. Egyéb: js, jns, jo, jno, jp, jpe, jcxz, jecxz.

Strukturált programok megvalósítása

Szekvencia, elágazás és ciklus megvalósítása.

Függvények

push, pop
A call és a ret utasítás. A függvények váza. Pareméterátadás és lokális változók használata. Visszatérési érték.

Rendszerhívások

A rendszerhívások szerepe, mibenléte. Konkrét példa: fájlkezelés, fájlok megnyitása, olvasás, írás, lezárás, hibakezelés.

Összmunka más programozási nyelvekkel

A NASM előfordító

%define, %xdefine, túlterhelés, megszűntetés, értékadás: %assign, stringkezelés: %strlen, %substr.
%macro, túlterhelés, rekurzió, lokális címkék, változó paraméterszámú makrók, %rep, paraméterek konkatenációja.

Programfeltörés (crackelés)

Egyszerű, assembly-n alapuló programfeltörési módszerek. Crackme-k.

Linktár

Hasznos linkek az assembly-vel és a tárggyal kapcsolatban.