Névjegyek

Az összeszerelő program felépítése. Alapvető információk a szerelési nyelvről. A tudományágban "Rendszerprogramozás. A parancs szerkezete az assembly nyelvben tartalmaz

1. PC architektúra ………………………………………………………… 5

    1.1. Regiszterek.

    1.1.1 Általános célú nyilvántartások.

1.1.2. Szegmensregiszterek

1.1.3 A zászlók nyilvántartása

1.2. A memória szervezése.

1.3. Adatok bemutatása.

1.3.1 Adattípusok

1.3.2 Karakterek és karakterláncok ábrázolása

2. Az összeszerelő program üzemeltetői ……………………………………

    1. Összeszerelési nyelvi parancsok

2.2. Címzési módok és gépi utasításformátumok

3. Ál-operátorok ……………………………………………………….

3.1 Adatmeghatározási irányelvek

3.2 Az assembly nyelvű program felépítése

3.2.1 Programszegmensek. Tegyük fel az irányelvet

3.2.3 Egyszerűsített szegmentálási irányelv

4. A program összeállítása és összekapcsolása ………………………….

5. Adatok küldésére vonatkozó parancsok …………………………………………….

    5.1 Általános parancsok

    5.2 Parancsok a veremmel való munkavégzéshez

5.3 I / O parancsok

5.4 Címtovábbítási parancsok

5.5 Parancsok a zászlók továbbítására

6. Aritmetikai parancsok …………………………………………….

    6.1 Aritmetikai műveletek bináris egész számokkal

6.1.1 Összeadás és kivonás

6.1.2 Parancsok a vevő növekményéhez és csökkentéséhez eggyel

6.2 Szorzás és osztás

6.3 Jelek megváltoztatása

7. Logikai műveletek ……………………………………………….

8. Műszakok és ciklikus műszakok …………………………………………

9. String műveletek ………………………………………………….

10. A programok logikája és szervezése ………………………………………

10.1 Feltétel nélküli ugrások

10.2 Feltételes ugrások

10.4 Rutinok az összeszerelési nyelven

10.5 INT megszakítások

10.6 Rendszerszoftver

10.6.1.1 A billentyűzet olvasása.

10.6.1.2 Karakterek megjelenítése a képernyőn

10.6.1.3 Programok befejezése.

10.6.2.1 A megjelenítési módok kiválasztása

11. Lemezmemória ……………………………………………………… ..

11.2 Fájlkiosztási táblázat

11.3 Lemez I / O

11.3.1 Fájl írása lemezre

11.3.1.1 ASCIIZ formátumú adatok

11.3.1.2 Fájlszám

11.3.1.3 Lemezfájl létrehozása

11.3.2 Lemezfájl olvasása

Bevezetés

Az összeszerelési nyelv a gépi nyelv szimbolikus ábrázolása. A személyi számítógép (PC) minden folyamatát a legalacsonyabb, hardver szinten csak a gépi nyelvű parancsok (utasítások) hajtják végre. Lehetetlen megoldani a hardverrel kapcsolatos problémákat (vagy akár a hardvertől függő problémákat, például a program teljesítményének javítását) az összeszerelő ismerete nélkül.

Az Assembler a parancsok kényelmes formája közvetlenül a PC -összetevők számára, és ismereteket igényel az ezeket az összetevőket tartalmazó integrált áramkör, nevezetesen a PC mikroprocesszor tulajdonságairól és képességeiről. Így az összeszerelési nyelv közvetlenül kapcsolódik a PC belső szervezetéhez. És nem véletlen, hogy a magas szintű nyelvek szinte minden fordítója támogatja az összeszerelési nyelv programozási szintjének elérését.

A professzionális programozó képzésének eleme szükségszerűen az assembler tanulmánya. Ennek oka, hogy az összeszerelési nyelv programozásához szükség van a PC architektúrájának ismeretére, amely lehetővé teszi, hogy hatékonyabb programokat készítsünk más nyelveken, és összekapcsolhassuk őket az assembly nyelvű programokkal.

A kézikönyv az Intel mikroprocesszorán alapuló számítógépek összeszerelési nyelvű programozásának kérdéseivel foglalkozik.

Ez az oktatóanyag azoknak szól, akiket érdekel a processzor architektúra és az összeállítási nyelv programozásának alapjai, elsősorban a szoftverfejlesztőknek.

    PC architektúra.

A számítógépes architektúra a számítógép absztrakt ábrázolása, amely tükrözi annak szerkezeti, áramköri és logikai felépítését.

Minden modern számítógép rendelkezik néhány közös és egyedi tulajdonsággal. Az egyedi tulajdonságok csak egy adott számítógépes modellben rejlenek.

A számítógépes architektúra fogalma a következőket tartalmazza:

    a számítógép tömbvázlata;

    a számítógépes tömbvázlat elemeihez való hozzáférés eszközei és módszerei;

    a nyilvántartások beállítása és elérhetősége;

    a megszólítás szervezése és módszerei;

    a számítógépes adatok bemutatásának módja és formátuma;

    számítógép -gép utasítások halmaza;

    a gépi utasítások formátumai;

    megszakítani a kezelést.

A számítógépes hardver fő elemei: a rendszeregység, a billentyűzet, a megjelenítő eszközök, a lemezmeghajtók, a nyomtatóeszközök (nyomtató) és a különböző kommunikációs lehetőségek. A rendszeregység alaplapból, tápegységből és további kártyák bővítőhelyeiből áll. Az alaplapon található egy mikroprocesszor, csak olvasható memória (ROM), véletlen hozzáférésű memória (RAM) és egy társprocesszor.

      Regiszterek.

A mikroprocesszoron belül az információk 32 regiszterből állnak (16 felhasználói regiszter, 16 rendszerregiszter), bizonyos mértékben a programozó számára. Mivel az oktatóanyag a 8088-i486 mikroprocesszor programozására szolgál, a leglogikusabb ezt a témát a felhasználó számára elérhető mikroprocesszor belső regisztereinek megvitatásával kezdeni.

A felhasználói regisztereket a programozó használja programok írására. Ezek a nyilvántartások a következők:

    nyolc 32 bites regiszter (általános célú regiszter): EAX / AX / AH / AL, EBX / BX / BH / BL, ECX / CX / CH / CL, EDX / DX / DLH / DL, EBP / BP, ESI / SI, EDI / DI, ESP / SP;

    hat 16 bites szegmensregiszter: CS, DS, SS, ES, FS, GS;

    állapot- és vezérlőregiszterek: EFLAGS / FLAGS zászlóregiszter és EIP / IP utasításmutató regiszter.

A perjel egyetlen 32 bites regiszter részeit jelöli. Az E (kiterjesztett) előtag a 32 bites regiszter használatát jelöli. A bájtok kezeléséhez L (alacsony) és H (magas) előtagú regisztereket használnak, például AL, CH - a regiszterek 16 bites részeinek alacsony és magas bájtjait jelölik.

        Általános célú nyilvántartások.

EAX / AX / AH / AL (Akkumulátor regiszter) - akkumulátor... Szorzásban és osztásban, I / O műveletekben és egyes karakterlánc -műveletekben használatos.

EBX / BX / BH / BL - alapnyilvántartás(alapregiszter), gyakran használják a memóriában lévő adatok címzésekor.

ECX / CX / CH / CL - számláló(számláló regiszter), hurokismétlés számlálóként használható.

EDX / DX / DH / DL - adatnyilvántartás(adatregiszter), köztes adatok tárolására szolgál. Néhány parancs esetében kötelező.

A csoport összes regisztere lehetővé teszi az "alsó" részekhez való hozzáférést. Ezen regisztereknek csak az alsó 16 és 8 bites részei használhatók öncímzésre. Ezen regiszterek felső 16 bitje nem érhető el független objektumként.

A 32, 16 vagy 8 bites elemláncok egymást követő feldolgozását lehetővé tevő sorfeldolgozó parancsok támogatásához a következőket kell használni:

ESI / SI (forrás index regiszter) - index forrás... Az aktuális forráselem címét tartalmazza.

EDI / DI (distination index register) - index vevő(befogadó). Az aktuális címet tartalmazza a vevő karakterláncban.

A mikroprocesszor architektúrájában az adatstruktúra - verem - hardver -szoftver szinten támogatott. A veremmel való munkavégzéshez speciális parancsok és speciális regiszterek vannak. Meg kell jegyezni, hogy a verem kisebb címek felé van feltöltve.

ESP / SP (verem poINTer regiszter) - Regisztráció mutató Kazal... Az aktuális verem szegmensben a verem tetejére mutató mutatót tartalmazza.

EBP / BP (alap poINTer regiszter) - verem alapmutató regiszter... Úgy tervezték, hogy véletlenszerű hozzáférést biztosítson a veremben lévő adatokhoz.

1.1.2. Szegmensregiszterek

A mikroprocesszor szoftvermodelljében hat van szegmensregiszterek: CS, SS, DS, ES, GS, FS. Létezésük az Intel mikroprocesszorok által a RAM megszervezésének és használatának sajátosságainak köszönhető. A mikroprocesszor hardvere támogatja a program strukturális felépítését szegmensek. A szegmensregiszterek a jelenleg elérhető szegmensek jelzésére szolgálnak. A mikroprocesszor a következő szegmens típusokat támogatja:

    Kód szegmens. Programparancsokat tartalmaz. A szegmens eléréséhez használja a CS (kódszegmens regiszter) regisztert - szegmenskód regiszter... Tartalmazza a gépi utasítás szegmens címét, amelyhez a mikroprocesszor hozzáfér.

    Adatszegmens. A program által feldolgozott adatokat tartalmazza. A szegmens eléréséhez használja a DS (adatszegmensregiszter) regisztert - szegmens adatregiszter amely tárolja az aktuális program adatszegmensének címét.

    Stack szegmens. Ez a szegmens a veremnek nevezett memóriaterületet jelenti. A mikroprocesszor a verem megszervezését az elv szerint rendezi, első sorban. Az SS (stack segment register) regiszter a verem eléréséhez használható - verem szegmens regiszter a veremszegmens címét tartalmazza.

    További adatok szegmens. A feldolgozott adatok három további adatszegmensben lehetnek. Alapértelmezés szerint az adatok az adatszegmensben vannak. További adatszegmensek használatakor a címeiket kifejezetten meg kell adni a parancs speciális szegmens felülírási előtagjaival. A további adatszegmensek címét az ES, GS, FS (extenSIon data segment register) nyilvántartásokban kell feltüntetni.

        Ellenőrzési és állapotregiszterek

A mikroprocesszor számos regisztert tartalmaz, amelyek információkat tartalmaznak mind a mikroprocesszor, mind annak a programnak az állapotáról, amelynek parancsai jelenleg betöltődnek a folyamatba. Azt:

EIP / IP parancsmutató regiszter;

    zászlók regisztrálása EFLAGS / FLAGS.

Ezen regiszterek használatával információkat kaphat a parancs végrehajtásának eredményeiről, és befolyásolhatja a mikroprocesszor állapotát.

EIP / IP (utasítás poINTer regiszter) - mutató csapatok... Az EIP / IP regiszter 32 vagy 16 bit széles, és tartalmazza a következő végrehajtandó utasítás eltolását az aktuális utasításszegmens CS szegmensregiszterének tartalmához képest. Ez a regiszter nem érhető el közvetlenül, de ugrásparancsokkal megváltoztatható.

EFLAGS / FLAGS (zászlónyilvántartás) - Regisztráció zászlók... Bitmélység 32/16 bit. A regiszter egyes bitjeinek meghatározott funkcionális célja van, és zászlóknak nevezik őket. A zászló egy bit, amely 1 értéket vesz fel ("a zászló be van állítva"), ha egy bizonyos feltétel teljesül, és 0 értéket ("a zászló törlődik"), különben. Ennek a regiszternek az alsó része teljesen analóg az i8086 FLAGS regiszterével.

1.1.3 A zászlók nyilvántartása

A zászlók regisztere 32 bites, és EFLAGS névvel rendelkezik (1. ábra). A regiszter egyes bitjeinek meghatározott funkcionális célja van, és zászlóknak nevezik őket. Mindegyikhez meghatározott nevet rendelnek (ZF, CF stb.). Az EFLAGS alsó 16 bitje az i086 és i286 mikroprocesszorra írt programok végrehajtásakor használt 16 bites FLAGS jelzőregisztert jelenti.

1. ábra A zászlók regisztere

Egyes zászlókat általában állapotjelzőknek neveznek; a parancsok végrehajtásakor automatikusan megváltoznak, és javítják eredményük bizonyos tulajdonságait (például, hogy egyenlő -e nullával). Más zászlókat állami zászlóknak neveznek; megváltoznak a programtól, és befolyásolják a processzor további viselkedését (például blokkmegszakítások).

Állapotjelzők:

CF (hordozható zászló) - zászlót hordani... Akkor veszi fel az 1 értéket, ha egész számok összeadásakor megjelenik egy elválasztó egység, amely nem "illeszkedik" a bitrácsba, vagy ha az előjel nélküli számok kivonásakor az első kisebb, mint a második. A shift parancsokban a bitrácson túlmutató bit CF -ben van beállítva. A CF rögzíti a szorzás parancs jellemzőit is.

OF (túlcsordulás jelző) - túlcsordulás zászló... 1 -re van állítva, ha aláírt egész számok összeadásakor vagy kivonásakor olyan eredményt kapunk, amely abszolút értékben nagyobb, mint a megengedett érték (a mantissa túlcsordult, és "bemászott" a jelbitbe).

ZF (nulla zászló) - nulla zászló... 1 -re van állítva, ha a parancs eredménye 0 volt.

SF (SIgn zászló) - zászló jel... 1 -re van állítva, ha az aláírt számokkal végzett művelet negatív eredményt eredményez.

PF (paritás zászló) - zászló paritás... 1, ha a következő parancs eredménye páros számú bináris parancsot tartalmaz. Általában csak az I / O műveleteknél veszik figyelembe.

AF (segédhordozó zászló) - extra hordozható zászló... Javítja a bináris-tizedes számokkal végzett műveletek sajátosságait.

Állapotjelzők:

DF (irányjelző) - irány zászló... Beállítja a sorok megtekintésének irányát karakterlánc -parancsokban: DF = 0 esetén a sorok "előre" (az elejétől a végéig), míg DF = 1 - az ellenkező irányba kerülnek beolvasásra.

IOPL (bemeneti / kimeneti jogosultsági szint) - I / O jogosultsági szint. A mikroprocesszor védett módjában használják az I / O parancsokhoz való hozzáférés vezérlésére, a feladat jogosultságától függően.

NT (beágyazott feladat) - feladat fészkelő zászló. A mikroprocesszor védett módjában használják annak a ténynek a rögzítésére, hogy az egyik feladat be van ágyazva a másikba.

Rendszer zászló:

HA (INTerrupt zászló) - megszakítás zászló... IF = 0 esetén a processzor nem reagál a bejövő megszakításokra, IF = 1 esetén a megszakítási zár kiold.

TF (csapda zászló) - nyomjelző zászló... Ha TF = 1, akkor az egyes utasítások végrehajtása után a processzor megszakítást hajt végre (1 -es számmal), amely felhasználható a program hibakeresésekor annak nyomon követésére.

RF (önéletrajz jelző) - folytatás zászló... A hibakeresési regiszterekből származó megszakítások kezelésére szolgál.

VM (virtuális 8086 mód) - virtuális 8086 zászló. Az 1 processzor virtuális 8086 módban működik. 0- a processzor valós vagy védett módban.

AC (igazítás ellenőrzés) - igazítási vezérlő zászló.Úgy tervezték, hogy lehetővé tegye az igazítást a memória elérésekor.

      A memória szervezése.

Az a fizikai memória, amelyhez a mikroprocesszor hozzáfér RAM ( vagy véletlen hozzáférésű memória - RAM). A RAM egy bájtlánc, amelyek saját egyedi címmel (számmal) rendelkeznek, ún fizikai. A fizikai címek értéktartománya 0 és 4 GB között van. A memóriakezelési mechanizmus teljesen hardveralapú.

A mikroprocesszor számos RAM -modellt támogat hardveresen:

    szegmentált modell... Ebben a modellben a programok memóriája szomszédos memóriaterületekre (szegmensekre) van felosztva, és maga a program csak azokhoz az adatokhoz fér hozzá, amelyek ezekben a szegmensekben vannak;

    oldal modellje... Ebben az esetben a RAM 4 KB rögzített méretű blokkok halmazának tekintendő. Ennek a modellnek a fő alkalmazása a virtuális memória megszervezéséhez kapcsolódik, amely lehetővé teszi a programok számára, hogy nagyobb memóriaterületet használjanak, mint a fizikai memória mennyisége. Pentium mikroprocesszor esetén a lehetséges virtuális memória akár 4 TB is lehet.

Ezen modellek használata és megvalósítása a mikroprocesszor működési módjától függ:

    Valódi cím mód (valós mód). A mód hasonló az i8086 processzor működéséhez. Szükséges a korai processzormodellekhez kifejlesztett programok működéséhez.

    Védett mód. Védett módban lehetővé válik a többfeladatos információfeldolgozás, a memóriavédelem négyszintű jogosultsági mechanizmus használatával és annak lapozása.

    Virtuális 8086 mód. Ebben az üzemmódban több program futtatása válik lehetővé az i8086 számára. Ebben az esetben a valós módú programok működtetése lehetséges.

A szegmentálás egy címzési mechanizmus, amely lehetővé teszi több független címtér létezését. A szegmens független, hardveresen támogatott memóriablokk.

Általában minden program tetszőleges számú szegmensből állhat, de közvetlen hozzáféréssel rendelkezik három főhöz: kódhoz, adatokhoz és veremhez - és egy -három további adatszegmenshez. Az operációs rendszer programszegmenseket helyez el a RAM -ban meghatározott fizikai címeken, majd elhelyezi ezen címek értékeit a megfelelő regiszterekben. Egy szegmensen belül a program a szegmens elejéhez viszonyított címeket lineárisan, azaz a 0 -tól kezdve a szegmens méretével megegyező címmel végzi. Relatív cím ill Elfogultság, amelyet a mikroprocesszor a szegmensen belüli adatok eléréséhez használ hatékony.

Fizikai cím kialakítása valós módban

Valós módban a fizikai cím változási tartománya 0 MB -tól 1 MB -ig terjed. A szegmens maximális mérete 64 KB. Amikor egy konkrétra hivatkozunk valódi cím A RAM -ot a szegmens elejének címe és a szegmensen belüli eltolás határozza meg. A szegmens kezdőcíme a megfelelő szegmensregiszterből származik. Ebben az esetben a szegmensregiszter csak a szegmens elejének fizikai címének felső 16 bitjét tartalmazza. A 20 bites cím legkevésbé jelentős négy bitjét úgy kapjuk meg, hogy a szegmensregiszter értékét 4 bittel balra toljuk. A váltási műveletet hardverben hajtják végre. A kapott 20 bites érték a szegmens elejének megfelelő valós fizikai cím. Azaz fizikai cím párként van megadva: szegmens: eltolás, ahol a szegmens a memória szegmens kezdőcímének első 16 bitje, amelyhez a cella tartozik, és az eltolás ennek a cellának a 16 bites címe, a memória kezdetétől számítva szegmens (16 * szegmens + eltolás megadja az abszolút cellacímet). Ha például a CS regiszter tárolja az 1234h értéket, akkor az 1234h: 507h címpár egy abszolút címet határoz meg, amely 16 * 1234h + 507h = 12340h + 507h = 12847h. Egy ilyen pár kettős szó formájában van írva, és (mint a számok esetében) "fordított" formában: az első szó eltolást tartalmaz, a második pedig egy szegmenst, és ezek a szavak egymás után kerülnek bemutatásra "fordított" forma. Például az 1234h: 5678h pár így lesz írva: | 78. | 56. | 34 | 12 |.

Ez a fizikai cím kialakításának mechanizmusa lehetővé teszi a szoftver áthelyezését, azaz nem függ a RAM -ba való betöltés konkrét címeitől.

Cél szerint a parancsok megkülönböztethetők (zárójelben példák a számítógépes összeszerelő parancsok mnemonikus műveleti kódjaira, például az IBM PC -re):

l számtani műveletek végrehajtása (ADD és ADC - összeadás és összeadás átutalással, SUB és SBB - kivonás és kivonás kölcsönnel, MUL és IMUL - előjel nélküli és aláírt szorzás, DIV és IDIV - aláíratlan és aláírt osztások, CMP - összehasonlítások stb.) ;

l logikai műveletek végrehajtása (VAGY, ÉS, NEM, XOR, TESZT, stb.);

l adatátvitel (MOV - küldés, XCHG - csere, IN - belépés a mikroprocesszorba, OUT - kimenet a mikroprocesszorból stb.);

l a vezérlés átadása (programágak: JMP - feltétel nélküli ugrás, CALL - eljáráshívás, RET - visszatérés az eljárásból, J * - feltételes ugrás, LOOP - hurokvezérlés stb.);

l karakterláncok feldolgozása (MOVS - átvitel, CMPS - összehasonlítások, LODS - letöltések, SCAS - szkennelések. Ezeket a parancsokat általában a REP előtaggal (ismétlésmódosító) használják;

l a program megszakításai (INT - szoftver megszakítás, INTO - feltételes megszakítás túlcsordulás esetén, IRET - visszatérés a megszakításból);

l mikroprocesszoros vezérlés (ST * és CL * - zászlók beállítása és törlése, HLT - leállítás, VÁRÁS - várakozás, NOP - alapjárat stb.).

Az assembler parancsok teljes listája megtalálható a művekben.

Adatátviteli parancsok

l MOV dst, src - adatátvitel (lépés - átvitel az src -ről a dst -re).

Átvitel: egy bájt (ha az src és a dst bájt formátumban van) vagy egy szó (ha az src és a dst szóformátumban van) a regiszterek között vagy a regiszter és a memória között, és azonnali értéket is ír a regiszterbe vagy a memóriába.

A dst és az src operandusoknak ugyanabban a bájtban vagy szóformátumban kell lenniük.

Az Src típusa lehet: r (regiszter) - regiszter, m (memória) - memória, i (impedancia) - azonnali érték. A Dst lehet r, m típusú. Nem használhatja a következő operandusokat egy parancsban: rsegm együtt i; két m típusú operandus és két rsegm típusú operandus). Az i operandus egyszerű kifejezés is lehet:

mov AX, (152 + 101B) / 15

A kifejezés csak a fordítás során kerül értékelésre. Nem változtatja meg a zászlókat.

l PUSH src - szó tolása a veremre (nyomja meg - áttol; nyomja a veremre az src -ből). Az src tartalmát a verem tetejére tolja-bármely 16 bites regisztert (beleértve a szegmenseket is) vagy két 16 bites szót tartalmazó memóriahelyet. A zászlók nem változnak;

l POP dst - pattintson ki egy szót a veremből (pop - pop; olvassa a veremből a dst -be). Letép egy szót a verem tetejéről, és elhelyezi a dst -ben - bármely 16 bites regiszterben (beleértve a szegmenst is) vagy két memóriahelyen. A zászlók nem változnak.

Téma 2.5 A processzor programozásának alapjai

A program hosszának növekedésével egyre nehezebb megjegyezni a kódokat a különböző műveletekhez. A mnemonikus jelölések némi segítséget nyújtanak e tekintetben.

A parancsot szimbolikus kódolási nyelvnek hívják szerelő.

Assembly nyelv Olyan nyelv, amelyen minden utasítás pontosan egy gépi utasításnak felel meg.

Összeszerelés az úgynevezett program konvertálása a assembly nyelvből, azaz a program gépi nyelven történő előkészítése a szimbolikus műveleti nevek gépi kódokkal, a szimbolikus címek abszolút vagy relatív számokkal történő felváltásával, valamint a könyvtári programok beillesztése és a szimbolikus sorozatok generálása parancsokat a mikroutasítások specifikus paramétereinek megadásával. Ez a program általában a ROM -ban található, vagy valamilyen külső adathordozóról kerül a RAM -ba.

Az összeszerelési nyelv számos olyan tulajdonsággal rendelkezik, amelyek megkülönböztetik a magas szintű nyelvektől:

1. Ez egy az egyben a megfelelés az összeszerelési nyelv és a gépi utasítások között.

2. Az összeállítási nyelv programozója hozzáfér a célgépen lévő összes objektumhoz és parancshoz.

A gépi orientált nyelveken történő programozás alapjainak megértése hasznos lehet:



A PC -architektúra jobb megértése és a számítógépek intelligensebb használata;

Racionálisabb algoritmusstruktúrák kidolgozása az alkalmazott problémák megoldására szolgáló programokhoz;

Képesség a végrehajtható programok megtekintésére és javítására az .exe és.com kiterjesztésekkel, amelyeket bármely magas szintű nyelvről összeállítottak, az eredeti programok elvesztése esetén (a megadott programok behívásával a DEBUG program hibakeresőjébe, és megjelenítésük összeállítása az összeállítási nyelven) );

Programok összeállítása a legkritikusabb problémák megoldására (a géporientált nyelven írt program általában hatékonyabb-rövidebb és gyorsabb, a magas szintű nyelvekről történő fordítás eredményeként kapott programok 30-60 százaléka)

A főprogramban, külön töredékek formájában szereplő eljárások végrehajtására abban az esetben, ha azokat nem lehet végrehajtani sem a használt magas szintű nyelven, sem az operációs rendszer szolgáltatási eljárásainak használatával.

Az összeszerelési nyelvi program csak ugyanazon család számítógépén futtatható, míg a magas szintű nyelven írt program potenciálisan különböző gépeken is futhat.

Az összeállítási nyelv ábécéje ASCII karakterekből áll.

Csak egész számok. Megkülönböztetni:

Bináris számok, amelyek B betűvel végződnek;

Tizedes számok, amelyek D betűvel végződnek;

Hexadecimális számok, amelyek N betűvel végződnek.

RAM, regiszterek, adatok bemutatása

A képviselők egy bizonyos sorozatához egyéni programozási nyelvet használnak - az összeszerelési nyelvet.

Az összeszerelési nyelv közbenső helyet foglal el a gépi kódok és a magas szintű nyelvek között. Ezen a nyelven könnyebb programozni. Az assembly nyelvű program racionálisabban használja ki az adott gép (pontosabban MP) képességeit, mint a magas szintű nyelven futó program (ami könnyebb egy programozó számára, mint az összeszerelő). Tekintsük a géporientált nyelveken történő programozás alapelveit az MP KR580VM80 assembler nyelvének példáján keresztül. Egy általános technikát használnak a nyelv programozására. A programok rögzítésének konkrét technikái a cél MT architektúrájához és parancsrendszeréhez kapcsolódnak.

Az MP KR580VM80 alapú mikroprocesszoros rendszer programmodellje

Az MPS szoftvermodellje az 1. ábra szerint

MP port memória

S Z AC P C

1. kép

A programozó szemszögéből az MP KR580VM80 a következő szoftverrel elérhető regiszterekkel rendelkezik.

A- 8 bites regiszter akkumulátor. Ez az MP fő nyilvántartása. Az ALU -ban végrehajtott bármely művelet feltételezi az egyik feldolgozandó operandus elhelyezését az akkumulátorban. A művelet eredményét az ALU -ban is általában A -ban tárolják.

B, C, D, E, H, L- 8 bites általános célú regiszterek (RON). Belső memória MP. A feldolgozott információk, valamint a művelet eredményeinek tárolására tervezték. 16 bites szavak feldolgozásakor a regiszterekből BC, DE, HL párok keletkeznek, és a kettős regisztert első betűnek nevezik - B, D, H. Egy regiszterpárban az első regiszter a legmagasabb. A H, L regisztereknek van egy speciális tulajdonsága, amelyek mind az adatok tárolására, mind a RAM-cellák 16 bites címeinek tárolására szolgálnak.

FL- zászlók regisztere (jelek regisztere) 8 bites regiszter, amelyben az MP-ben végrehajtott aritmetikai és logikai műveletek eredményének öt jele tárolódik. FL formátum az ábrán látható módon

C bit (CY - carry) - szállítás, állítsa 1 -re, ha az aritmetikai műveletek végrehajtásakor a bájt legjelentősebb bitjéről volt átvitel.

P bit (paritás) - paritás, 1 -re állítva, ha az eredmény bitjeiben lévők száma páros.

Az AC bit egy kiegészítő hordozó, amely az eredmény alsó rágógombjából származó hordozási érték tárolására szolgál.

Z bit (nulla) - állítsa 1 -re, ha a művelet eredménye 0.

S számjegy (előjel) - állítsa 1 -re, ha az eredmény negatív, és 0 -ra, ha az eredmény pozitív.

SP–- veremmutató, 16 bites regiszter, annak a memóriacellának a címét hivatott tárolni, amelyre a verembe utoljára beírt bájt került.

RS- programszámláló (programszámláló), 16 bites regiszter, a következő végrehajtandó parancs címének tárolására szolgál. A parancsszámláló tartalma automatikusan 1 -gyel növekszik közvetlenül a következő parancsbájt mintavétele után.

A 0000H - 07FF cím kezdeti memóriaterülete a vezérlőprogramot és a demóprogramokat tartalmazza. Ez a ROM terület.

0800 - 0АFF - a vizsgált programok írásának címterülete. (RAM).

0В00 - 0ВВ0 - címterület az adatok rögzítéséhez. (RAM).

A 0BB0 a verem kezdőcíme. (RAM).

A verem a RAM speciálisan szervezett területe, amelyet adatok vagy címek ideiglenes tárolására terveztek. A veremre utoljára eltolt számot dobják ki először. A veremmutató tárolja a verem utolsó cellájának címét, ahol az információ íródik. Amikor egy alprogramot hívnak meg, a főprogram visszaküldési címe automatikusan mentésre kerül a veremre. Általános szabály, hogy minden egyes alprogram elején a végrehajtásban részt vevő összes regiszter tartalmát a veremre menti, és az alprogram végén visszaállítja a veremből.

Az összeállítási nyelvi parancsok adatformátuma és felépítése

Az MP KR580VM80 memóriája 8 bites szavakból álló tömb, amelyet bájtoknak neveznek. Az MP 65536 bájt memóriát tud címezni, amely ROM -ot és RAM -ot is tartalmazhat.

Adatformátum

Az adatok 8 bites szavakként tárolódnak a memóriában:

D7 D6 D5 D4 D3 D2 D1 D0

A legkevésbé jelentős bit a 0 bit, a legjelentősebb a 7 bit.

Egy parancsot a formátuma jellemez, vagyis a hozzá rendelt bitek száma, amelyeket bájt byte -onként meghatározott funkcionális mezőkre osztanak.

Parancsformátum

Az MP KR580VM80 parancsok egy, két vagy három bájtos formátumúak. Többbájtos parancsokat kell elhelyezni a szomszédos PL-kben. A parancs formátuma a végrehajtandó művelet sajátosságaitól függ.

A parancs első bájtja tartalmazza a mnemonikus opkódot.

Meghatározza a parancs formátumát és azokat a műveleteket, amelyeket az MT -nek végre kell hajtania az adatokon a végrehajtás során, valamint a címzés módját, és információkat is tartalmazhat az adatok helyéről.

A második és a harmadik bájt tartalmazhat adatokat, amelyeket meg kell dolgozni, vagy címeket, amelyek jelzik az adatok helyét. A manipulált adatokat operandusoknak nevezzük.

Egybájtos parancsformátum a 2. ábrán látható módon

4. ábra

Az összeszerelési nyelvi parancsokban a műveleti kód rövid angol nyelvű írásmódot tartalmaz - mnemonikus megjelölést. A mnemonika (a görög mnemonikából - a memorizálás művészete) megkönnyíti a parancsok emlékezését funkcionális céljuk szerint.

A végrehajtás előtt a forrásprogramot fordítóprogrammal, az úgynevezett assemblerrel lefordítják a kódkombinációk nyelvére - gépi nyelvre, ebben a formában az MP memóriájában található, majd a parancs végrehajtásakor használják.


Címzési módszerek

Minden operanduskódnak (bemenet és kimenet) valahol elhelyezkednie kell. Ezek az MP belső nyilvántartásaiban találhatók (a legkényelmesebb és leggyorsabb lehetőség). Ezek a rendszer memóriájában találhatók (a leggyakoribb lehetőség). Végül az I / O eszközökben tartózkodhatnak (a legritkább esetben). Az operandusok helyét a parancskód határozza meg. Különféle módszerek léteznek, amelyek segítségével az utasításkód meghatározhatja, hogy hol szerezze be a bemeneti operandust, és hová tegye a kimeneti operandust. Ezeket a módszereket címzési módszereknek nevezzük.

Az MP KR580VM80 esetében a következő címzési módok állnak rendelkezésre:

Azonnali;

Bejegyzett;

Közvetett;

Kazal.

Azonnali A címzés feltételezi, hogy az operandus (bemenet) közvetlenül az utasításkód után a memóriában van. Az operandus általában egy állandó, amelyet el kell küldeni valahová, hozzá kell adni valamihez stb. , és a legjelentősebb a harmadik bájt parancsokban.

Egyenes (ez is abszolút) a címzés feltételezi, hogy az operandus (bemenet vagy kimenet) a memóriában található azon a címen, amelynek kódja közvetlenül az utasításkód után a programon belül van. 3 bájtos parancsokban használatos.

Bejegyzett A címzés feltételezi, hogy az operandus (bemenet vagy kimenet) az MP belső regiszterében van. Egybájtos parancsokban használatos

Közvetett (implicit) címzés feltételezi, hogy az MP belső regiszterében nem maga az operandus található, hanem annak címe a memóriában.

Kazal címzés feltételezi, hogy a parancs nem tartalmaz címet. Memóriacellák címezése a 16 bites SP regiszter tartalmával (veremmutató).

Parancsrendszer

Az MP parancsrendszer az elemi műveletek teljes listája, amelyeket az MP képes végrehajtani. Az ezekkel a parancsokkal vezérelt MP egyszerű műveleteket hajt végre, például elemi számtani és logikai műveleteket, adatátvitelt, két érték összehasonlítását stb. Az MP KR580VM80 parancsok száma 78 (beleértve a 244 módosítást).

A következő parancscsoportokat különböztetjük meg:

Adatátvitel;

Számtan;

Összerakós játékaik;

Átmeneti parancsok;

I / O parancsok, vezérlés és a verem használata.


A parancsleírásokban és a programozásban használt szimbólumok és rövidítések

Szimbólum Csökkentés
ADDR 16 bites cím
ADAT 8 bites adat
ADATOK 16 16 bites adat
KIKÖTŐ 8 bites I / O cím (I / O eszközök)
BYTE 2 Második parancsbájt
BYTE 3 Harmadik parancsbájt
R, R1, R2 Az egyik regiszter: A, B, C, D, E, H, L
RP Az egyik regiszterpár: B - beállítja a BC párt; D - beállítja a DE párt; H - beállítja a HL párost
RH Egy pár első nyilvántartása
RL Egy pár második regisztere
Λ Logikai szorzás
V Logikai kiegészítés
Kiegészítés a második módszernek
M Memóriacella, amelynek címe beállítja a HL regiszterpár tartalmát, azaz M = (HL)

Tanfolyammunka

A "Rendszer programozás" tudományágban

4. téma: "Problémák megoldása az eljárásokhoz"

2. lehetőség

KELETI SZIBÉRIAI ÁLLAMI EGYETEM

TECHNOLÓGIA ÉS VEZÉRLÉS

____________________________________________________________________

TECHNOLÓGIAKOLLÉGIA

GYAKORLAT

szakdolgozathoz

Fegyelem:
Téma: Az eljárásokkal kapcsolatos problémák megoldása
Előadó (k): Glavinskaya Arina Aleksandrovna
Vezető: DambaevaSesegma Viktorovna
A munka összefoglalása: a rutinok tanulmányozása assembly nyelven,
problémamegoldás szubrutinok segítségével
1. Elméleti rész: Alapvető információk az összeszerelési nyelvről (készlet
parancsok, stb.), Alprogramok szervezése, A paraméterek átadásának módszerei
szubrutinokban
2. Gyakorlati rész: Készítsen két alprogramot, amelyek közül az egyik minden betűt nagybetűvé alakít át (beleértve az orosz betűket is), a másik pedig kisbetűvé alakítja a betűt.
minden betűt nagybetűvé alakít, a másik pedig kisbetűvé.
átalakítja a betűt kisbetűvé.
A projekt határideje a menetrend szerint:
1. Elméleti rész - 30% 7 hétre.
2. Gyakorlati rész - 70% 11 hétre.
3. Védelem - 100% -os 14 hét.
A regisztráció feltételei:
1. A tanfolyam projekt elszámolását és magyarázó jegyzetét be kell mutatni
elektronikus és nyomtatott példányok.
2. A jelentés terjedelmének legalább 20 géppel írt oldalnak kell lennie, a mellékletek kivételével.
3. Az RPZ-t a GOST 7.32-91 szerint állítják össze, és a fej aláírja.

Munkavezető __________________

Vállalkozó __________________

Kiadás dátuma " 26 " szeptember 2017 G.


Bevezetés. 2

1.1 Alapvető információk az Assembler nyelvről. 3

1.1.1 Parancskészlet. 4

1.2 Az alprogramok megszervezése a assembly nyelven. 4

1.3 A paraméterek átadásának módszerei alprogramokban. 6

1.3.1 Paraméterek átvitele a regisztereken keresztül .. 6

1.3.2 Paraméterek átadása a veremben. 7

2 GYAKORLATI SZAKASZ .. 9

2.1 Nyilatkozat a problémáról. kilenc

2.2 A probléma megoldásának leírása. kilenc

2.3 A program tesztelése .. 7

Következtetés. nyolc

Hivatkozások .. 9


Bevezetés

Köztudott, hogy az Assembler programozása nehéz. Mint tudják, most sok különböző nyelv létezik. magas szint amelyek lehetővé teszik, hogy sokkal kevesebb energiát fordítson a programok írására. Természetesen felmerül a kérdés, hogy egy programozónak mikor kell az Assembler programot írnia. Jelenleg két olyan területen van szükség az összeszerelési nyelv használatára, amely gyakran szükséges.

Először is ezek az úgynevezett gépfüggő rendszerprogramok, általában a számítógép különböző eszközeit vezérlik (az ilyen programokat illesztőprogramoknak nevezik). Ezek a rendszerprogramok speciális gépi utasításokat használnak, amelyeket nem kell normálisan használni (vagy ahogy mondani szokták alkalmazott) programok. Ezeket a parancsokat lehetetlen vagy nagyon nehéz meghatározni magas szintű nyelven.

Az Assembler második alkalmazási területe a programok végrehajtásának optimalizálásához kapcsolódik. Nagyon gyakran a magas szintű nyelvekről származó fordítóprogramok (fordítók) nagyon nem hatékony gépi nyelvű programot készítenek. Ez általában a számítástechnikai jellegű programokra vonatkozik, amelyekben a program nagyon kicsi (kb. 3-5%) szakasza (főhurok) fut a legtöbb esetben. A probléma megoldásához úgynevezett többnyelvű programozási rendszereket lehet használni, amelyek lehetővé teszik a program egyes részeinek különböző nyelveken történő írását. Jellemzően a program fő része magas szintű programozási nyelven íródott (Fortran, Pascal, C stb.), A program időkritikus részei pedig az Assembler-ben. Ebben az esetben a teljes program sebessége jelentősen növelhető. Gyakran ez az egyetlen módja annak, hogy a program ésszerű időn belül eredményt érjen el.

A kurzus célja, hogy gyakorlati ismereteket szerezzen az összeszerelési nyelv programozásában.

Munkafeladatok:

1. Ismerje meg az Assembler nyelvével kapcsolatos alapvető információkat (az Assembler program szerkezete és összetevői, parancsformátum, alprogramok szervezése stb.);

2. A bitműveletek típusainak tanulmányozása, az Assembler logikai utasításainak formátuma és logikája;

3. Oldjon meg egy egyedi problémát az alprogramok Assembler alkalmazásával kapcsolatban;

4 .. Fogalmazzon meg következtetést az elvégzett munkáról.

1 ELMÉLETI SZAKASZ

Az összeszerelési nyelv megértése

Az Assembler egy alacsony szintű programozási nyelv, amely ember által olvasható formátum a gépi utasítások írásához.

Az összeszerelési nyelvi utasítások egy az egyben megfelelnek a processzor utasításainak, és valójában a parancsok és érveik kényelmes szimbolikus jelölését (mnemonikus kódját) jelentik. Ezenkívül az összeszerelési nyelv alapvető szoftverkivonatokat is tartalmaz: a program egyes részeinek és adatainak összekapcsolása szimbolikus neveket és utasításokat tartalmazó címkéken keresztül.

Az Assembler irányelvei lehetővé teszik (kifejezetten leírt vagy fájlból olvasott) adatblokkok beépítését a programba; ismételjen meg egy bizonyos töredéket meghatározott számú alkalommal; töredék összeállítása feltételesen; állítsa be a töredék végrehajtási címét, módosítsa a címkék értékeit a fordítási folyamat során; makrókat használjon paraméterekkel stb.

Előnyök és hátrányok

· A redundáns kód minimális mennyisége (kevesebb utasítás és memóriahozzáférés használatával). Ennek eredményeként - nagyobb sebesség és kisebb programméret;

· Nagy mennyiségű kód, számos további apró feladat;

· A kód rossz olvashatósága, karbantartási nehézségek (hibakeresés, funkciók hozzáadása);

· A programozási paradigmák és bármely más kissé bonyolult egyezmény megvalósításának nehézsége, a közös fejlesztés összetettsége;

· Kevesebb könyvtár, alacsony kompatibilitás;

· Közvetlen hozzáférés a hardverhez: bemeneti-kimeneti portok, a processzor speciális regiszterei;

· Maximális "illeszkedés" a kívánt platformhoz (speciális utasítások, a "hardver" műszaki jellemzői);

· Más platformokkal szembeni intolerancia (kivéve a bináris kompatibilitást).

Az utasításokon kívül egy program tartalmazhat direktívákat: utasításokat, amelyek nem közvetlenül gépi utasításokká alakulnak, hanem a fordító működését vezérlik. A készletük és a szintaxisuk jelentősen változik, és nem a hardverplatformtól, hanem a használt fordítótól függ (ami az azonos architektúracsaládon belüli nyelvjárásokat eredményezi). Irányelvek halmazaként a következőket lehet kiemelni:

· Adatdefiníció (állandók és változók);

· A program memóriában való megszervezésének és a kimeneti fájl paramétereinek kezelése;

· A fordító működési módjának beállítása;

· Mindenféle absztrakció (azaz a magas szintű nyelvek elemei) - az eljárások és funkciók megtervezésétől (az eljárási programozási paradigma megvalósításának egyszerűsítése érdekében) a feltételes szerkezetekig és ciklusokig (a strukturált programozási paradigma esetében);

· Makrók.

Parancskészlet

A szerelési nyelv tipikus parancsai a következők:

Adatátviteli parancsok (mov, stb.)

Aritmetikai parancsok (add, sub, imul stb.)

Logikai és bitenkénti műveletek (vagy, és, xor, shr, stb.)

· Parancsok a program végrehajtásának vezérlésére (jmp, loop, ret, stb.)

Megszakító hívó parancsok (néha vezérlőparancsoknak is nevezik): int

I / O parancsok a portokhoz (be, ki)

Mikrokontrollerek és mikroszámítógépek esetében olyan parancsok is jellemzőek, amelyek feltétel szerint ellenőrzést és átállást végeznek, például:

· Jne - mozogjon, ha nem egyenlő;

· Jge - ugrás, ha nagyobb vagy egyenlő.



Tetszett a cikk? Oszd meg