Programozási nyelvek osztályozása

I. Amatőr és professzionális programozási nyelvek

A jellemzők közé általában nem húzható éles határvonal.

Amatőr

interaktivitás

gyors nyelvi fejlődés

sok nyelvi elem

egyszerű programszerkezet

speciális gépi tulajdonságok

Professzionális

modularitás

stabil nyelvek

kevés nyelvi elem

sok lehetőség

gépfüggetlenség, átvihetőség

II. Emberközelség

Alacsonyszintű nyelvek

Minden lehetőség (HW,SW) kihasználható

Szimbolikus utasítások

Azonosító

Címkenév

Makrók

Direktívák

Adathelyfoglalás, definiálás

Gépi nyelvek

Minden lehetőség (HW,SW) kihasználható

Kód

Memóriacím

Memóriacím

Magasszintű nyelvek

(feladatorientált)

Változó=tartomány

kifejezések

típus

elágazás, ciklus

eljárás

paraméterezés

Alacsonyszintű nyelvek

(géporientált)

változó=kezdőcím

feltételes vezérlésátadás

eljáráshívás, visszatérés

III. Számítási modellek (az az absztrakt modell, ami alapján az algoritmusokat végre kell hajtani)

A. Neumann-elvű nyelvek (1 Neumann-elvű számítógép)

1. Elképzelések, tulajdonságok

1	memória, címezhető (sorszámmal)

1	a program és az adatok a memóriában vannak

1	a végrehajtás memóriaállapotok sorozata, állapottér (adatok tere), koordináták, programfüggvény: állapottér 1 állapottér, konkrét állapot=pont,

1	a program leírása szöveges

2. Következmények

1	van változó

1	van értékadás

1	utasítások ismételt végrehajtása lehetséges (ciklus, GOTO)

1	elágazás (GOTO)

1	beolvasás: memória másolás (ld. C64)

1	kiírás: memória másolás (képernyő)

3. A jelenlegi számítógépek ilyenek, s ezért a nyelvek jelentős többsége is.

B. Automata-elvű nyelvek (1 ipari robot, pl. festőautomata)

1. Elképzelések, tulajdonságok

1	az adatok állapotok, illetve bemenetek – fix felosztású memória (pl. festőkar he­lye, fest-e, ...): állapottér

1	a végrehajtás egyszerű állapotok sorozata

1 a program egy állapotátmenet-függvény

1 a program elkülönül az állapotoktól

1	tevékenységorientáltság (állapotváltoztatás)

2. Következmények

1	az utasítások általában egy állapotkomponenst változtatnak

1	változó, értékadás nincs (csak névvel ellátott állapotkomponensek)

1	csak primitív (állapot-, vagy paraméter- vagy érzékelőállapot-függő) ciklusok ír­hatók

1	állapot-, vagy paraméter vagy érzékelőállapot-függő elágazás

1	utasítások paraméterezhetőek

1	beolvasás: paraméterezés, állapotlekérdezés, érzékelő állapota

1	kiírás: állapotváltozás nyoma

1	párhuzamosság

3. Példa: LOGO grafikai része, ipari robotok nyelvei

C. Funkcionális nyelvek (1 analízis)

1. Elképzelések, tulajdonságok

1	a program egy függvény

1	memória nincs

1	a végrehajtás függvénykifejtés

1	erős matematikai kidolgozottság

2. Következmények

1	változó, értékadás nincs

1	konstansok = konstans függvények

1	függvénykompozíció

1	ciklus nincs, helyette rekurzív függvények lehet ciklus, ha léteznek a programon értelmezett függvények

1	feltételes függvények

1	függvényargumentum van

1	beolvasás: speciális függvény

1	kiírás: a függvény eredménye, esetleg speciális (mellékhatással rendelkező függ­vény)

3. Példa: LOGO szövegkezelő része, (FORTH,) LISP

D. Logikai nyelvek (1 matematikai logika)

1. Elképzelések, tulajdonságok

1	a program egy logikai formula (általában nem lehet teljesen általános formula: megszorítások!)

1	a program végrehajtása a logikai formula kiértékelése

1	erős matematikai kidolgozottság

1	a formulákban szerepelhetnek paraméterek

1	a program és az adatok nem különülnek el (minden adat egy azonosan igaz for­mula)

Példa: szülője, nagyszülője.

2. Következmények

1	nincs változó, értékadás

1	szekvencia = és, elágazás = vagy

1	ciklus nincs, helyette rekurzív formulák

1	vannak feltételes kifejezések

1	elemi utasítás: mintaillesztés

1	beolvasás, kiírás: mintaillesztés

1	lehetőség új formulák létrehozására (új utasítás)

1	kiértékelési algoritmus: backtrack 1 csak a MIT? kell leírni

3. Példa: PROLOG

E. Adatfolyam nyelvek (1 csővezeték)

F. Objektumelvű nyelvek (1 emberek csoportja)

1. Elképzelések, tulajdonságok

1	objektum = szerkezet + eljárások	 típus

az adat és a kód nem választható el egymástól

(adatdefiniáláskor jönnek létre az őt kezelő eljárások),

1	objektumtípus=osztály  típust megvalósító modul

1	hivatkozás: objektumtípusú változó.eljárásnév, objektumtípusú változó.mezőnév

1	az objektumok üzenetekkel (eljárások) kommunikálnak egymással,

1	eseményvezérelt programozás,

1	öröklés: az új objektum egy másik objektum összes jellemzőjével rendelkezik, il­letve ehhez újakat is definiálhat,

 típusszármaztatás (láthatósági kérdések)

1	az örökléssel objektumok hierarchikus rendszere alakítható ki,

1	csak értékszerinti paraméterátadás lehet,

1	dinamikus objektumokhoz (mutató) meg kell adni egy konstruktort és egy dest­ruktort.

2. Következmények

1	az objektumok (tárgyak) önálló életet élő dolgok

1	az eljáráshívás a legfontosabb fogalom

1	olyan objektumnak lehet értéket adni, amely ilyen eljárást közöl magáról

3. Példa: Turbo Pascal 6.0, Visual BASIC, Smalltalk

Programozási nyelvekkel kapcsolatos fogalmak

I. Szintaxis, szemantika, definiálásuk:

- BNF

- szintaxisgráf

- absztrakt értelmező

- VDL

- axiomatikus (elő- és utófeltétel)

II. Fordítás, értelmezés

Előny: szintaktikus elemzés csak egyszer könnyű nyomkövetés, gyors javítási lehetőség

csak szintaktikailag helyes programot lehet futtatni

Hátrány: nehéz a hibakeresés, körülményes a javítás	lassú, sok memóriát igényel

Közbülső utak: értelmező TOKEN-eket, belső ábrázolási formákat, lengyel formára hozást használ,

fordító operációs rendszerszerű eljárásokat hív - mini értelmező kell a végrehajtáshoz

III. Programstruktúrák

programcsomag

program (futtatási egység)

(párhuzamos) folyamat

fordítási egység (modul), kapcsolata (export-, importlista), részei (specifikáció, reprezen­táció, implementáció, kezdőérték; vagy definíció, implementáció, kezdőérték)

programegység: funkcionálisan összefüggő, környezettől elzárt rész (eljárás, függvény, operátor), részei (deklarációs rész, törzs)

blokstruktúra

IV. Azonosító

hosz, jelek, szóköz lehet-e benne

védett azonosítók

azonosítók átlapolása (azonos név több objektumhoz) - blokkstruktúra (globális, lokális azonosítók)

hatáskör (a deklaráció érvényességi köre a programban),

láthatóság, lyuk a hatáskörön , kijelölése:

- statikus: program szerkezet alapján (fordításkor)

- dinamikus: végrehajtás alapján

példa ennek problémáira

fordítási konstans

V. Típus

típus=értékhalmaz+műveletek (lehet statikus és dinamikus)

típus nélküli, típusos (futási időben kell a típushozzárendelés), erősen típusos nyelv (for­dítási időben kell a típushozzárendelés)

altípus: az eredetivel ekvivalens típus, annak valamilyen része, műveleteit örökli

származtatott típus: az eredetivel nem ekvivalens típus, lehet annak része, de az egész értékhalmaz is, műveleteit örökölheti, de van nyelv, ahol csak részben

dinamikus típus (memóriaigénye, memóriacíme futás közben változhat)

névtelen típus

típuskompatibilitás (név szerint, struktúra szerint)

típuskényszerítés (automatikus konverzió)

paraméteres típus (paraméter lehet: konstans, típus), feltételezett paraméterértékek, felté­telezett típuskezdőértékek

átlátszatlan típus

VI. A típusfogalom fejlődése

gépi szint: azonosító = memória kezdőcím, nincs konstans

BASIC,... : típus = memóriareprezentáció (vö. névtelen típus), csak elemiek érhetők el, összetett típusok, kezdőérték

ALGOL,... : összetettek is elérhetők

COBOL,... : rekord, file

Pascal, : típus = memóriába képezés szabálya, definiálható

ELAN elemi típus, halmaz, dinamikus típusok, konstans, operátor

Modula-2, : típus = szerkezet + műveletek, a modul, mint a típusalkotás eszköze,

Ada: implementáció és reprezentáció elrejtése

VII. Változók

Memóriakezelés:

- statikus (fordításkor kiderül)

- félstatikus (futás közben csak növekedhet)

- dinamikus

deklaráció kiértékelés

- statikus (pl. fix indexhatárok: Pascal)

- dinamikus (pl. BASIC)

memória lefoglalás

- automatikus

- kézi (Pascal: new, dispose - heap)

változó élettartam (a futási idő része), kezdőérték

- statikus: program lefutásáig

- dinamikus automatikus lefoglalással: eljárás indulástól eljá­rás befejeződésig (verem)

- dinamikus kézi lefoglalással: new, dispose

levegőben lógó hivatkozás

VIII. Paraméterátadás

cím szerint

név szerint

érték szerint

eredmény szerint

Példa a név-, és a címszerinti paraméterátadás problémáira

Más elv szerint: bemenő, kimenő, be- és kimenő

paraméterek megfeleltetése (sorrend szerint, név szerint)

paraméterek feltételezett értéke

változó számú paraméter

Professzionális programozási nyelvek bevezető

I. Nyelvek osztályozása

1. Tudományos számítások (FORTRAN, ALGOL60,..)

2. Adatfeldolgozás (COBOL, RPG)

3. Rendszerprogramozás (C, FORTH, CDL2)

4. Szövegfeldolgozás

5. Folyamatvezérlés (FORTH)

6. Szimuláció (SIMULA-67, GPSS)

7. Oktatás (BASIC, LOGO, Pascal, ELAN, Smalltalk)

8. Általános célú (Ada, Modula-2, PL/I)

II. Nyelvek története (körülbelüli dátumok), csak Neumann-elvű

1944. Neumann János: egy assembly nyelv terve

1950-es évek: assembly nyelv

1. generáció (1950-1958) – elemi típusok, alapvető utasítások

FORTRAN I, ALGOL 58

Elmélet: assemblerek, kódgenerálás, makroprocesszor - hatékonyság

2. generáció (1957-1966) – szintaxis: alapvető utasítások, adattípusok, kifejezések (fa, teljesen zárójelezett, lengyel forma)

ALGOL 60: programegység, blokkstruktúra, algoritmusleíró nyelv

FORTRAN: fordítási egység, kezdőértékadás, unió típus

COBOL: rekord, file, adatfeldolgozás

PL/I (lezáró nyelv): az előzőek + dinamikus típusok, tömbműveletek

BASIC: első oktatási célú nyelv

Elmélet: nyelvek és automaták, szintaxis, lexikális analízis, kifejezéskiértékelés (fa, teljesen zárójelezett forma, lengyel forma)

Nem Neumann-elvű nyelvek: LISP

3. generáció (1967-1975) – típus, strukturált programozás

(főleg ALGOL 60-ra épülő nyelvek), speciális célú nyelvek

Simula 67 (objektum), ALGOL 68, Pascal

Rendszerprogramozási célú, alacsonyszintűekhez közeli nyelvek: C, CDL2

Elmélet: szemantikadefiniálás, struktúrált programozás, helyességbizonyítás, prog­ramszintézis, szimbolikus végrehajtás

"szoftver-krízis"

Nem Neumann-elvű nyelvek: PROLOG, LOGO, automaták nyelvei

4. generáció (1974-199?) – modularitás, specifikáció, absztrakt típus (értékhalmaz+mű­veletek)

(főleg Pascal és Simula 67 alapú nyelvek)

Modula-2, Ada, (Alphard, CLU, Euclid, Mesa)

5. generáció (199?- ) – párhuzamosság?

Többprocesszoros gépek, hálózatok programozása??

III. Nem Neumann elvű nyelvek megjelenése

1. LISP (matematikai miatt – 2 generáció idejében)

2. PROLOG (szoftver krízis miatt – 3. generáció idejében)

3. Automata-elv (vezérlési feladatok miatt – 3. generáció idejében)

4. Smalltalk (objektumorientáltság – 3. generáció idejében)

Fordító- és értelmezőprogramok

I. Fordítás és értelmezés fogalma

II. Részeik

1. Lexikális elemző

2. Szintaktikus elemző

3. Hibakezelő

4. Táblázatkezelő

5. Szemantikus elemző

6. Globális optimalizáló

7. Kódgeneráló	1 csak fordító esetén

8. Lokális optimalizáló	1 csak fordító esetén

9. Végrehajtó	1 csak értelmező esetén

Példaprogram: (az egyes részeknél az ebből kapott eredmény lesz a példa)

Program Elso;
{ ez egy pelda }
VAR j,i,N: INTEGER;
C : CHAR;
BEGIN
Writeln('Cím'); readln(c); N:=10;
If C='*' THEN FOR I:=1 TO N DO
j:=j+i*i/(N*N);
else j:=2*2;
WRITELN(J);
END.

III. Lexikális elemzés

1. Feladata: a bemenő karaktersorozat szimbólumsorozattá alakítása

szimbólumok:

– azonosítók
– alapszavak
– számok
– speciális jelek, jelkombinációk

2. Tevékenységei részletesen:

szóköz szűrés

kisbetű – nagybetű megfeleltetés

belső ábrázolásra hozás (alapszavak – ha lehet, konstansok)

megjegyzések kihagyása

IV. Szintaktikai elemzés

1. Feladata: a nyelvi elemek felismerése, szerkezetük elemezése, belső átalakítás (len­gyel forma, felesleges alapszavak elhagyása)

2. Környezetfüggetlen és környezetfüggő elemek a nyelvekben.

3. A szintaxisleírás eszközei

– BNF

– Szintaxisgráf

– Wijngaarden nyelvtan

V. Hibakezelés

1. Követelményei:

– ne jelezzen hibát helyes programra,

– minden hibát jelezzen,

– egy hibát csak egyszer jelezzen

– rövid legyen a hiba után nem elemzett rész

2. Hibafajták: fatális, normál, figyelmeztetés

3. Futási hibák ellenőrzésének beépítése

VI. Szemantikus elemzés

1. Statikus szemantikus hibák fajtái:

– deklaráció, hatáskör, láthatóság hibái

– többszörös deklarálás

– paraméterkompatibilitás

2. Dinamikus szemantikus hibák fajtái

– inicializálatlan változó

– felhasználatlan változó, változóérték

– végtelen ciklus (számlálós, feltételes)

– végrehajthatatlan utasítás

– azonosan igaz/hamis logikai kifejezés

– változóértéktől független aritmetikai kifejezés

– önmagának értékadás

– érték nélküli függvény

– függvény mellékhatással

2. Szemantikaleírás eszközei:

– absztrakt értelmező (algoritmus)

– függvény

-– axiomatikus leírás (elő-, illetve utófeltétel)

– formális nyelv

VII. Globális optimalizálás (programtranszformációk)

– utasítás kiemelése ciklusból

– konstansösszevonás, terjesztés

– utasítás kiemelése elágazásból

– elágazások összevonása, szétválasztása

– ciklusok összevonása

– azonos részkifejezések egyszeri kiszámítása

– kifejezések algebrai egyszerűsítése

– lengyel forma

– jobbrekurzió ciklussá alakítása

VIII. Lokális optimalizálás

– felesleges utasítások kihagyása (ne hozzuk be regiszterbe az adatot, ha már úgyis benne van)

– konstanskifejezések kiértékelése

– eljárás behelyettesítés

– ciklus kifejtés

– utasításkiemelés assembly szinten (pl. címfüggvény)

– késleltetett tárolás (pl. összegzés ciklusa után tesszük regiszterből memóriába az eredményt)

– hatékony nyelvi elemek használata (pl. léptetés, 1-gyel növelés stb.)

– felesleges műveletek elhagyása (pl. +0, *1 stb.)

IX. Kódgenerálás

1. Eredménye:

– közvetlenül végrehajtható gépi kódú program

– relatív címes, külső hivatkozásokat tartalmazó gépi kódú program

– assembly program

– közbülső nyelvű program

2. Egyes utasítások fordításának problémái: (1- vagy 2-menetes)

Deklaráció: helyfoglalás (cím=bázis+relatív cím), helyfelszabadítás

Értékadás: lengyel forma

Elágazás: hol lesz a különben-ág, hol lesz az elágazás vége

Ciklus: visszaugrás a ciklus elejére, hol lesz a ciklus vége, mi a ciklusváltozó, kezdeti érték, végérték, lépésköz

Eljárás paraméterezés: hol adjuk át a paramétereket (érték-, címszerinti), hol kapjuk a függvényértéket.

X. A fordítási lista elemei

– programszöveg

– hibajelzések

– fejléc

– formázás

– javítások

– keresztreferencia-táblázat

– memóriatérkép

– lefordított programkód (assemblereknél szokás)

– egyebek

XI. A fordítóprogram táblázatai

– azonosítók táblázata (név, típus, eljárás, cím)

– konstansok táblázata (név, érték)

– címkék (sorszámok) táblázata

Programozási nyelvek jellemzői

I. Biztonságosság

A szintaxis nyújtson védelmet az elírásból származó hibák ellen és a futás közbeni hibák tovaterjedése ellen!

1. Egyértelműség

– ugyanaz az utasítás bármely futásakor egyformán legyen végrehajtható (negatív példa: dinamikus hatáskör kijelölés),

– álnévvel hivatkozás problémái (példa: csere eljárás cím-, illetve értékszerinti para­méterátadással)

2. Teljesség

– nem használ semmit a környezetéből

– legyen a nyelvnek szabványa

– a nyelv specifikációja kényelmes legyen

– legyenek a nyelvben fordítási direktívák

– modulkapcsolatok leírása

– gépfüggetlen típusok (ábrázolási pontosság, nagyság)

3. Erős típusosság

Minden dolog típusa fordításkor egyértelműen kiderüljön (negatív példa: a Pascal eljá­ráshívásnál a típust nem ellenőrizheti, ha az eljárásnév a paraméter).

4. Megbízható konstrukciók

– konstrukciók léte

– összetett utasítások veszélyei (begin–end, elseif, ciklusváltozó a cikluson kívül)

– szövegkonstans, megjegyzés vége

– kezdőérték nélküli változók

– mellékhatás, globális változók problémái

5. Önellenőrzés

– utasításonként (COBOL)

– egész programra (BASIC)

– az aktuális blokkra (Ada – kivételkezelés)

II. Emberközelség

1. Egyszerűség, egységesség

– azonosítók, alapszavak (kell jelölni?, hossza korlátozott?, elnevezés korlátozott? ...)

– sor–fogalom van-e?

– ortogonalitás: néhány elem tetszőleges kombinációja megengedett, ellenpélda: Pas­cal ciklusváltozó, tömbindex

– redundáns lehetőségek

ELAN: a INCR 1, a:=a+1,

Pascal: a:=SUCC(a), A:=A+1,

– tömörség

Pascal: struktúrák értékadása

2. Elemi nyelvi egységek használata

– megjegyzés hol szerepelhet: külön sor, sor vége, bárhol

– típusos konstansok használhatósága

– makrók

– rövidítések (WITH, alapszavak rövid alakja, feltételnév)

3. GOTO szerepe

– kiugrás ciklusból (helyette: előreolvasás, lineáris keresés)

– kivételkezelés

4. Eljárások

– technikai eszköz

– absztrakciós eszköz

5. Modularitás

III. Kiterjeszthetőség

Új fogalmak könnyű bevezetése, használatuk módja azonos legyen a többi nyelvi elem használatával.

1. Eljárás, függvény

2. Típus (altípus, származtatás, típusok ekvivalenciája, specifikáció és megvalósítás szét­választása)

3. Operátorok átlapolása

IV.A. Hatékonyság (idő)

1. Értékadások speciális fajtái

– struktúrák értékadása

– többszörös értékadás

– mutató típus 1 címek értékadása

– kezdőértékadás futási időben

2. Speciális műveletek

– SUCC, PRED, SHL, SHR, ...

– A INCR B, DECR, CAT, ...

3. Feltételek gyors kiértékelése

– nemszimmetrikus logikai műveletek

– ELSE ág a sokfelé ágazásban

4. Tömbök

– értékmegosztás (FORTRAN: EQUIVALENCE)

5. Paraméterátadás

– érték-, vagy címszerinti

6. Háttértár kezelés

– formázott, vagy belső formájú műveletek

IV.B. Hatékonyság (hely)

1. Tömör ábrázolás (PACKED)

2. Adott méretű, pontosságú számtípusok

3. Dinamikus memóriakezelés

4. Alternatív szerkezetű rekord

5. Háttértár kezelés

6. Változó hosszúságú szövegek ábrázolása

7. Eljárások, paraméterezésük változóval, eljárással, típussal

8. Struktúrák értékadása

V. Átvihetőség, hordozhatóság

Def.: Egy program gépfüggő, ha különböző számítógépeken nem egyformán viselke­dik.

Def.: Egy program átvihető, ha az új gépre való átvitel költsége lényegesen kisebb, mint az újraírás költsége.

Def.: Egy program hordozható, ha átvihető és az új gépen hatékonyan futtatható.

1. A nyelvdefiníció problémái

– pontatlan (egyes fogalmak nem tiszták)

– hiányos (szűk lehetőségek)

– túl bő lehetőségek (COBOL)

– a nyelvet lefoglalt szavakkal bővítették

– a gépi reprezentáció új utasításokat használ

2. A nyelv problémái

– számábrázolás (nagyság, pontosság, exponens alapja)

– műveletek, függvények pontossága

– karakterkód

– periféria-lehetőségek

– file-rendszer különbségei (0,1, többszintű)

– terminál, nyomtató méret adatai, kezelése

– grafikus kártya

– kapcsolat az operációs rendszerrel

– eljáráskönyvtárak

– közvetlen memóriahivatkozások

Assembly programozás

I. Az assembly programozás jellemzői: adatok

1. Csak elemi adatok léteznek.

2. Nincs változófogalom, típusfogalom, csak memóriacímek.

3. A memóriacímek elnevezhetők (ez lehet "változó" kezdőcíme).

4. Vannak speciális memóriaelemek: regiszterek – ezek nem cím-, hanem név szerint ér­hetők el.

5. A memóriafelosztással tisztában kell lenni.

6. Lehetőség van egy verem kezelésére.

7. Az utasítások nagy része egy feltételszót is állít, ami a későbbiekben felhasználható.

II. Az assembly programozás jellemzői: utasítások

1. Csak elemi műveletek léteznek (sok processzornál még szorzás, osztás sincs).

2. Az egyes műveletek csak speciális operandussal végezhetők el, a regiszterek sem egyenran­gúak.

3. A program is memóriacímeken helyezkedik el – ennek itt tudatában kell lenni.

4. A programstrukturáló utasítások lényegében csak vezérlésátadások, néha primitív cik­lus van.

5. Léteznek tárterület műveletek (másolás, hasonlítás, ...)

6. Megszakításkezelés, fizikai input-output utasítások léteznek, lehetőség van párhuza­mosításra.

7. A fizikai szint minden lehetősége elérhető.

III. Az assembly szint alatt

1. A gépi utasítások formája

2. A gépi utasítások végrehajtásának lépései

3. Koprocesszorok – extra utasítások

4. RISC (Reduced Instruction Set), CISC architektura ???

IV. Mikroprocesszor típusok

1. INTEL 8080, 8086, 80286, 80386

2. Z80, Z8000 (Zilog)

3. Motorola 68000

4. CMOS 6500, 8500, 8501 (Commodore gépek)

V. Alacsony- és gépi szintű nyelvek különbsége

VI. Alacsony- és magasszintű nyelvek különbsége

INTEL 8086 assembly

I. Általános jellemzők

1. Legkisebb elérhető egység: byte

2. 16 bites processzor 2 16 bites elemi egységek

3. Címzés: 2 byte-os 2 64 Kbyte elérhető

4. Szegmensenkénti címzés: cím=X*szegmenscím+eltolás (X=16)

2 így 1 Mbyte címezhető

II. Regiszterek

1.	AX – akkumulátor (alapregiszter) (AL,AH)

BX – bázisregiszter (indexelés) (BL,BH)

CX – számláló (ciklusszervezés) (CL,CH)

DX – adatregiszter (input-output) (DL,DH)

2.	BX-hez segédregiszterek:

SI – forrás

DI – cél

BP – mutató

3.	SP – veremmutató

IP – utasításszámláló

4. Szegmensregiszterek:

CS – kód

DS – adat

SS – verem

ES – extra

5. Feltételregiszter

CF – átvitel

PF – alsó byte paritása

AF – közbülső átvitel (3.->4. bit)

ZF – zérus

SF – előjel

OF – túlcsordulás

DF – tartományművelet iránya

IF – megszakítás

TF – nyomkövetés, lépésenkénti végrehajtás

III. Címzési módok

1. Regiszter

2. Konstans (szám, 'karakter', számH, számB)

3. Direkt cím

4. Indexelés	(DS: eltolás + [BX] + [SI vagy DI]

DS: eltolás + [SI vagy DI + konstans]

DS: eltolás + [BP]

5. Hasonló van a verem szegmensregiszterhez is.

IV. Utasítástípusok

1. Mozgatás (MOV,LEA,XCHG,PUSH,POP,LES,LDS,...)

2. Aritmetika, logika (ADD,ADC,SUB,SBB,INC,DEC,NEG,CMP,OR,XOR,AND, TEST, NOT,MUL,DIV,IMUL,IDIV,...)

3. Léptetés (ROL,ROR,RCL,RCR,SHL,SHR,SAL,SAR)

4. Vezérlés (JA,JB,JE,összetétel,tagadás,JG,JL,JE,összetétel,tagadás,JC,JS,JO,JZ,JP, tagadás,JMP, LOOP,LOOPE,LOOPNE,LOOPZ,LOOPNZ, CALL,RET)

5. F-bitek kezelése (CLC,STC,CMC,...)

6. Memóriatartomány: stringműveletek

7. Input-output (IN,OUT)

8. Megszakításkezelés (INT,IRET)

V. Assembler direktívák

1. Programszerkezet definiálás

(szegmens: név	SEGMENT
...
név	ENDS
END indítási cím

szegmensregiszter: ASSUME regiszter: szegmensnév

ORG

szubrutin:	név PROC
...
név ENDP

külső szimbólum)

2. Szimbólum definiálás

(byte: DB, szó: DW, tárterület: DS, cím: OFFSET, címke, szimbolikus név: EQU)

3. Makrók

4. Adatszerkezet definiálás

5. Fordításvezérlés

6. Listázás

7. Kifejezések

VI. Intel 80287 koprocesszor műveletek (veremben az operandusok)

1. Egész számok: +, –, *, /, =, mod, round

2. Valós számok: +, –, *, /, =, gyök, abs, negálás, 0=

3. Konstansok a verembe: 0, 1, , log210, log2e, log102, ln2

4. Sin,cos,tan,arctan,...

VII. Assembly eljárás hívása Pascalból

1. Hívó eljárás: eljárás(A,B)

2. Hívott eljárás:

eljárás	PROC NEAR
PUSH BP
MOV BP,SP
...
MOV SI,[BP+6]; első paraméter (input)
MOV AX,[SI]
...
MOV DI,[BP+4] ; második paraméter (output)
MOV [DI],AX
...
POP BP
RET 4; két paraméter törlése

verem:	visszatérési cím
második paraméter
első paraméter

Hatékony algoritmusok gépi kódhoz

I. Matematikai műveletek

1. Szorzás 10-zel ( 10*x = 8*x + 2*x = 2* (4*x + x) )

2. Sok byte-os számok összeadása (mikrológia 2)

3. Sok byte-os számok kivonása (mikrológia 2)

4. Szorzás

Szoroz(X,Y,C):
A:=X: B:=Y: C:=0
Ciklus amíg B>0
Ha B páros akkor A:=A*2: B:=B/2
különben C:=C+A: B:=B–1
Ciklus vége
Eljárás vége.

5. Hatványozás

Hatványoz(X,Y,C):
A:=X: B:=Y: C:=1
Ciklus amíg B>0
Ha B páros akkor A:=A*A: B:=B/2
különben C:=C*A: B:=B–1
Ciklus vége
Eljárás vége.

6. Lnko, oszthatóság (ugyanezen elven)

7. Négyzetgyök egészrész

(A: A^2<=X<(A+1)^2,

B=(A+1)^2,

C=2*A+1 – A+1. páratlan)

Gyök(X,A):
A:=0: B:=1: C:=1
Ciklus amíg B<=X
A:=A+1: C:=C+2: B:=B+C
Ciklus vége
Eljárás vége.

8. Osztás 10-zel

Osztás(OSZTANDO,HANYADOS,MARADEK):
MARADEK:=OSZTANDO: HANYADOS:=0 [THCIM:=hatványok címe]
Ciklus K=4-től 1-ig –1-esével
TH:=10^K: HANYADOS:=HANYADOS*10–1
[ TH:=(THCIM): THCIM:=THCIM+1 ]
Ciklus
HANYADOS:=HANYADOS+1: MARADEK:=MARADEK–TH
amíg MARADEK10
Ciklus vége
MARADEK:=MARADEK+TH
Ciklus vége
Eljárás vége.

9. Osztás – maradékszámítás

Maradék(A,OSZTO):
S:=0
Ciklus amíg OSZTO legfelső bitje=0
OSZTO:=OSZTO*2 [Balra(OSZTO)]: S:=S+1
Ciklus vége
Ciklus amíg S>0
Ciklus amíg A>0
A:=A–OSZTO
Ciklus vége
A:=A+OSZTO: OSZTO:=OSZTO/2 [jobbra(OSZTO)]: S:=S–1
Ciklus vége
Eljárás vége.

10. Oszthatóság vizsgálat

11. Sok byte-os számok szorzása (mikrológia 2)

II. Konverzió

1. Bináris 1 Karakteres

Kiír(BIN):
CIM:=kezdőcím
Ciklus 16-szor
Balra(BIN)
A:=kilépő bit+'0'
(CIM):=A: CIM:=CIM+1
Ciklus vége
Eljárás vége.

2. Bináris 1 Decimális (10-zel osztás)

Átalakít(H):
CIM:=végcím
Ciklus
H,MARADEK:=Osztás(H,10)
(CIM):=MARADEK
CIM:=CIM–1
amíg H10
Ciklus vége
Eljárás vége.

3. Decimális 1 Bináris

Átalakít(BIN):
CIM:=decimális szám címe : BIN:=0
Ciklus amíg (CIM) számjegy
A:=(CIM) számértéke
BIN:=BIN*10+A
CIM:=CIM+1
Ciklus vége
Eljárás vége.

4. Bináris 1 Hexadecimális

Programozási nyelvek - előadás vázlatok

22

Programozási nyelvek osztályozása

Csilla Laci

2004-06-23T23:45:00

Peter Szamoskozi