Ablakok.  Vírusok.  Jegyzetfüzetek.  Internet.  hivatal.  Segédprogramok.  Drivers

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

    1.1. Regisztrálok.

    1.1.1 Regiszterek Általános rendeltetésű.

1.1.2. szegmensregiszterek

1.1.3 Zászlóregiszter

1.2. Az emlékezet szervezése.

1.3. Adatábrázolás.

1.3.1 Adattípusok

1.3.2 Karakter- és karakterlánc-ábrázolás

2. Összeszerelési program nyilatkozatok ………………………………………

    1. Assembly nyelvi parancsok

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

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

3.1 Adatdefiníciós irányelvek

3.2 Az összeszerelési program felépítése

3.2.1 Programszegmensek. irányelvet feltételezni

3.2.3 Egyszerűsített szegmentációs irányelv

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

5. Adatátviteli parancsok……………………………………………….

    5.1 Általános parancsok

    5.2 Parancsok halmozása

5.3 I/O parancsok

5.4 Címtovábbítási parancsok

5.5 Zászló átviteli parancsok

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ő eggyel növelésére és csökkentésére

6.2 Szorzás és osztás

6.3 Jelcsere

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

8. Változások és ciklikus eltolások ……………………………………………

9. Karakterlánc-műveletek …………………………………………………….

10. A programok logikája és felépítése …………………………………………

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

10.2 Feltételes ugrások

10.4 Eljárások assembly nyelven

10.5 Megszakítja az INT

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 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 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 assembly nyelv a gépi nyelv szimbolikus ábrázolása. A legalacsonyabb, hardverszintű személyi számítógépben (PC) minden folyamatot csak gépi nyelvi parancsok (utasítások) hajtanak végre. A hardverrel kapcsolatos problémákat (sőt, a hardverrel kapcsolatos problémákat, például a program sebességének javítását) az assembler ismerete nélkül nem lehet igazán megoldani.

Az Assembler a parancsok kényelmes formája közvetlenül a PC-összetevők számára, és az ezeket az összetevőket tartalmazó integrált áramkör, nevezetesen a PC mikroprocesszor tulajdonságainak és képességeinek ismerete szükséges. Így az assembly nyelv közvetlenül kapcsolódik a PC belső szervezetéhez. És nem véletlen, hogy szinte minden magas szintű nyelv fordítója támogatja az assembler programozási szint elérését.

A professzionális programozó felkészítésének eleme szükségszerűen az assembler tanulmányozása. Az assembly nyelvű programozás ugyanis megköveteli a PC-architektúra ismeretét, ami lehetővé teszi, hogy más nyelveken is hatékonyabb programokat készítsünk, és azokat assembly nyelvű programokkal kombináljuk.

A kézikönyv az Intel mikroprocesszorokon alapuló számítógépek assembly nyelvű programozásával foglalkozik.

Ez az oktatóanyag mindenkinek szól, aki érdeklődik a processzor architektúrája és az Assembly nyelvű programozás alapjai iránt, mindenekelőtt a szoftvertermékek fejlesztőinek.

    PC architektúra.

A számítógép architektúrája 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 építészeti tulajdonsággal. Az egyedi tulajdonságok csak egy adott számítógépmodellhez tartoznak.

A számítógép-architektúra fogalma magában foglalja:

    számítógép blokkvázlata;

    a számítógép blokkdiagramjának elemeihez való hozzáférés eszközei és módjai;

    regiszterek beállítása és elérhetősége;

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

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

    számítógépes gépi utasításkészlet;

    gépi utasítás formátumok;

    megszakítás kezelés.

A számítógépes hardver fő elemei: rendszeregység, billentyűzet, megjelenítő eszközök, lemezmeghajtók, nyomtatóeszközök (nyomtató) és különféle kommunikációs eszközök. Rendszer egysége az alaplapból, a tápegységből és az opcionális kártyák bővítőhelyeiből áll. Az alaplap tartalmazza a mikroprocesszort, csak olvasható memóriát (ROM), RAM(RAM) és társprocesszor.

      Regiszterek.

A mikroprocesszoron belül az információt egy 32 regiszterből álló csoport (16 felhasználó, 16 rendszer) tartalmazza, amelyek többé-kevésbé a programozó számára elérhetőek. Mivel a kézikönyv a 8088-i486 mikroprocesszor programozásával foglalkozik, a leglogikusabb a témát a mikroprocesszor felhasználó számára elérhető belső regisztereinek megvitatásával kezdeni.

A felhasználói regisztereket a programozó programírásra használja. Ezek a regiszterek a következőket tartalmazzá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 jelzőregiszter és EIP/IP parancsmutató regiszter.

Egy 32 bites regiszter részeit perjel jelzi. Az E (Extended) előtag egy 32 bites regiszter használatát jelöli. A bájtokkal való munkához L (alacsony) és H (magas) előtagú regisztereket használnak, például AL, CH - a regiszterek 16 bites részének alacsony és magas bájtjait.

        Általános nyilvántartások.

EAX/AX/AH/AL (Akkumulátorregiszter) - akkumulátor. Használható szorzásban és osztásban, I/O műveletekben és egyes karakterláncokon végzett műveletekben.

EBX/BX/BH/BL - alapregiszter(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), a hurokismétlések számának számlálójaként szolgál.

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

Ennek a csoportnak minden regisztere lehetővé teszi az "alsó" részekhez való hozzáférést. Ezeknek a regisztereknek csak az alsó 16 és 8 bites része használható öncímzésre. Ezeknek a regisztereknek a felső 16 bitje nem érhető el független objektumként.

A 32, 16 vagy 8 bites karakterláncok szekvenciális feldolgozását lehetővé tevő karakterlánc-feldolgozási parancsok támogatásához a következőket kell használni:

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

EDI/DI (távolsági index regiszter) - index vevő(befogadó). Az aktuális címet tartalmazza a cél karakterláncban.

A mikroprocesszor architektúrája hardver és szoftver szinten támogatja az adatstruktúrát - a verem. A verem használatához speciális parancsok és speciális regiszterek állnak rendelkezésre. Meg kell jegyezni, hogy a verem a kisebb címek felé van feltöltve.

ESP/SP (veremmutató regiszter) - Regisztráció mutató Kazal. Az aktuális veremszegmensben lévő verem tetejére mutató mutatót tartalmaz.

EBP/BP (alapmutató regiszter) – verem alapmutató regiszter. A veremben lévő adatok véletlenszerű elérésének megszervezésére tervezték.

1.1.2. szegmensregiszterek

A mikroprocesszoros szoftvermodell hat szegmensregiszterek: CS, SS, DS, ES, GS, FS. Létezésük az Intel mikroprocesszorok RAM felépítésének és használatának sajátosságainak köszönhető. A mikroprocesszoros hardver támogatja a program szerkezeti felépítését, amely a következőkből áll szegmensek. Az elérhető szegmensek megadásához Ebben a pillanatban szegmensregiszterek. A mikroprocesszor a következő típusú szegmenseket támogatja:

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

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

    Stack szegmens. Ez a szegmens a memória egy régiója, az úgynevezett verem. A mikroprocesszor az alapelv szerint rendezi a veremet - az első "jött", az első "balra". A verem eléréséhez az SS regisztert (veremszegmens regisztert) használjuk - verem szegmensregiszter A, amely a veremszegmens címét tartalmazza.

    További adatszegmens. A feldolgozandó adatok további három adatszegmensben lehetnek. Alapértelmezés szerint az adatok az adatszegmensben vannak. További adatszegmensek használatakor a címüket kifejezetten meg kell adni, speciális szegmens-újradefiniáló előtagokkal a parancsban. A további adatszegmensek címeit az ES, GS, FS regiszterekben (kiterjesztési adatszegmens regiszterek) kell tartalmazniuk.

        Vezérlési és állapotregiszterek

A mikroprocesszor több regisztert tartalmaz, amelyek maguknak a mikroprocesszornak és annak a programnak az állapotáról is tartalmaznak információkat, amelynek utasításai jelenleg a folyamatban vannak. Ez:

EIP/IP parancsmutató regiszter;

    EFLAGS/FLAGS jelzőregiszter.

Ezekkel a regiszterekkel információkat kaphat a parancsvégrehajtás eredményeiről, és befolyásolhatja magának a mikroprocesszornak az állapotát.

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

ZÁSZLÓK/ZSZÁSZLÓK (zászlóregiszter) - Regisztráció zászlókat. Bitmélység 32/16 bit. Ennek a regiszternek az egyes bitjei meghatározott funkcionális céllal rendelkeznek, és zászlóknak nevezzük. A jelző olyan bit, amely 1-re van beállítva ("jelző beállítva"), ha valamilyen feltétel teljesül, és 0-ra ("jelző törölve") egyébként. Ennek a regiszternek az alsó része teljesen analóg az i8086 FLAGS regiszterével.

1.1.3 Zászlóregiszter

A jelzőregiszter 32 bites, és neve EFLAGS (1. ábra). A regiszter egyes bitjei meghatározott funkcionális céllal rendelkeznek, és zászlóknak nevezzük. Mindegyikhez külön név tartozik (ZF, CF stb.). Az EFLAGS alsó 16 bitje az i086 és i286 mikroprocesszorra írt programok végrehajtásakor használt 16 bites FLAGS regisztert jelenti.

Fig.1 A zászlók nyilvántartása

Egyes zászlókat állapotjelzőknek nevezzük; automatikusan módosulnak a parancsok végrehajtásakor, és rögzítik az eredmény bizonyos tulajdonságait (például, hogy egyenlő-e nullával). A többi zászlót államzászlónak nevezzük; változnak a programból és befolyásolják a processzor további viselkedését (például blokkolják a megszakításokat).

Állapotjelzők:

CF (carry flag) - zászlót hordani. 1-et vesz fel, ha egész számok összeadásakor olyan átviteli egység jelent meg, amely nem "fért be" a bitrácsba, vagy ha az előjel nélküli számok kivonásakor az első kisebb volt, mint a második. A shift parancsokban a rácson kívüli bit be van írva a CF-be. A CF a szorzási utasítás jellemzőit is javítja.

OF (túlcsordulásjelző) túlcsordulás zászló. 1-re van állítva, ha egész számok előjellel történő összeadásakor vagy kivonásakor a megengedett értéket meghaladó modulo eredményt kaptunk (a mantissza túlcsordult és "bemászott" az előjelbitbe).

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

SF (Sign flag) - zászló jel. Állítsa 1-re, ha az előjeles számokkal végzett művelet negatív eredményt eredményez.

PF (paritásjelző) - zászló paritás. 1-gyel egyenlő, ha a következő parancs eredménye páros számú binárist tartalmaz. Általában csak az I / O műveletek során veszik figyelembe.

AF (auxiliary carry flag) - további hordozási zászló. Javítja a bináris decimális számokkal végzett műveletek jellemzőit.

Állapotjelzők:

DF (irányjelző) irányzászló. Beállítja a vonalak pásztázási irányát a string parancsokban: DF=0 esetén a sorok "előre" (elejétől a végéig), DF=1 esetén az ellenkező irányba.

IOPL (bemeneti/kimeneti jogosultsági szint) - I/O jogosultsági szint. A mikroprocesszor védett üzemmódjában az I / O parancsokhoz való hozzáférés szabályozására szolgál, a feladat jogosultságától függően.

NT (beágyazott feladat) feladat beágyazási jelző. A mikroprocesszor védett üzemmódjában használják annak rögzítésére, hogy az egyik feladat egy másikba van beágyazva.

Rendszerjelző:

IF (megszakítás jelző) - megszakítás jelző. IF=0 esetén a processzor nem válaszol a hozzá érkező megszakításokra, IF=1 esetén a megszakítások blokkolása megszűnik.

TF (csapdajelző) nyom zászló. TF=1 esetén az egyes utasítások végrehajtása után a processzor megszakítást hajt végre (1-es számmal), amelyet a program nyomkövetésére használható hibakereséskor használhatunk.

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

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

AC (ALiganment check) - igazításvezérlő zászló.Úgy tervezték, hogy lehetővé tegye az igazítás szabályozását a memória elérésekor.

      Az emlékezet szervezése.

A fizikai memóriát, amelyhez a mikroprocesszor hozzáfér, hívják munkamemória ( vagy véletlen hozzáférésű memória RAM). A RAM egy bájtok láncolata, amelynek saját egyedi címe (száma) van, úgynevezett fizikai. A fizikai címtartomány 0 és 4 GB között van. A memóriakezelési mechanizmus teljes mértékben hardver alapú.

A mikroprocesszor a RAM hardverhasználatának számos modelljét támogatja:

    szegmentált modell. Ebben a modellben a programmemória összefüggő memóriaterületekre (szegmensekre) van felosztva, és maga a program csak az ezekben a szegmensekben lévő adatokhoz férhet hozzá;

    oldal modellje. Ebben az esetben a RAM fix 4 KB méretű blokkok halmazának minősül. Ennek a modellnek a fő alkalmazása a virtuális memória szervezéséhez kapcsolódik, amely lehetővé teszi, hogy több memóriaterületet használjon a programok számára, mint amennyi fizikai memória. Egy Pentium mikroprocesszornál a lehetséges virtuális memória mérete akár 4 TB is lehet.

Ezeknek a modelleknek a 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). Az üzemmód hasonló az i8086 processzor működéséhez. A korai processzoros modellekhez tervezett programok működéséhez szükséges.

    Védett mód. A védett mód lehetővé teszi a többfeladatos munkát információ feldolgozás, memóriavédelem négyszintű jogosultsági mechanizmussal és annak lapozásával.

    Virtuális 8086 mód. Ebben a módban számos program futtatható az i8086-hoz. Ebben az esetben a valós módú programok működhetnek.

A szegmentálás olyan címzési mechanizmus, amely több független címtér létezését biztosítja. A szegmens egy független, hardver által támogatott memóriablokk.

Minden program általános esetben tetszőleges számú szegmensből állhat, de közvetlenül hozzáfér a három főhöz: kódhoz, adathoz és veremhez - és egy-három további adatszegmenshez. operációs rendszer programszegmenseket helyez el a RAM-ban bizonyos fizikai címeken, majd ezeknek a címeknek az értékeit a megfelelő regiszterekbe helyezi. Egy szegmensen belül a program a szegmens kezdetéhez viszonyított címeket lineárisan éri el, azaz a 0 címtől kezdve a szegmens méretével megegyező címre végződik. Rokon cím ill Elfogultság, amelyet a mikroprocesszor egy szegmensen belüli adatok elérésére használ fel hatékony.

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

Valós módban a fizikai címtartomány 0 és 1 MB között van. A szegmens maximális mérete 64 KB. Amikor egy konkrét 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ímét a megfelelő szegmensregiszterből veszik. Ebben az esetben a szegmensregiszter csak a szegmens kezdetének fizikai címének felső 16 bitjét tartalmazza. A 20 bites cím hiányzó alsó négy bitjét úgy kapjuk meg, hogy a szegmensregiszter értékét 4 bittel balra toljuk. A váltási művelet hardverben történik. A kapott 20 bites érték a szegmens kezdetének megfelelő tényleges fizikai cím. Azaz fizikai cím"szegmens:eltolás" párként van megadva, ahol a "szegmens" annak a memóriaszegmensnek a kezdőcímének első 16 bitje, amelyhez a cella tartozik, az "eltolás" pedig ennek a cellának a 16 bites címe, a ennek a memóriaszegmensnek az eleje (a 16*szegmens +offset érték adja a cella abszolút címét). Ha például az 1234h értéket a CS regiszterben tároljuk, akkor az 1234h:507h címpár abszolút címet határoz meg, amely egyenlő 16*1234h+507h =12340h+507h = 12847h. Egy ilyen pár kettős szóként van írva, és (a számokhoz hasonlóan) „fordított” formában: az első szó az eltolást, a második pedig a szegmenst tartalmazza, mindegyik szó „fordított” formában van ábrázolva. forma. Például az 1234h:5678h pár a következőképpen írható:| 78 | 56| 34 | 12|.

Ez a fizikai cím kialakításának mechanizmusa lehetővé teszi, hogy a szoftvert áthelyezhetővé tegye, azaz ne függjön a RAM-ban lévő konkrét letöltési címektől.

Bevezetés.

Azt a nyelvet, amelyen az eredeti program íródott, hívjuk bemenet nyelv, és a nyelv, amelyre a processzor végrehajtásához lefordítja - hétvége nyelv. A bemeneti nyelv kimeneti nyelvvé alakításának folyamatát ún adás. Mivel a processzorok a programozáshoz nem használt bináris gépi nyelven is képesek programokat végrehajtani, ezért az összes forrásprogram fordítása szükséges. ismert két út fordítások: összeállítás és tolmácsolás.

Nál nél összeállítás a forrásprogramot először teljesen lefordítják a célnyelven egy ekvivalens programmá, ún tárgy programot, majd végrehajtjuk. Ezt a folyamatot speciális eszközzel hajtják végre programok, hívott fordítóprogram. Egy olyan fordítót, amelynél a bemeneti nyelv a bináris kódok gépi (kimeneti) nyelvének szimbolikus reprezentációja, ún. szerelő.

Nál nél értelmezések a forrásprogram szövegének minden sorát elemzi (értelmezi), és azonnal végrehajtja a benne megadott parancsot. Ennek a módszernek a megvalósítása az tolmács program. Az értelmezés sokáig tart. A hatékonyság növelése érdekében az egyes sorok feldolgozása helyett a tolmács előzetesen az összeset konvertálja parancs karakterláncok (

). A generált szimbólumsorozat az eredeti programhoz rendelt funkciók végrehajtására szolgál.

Az alábbiakban tárgyalt összeállítási nyelv fordítással valósul meg.

A nyelv jellemzői.

Az összeszerelő főbb jellemzői:

● bináris kódok helyett a nyelv szimbolikus neveket használ - mnemonika. Például az összeadás parancshoz (

) emlékeztetőt használnak

Kivonások (

szorzás (

osztályok (

stb. A szimbolikus neveket a memóriacellák megcímzésére is használják. Az assembly nyelvű programozáshoz a bináris kódok és címek helyett csak azokat a szimbolikus neveket kell ismerni, amelyeket az assembler bináris kódokká fordít le;

minden állítás megfelel egy gépparancs(kód), azaz egy-egy megfeleltetés van a gépi utasítások és az operátorok között egy assembly nyelvi programban;

● a nyelv hozzáférést biztosít minden tárgyraés csapatok. A magas szintű nyelvek nem rendelkeznek ezzel a képességgel. Például az assembly nyelv lehetővé teszi egy jelzőregiszter-bit és egy magas szintű nyelv ellenőrzését (pl.

) nem rendelkezik ezzel a képességgel. Vegye figyelembe, hogy a rendszerprogramozási nyelvek (például C) gyakran köztes pozíciót foglalnak el. Hozzáférhetőség szempontjából közelebb állnak az assembly nyelvhez, de a magas szintű nyelv szintaxisával rendelkeznek;

● assembly nyelv nem univerzális nyelv. A mikroprocesszorok minden egyes csoportjának saját összeszerelője van. A magas szintű nyelveknek nincs ilyen hátránya.

A magas szintű nyelvekkel ellentétben az assembly nyelvű programok írása és hibakeresése sok időt vesz igénybe. Ennek ellenére az assembly nyelv lett széleskörű felhasználás a következő körülmények miatt:

● Egy assembly nyelven írt program sokkal kisebb és sokkal gyorsabb, mint egy magas szintű nyelven írt program. Néhány alkalmazás esetében ezek a mutatók kiemelkedő szerepet játszanak, például sok esetben rendszerprogramok(beleértve a fordítókat), hitelkártyás programok, mobiltelefonok, eszközillesztőprogramok stb.;

● Egyes eljárások teljes hozzáférést igényelnek a hardverhez, ami általában nem lehetséges magas szintű nyelveken. Ez az eset magában foglalja a megszakításokat és megszakításkezelőket az operációs rendszerekben, valamint az eszközvezérlőket a valós idejű beágyazott rendszerekben.

A legtöbb programban a teljes kódnak csak egy kis százaléka felelős a program végrehajtási idejének nagy százalékáért. Jellemzően a program 1%-a felelős a végrehajtási idő 50%-áért, és a program 10%-a a végrehajtási idő 90%-áért. Ezért egy adott program valós körülmények közötti írásához mind az assembler, mind a magas szintű nyelvek egyikét használják.

Operátori formátum assembly nyelven.

Az assembly nyelvű program parancsok (utasítások, mondatok) listája, amelyek mindegyike külön sort foglal el, és négy mezőt tartalmaz: egy címkemezőt, egy műveleti mezőt, egy operandusmezőt és egy megjegyzésmezőt. Minden mezőnek külön oszlopa van.

Címke mező.

Az 1. oszlop a címkemezőhöz van hozzárendelve. A címke szimbolikus név vagy azonosító, címek memória. Ez szükséges ahhoz, hogy:

● feltételes vagy feltétel nélküli áttérés a parancsra;

● hozzáférni az adatok tárolási helyéhez.

Az ilyen kijelentéseket címkével látják el. A név kijelöléséhez az angol ábécé (nagy) betűit és számokat kell használni. A névnek betűvel kell kezdődnie, és kettősponttal kell végződnie. A kettőspont címke külön sorba, a műveleti kód pedig a 2. oszlop következő sorába írható, ami leegyszerűsíti a fordító munkáját. A kettőspont hiánya lehetetlenné teszi a címke és a műveleti kód megkülönböztetését, ha azok külön sorokban vannak.

Az assembly nyelv egyes verzióiban a kettőspont csak az utasításcímkék után kerül elhelyezésre, az adatcímkék után nem, és a címke hossza 6 vagy 8 karakterre korlátozható.

A címkemező nem tartalmazhatja ugyanazokat a neveket, mivel a címke a parancsok címeihez van társítva. Ha a program végrehajtása során nem kell parancsot vagy adatot hívni a memóriából, akkor a címkemező üresen marad.

Tranzakciókód mező.

Ez a mező a mnemonikus vagy pszeudo-parancsot tartalmazza (lásd alább). A parancs mnemonikus kódját a nyelvi tervezők választják ki. Assembly nyelven

A regiszter memóriából való betöltéséhez kiválasztott mnemon

), valamint a regiszter tartalmának a memóriában való tárolására - a mnemonika

). assembly nyelveken

mindkét művelethez használhatja ugyanazt a nevet, ill

Ha a mnemonikus nevek tetszőlegesek lehetnek, akkor két gépi utasítás használatának szükségessége a processzor architektúrája miatt van

A regiszter mnemonikája az assembler verziótól is függ (5.2.1. táblázat).

Operandus mező.

Itt található további információ szükséges a művelet elvégzéséhez. Az ugrásutasítások operandusai mezőben megjelenik az a cím, ahová ugrani szeretne, valamint a címek és regiszterek, amelyek a gépi utasítás operandusai. Példaként itt vannak a 8 bites processzorokhoz használható operandusok

● számszerű adatok,

ben mutatták be különféle rendszerek leszámolás. A használt számrendszer jelzésére egy konstanst követ az egyik Latin betűk: BAN BEN,

Ennek megfelelően bináris, oktális, hexadecimális, decimális számrendszerek (

nem rögzíthető). Ha a hexadecimális szám első számjegye A, B, C,

Ezután egy jelentéktelen 0-t (nulla) adunk hozzá;

● mikroprocesszor belső regisztereinek és memóriacelláinak kódjai

M (információs források vagy fogadók) A, B, C betűk formájában,

M vagy címük bármilyen számrendszerben (például 10V - regisztrációs cím

bináris rendszerben);

● azonosítók,

regisztrált repülőgép-párok esetében,

Az első B betűk

H; egy pár akkumulátorhoz és szolgáltatásregiszterhez -

; a programszámlálóhoz -

; veremmutatóhoz -

● címkék, amelyek az operandusok címét vagy a következő utasításokat jelzik feltételes feltételben

(ha a feltétel teljesül) és feltétlen átmenetek. Például az M1 operandus a parancsban

a parancsra való feltétel nélküli átállás szükségességét jelenti, amelynek címe a címkemezőben M1 azonosítóval van jelölve;

● kifejezések,

amelyek a fent tárgyalt adatok összekapcsolásával épülnek fel aritmetika és logikai operátorok. Vegye figyelembe, hogy az adatterület lefoglalásának módja a nyelv verziójától függ. Assembly nyelvi fejlesztők számára

Határozza meg a szót), és később bevezette Alternatív lehetőség.

amely a kezdetektől fogva a processzorok nyelvén volt

Nyelvi változatban

használt

definiáljon egy állandót).

A processzorok különböző hosszúságú operandusokat dolgoznak fel. Ennek meghatározásához az assembler fejlesztők különböző döntéseket hoztak, például:

A különböző hosszúságú II regiszterek különböző nevekkel rendelkeznek: EAX - 32 bites operandusok elhelyezésére (típus

); AX - 16 biteshez (típus

és AN - 8 biteshez (típus

● processzorokhoz

utótagokat adunk minden műveleti kódhoz: utótag

A típushoz

; ".B" utótag a típushoz

különböző hosszúságú operandusokhoz különböző műveleti kódokat használnak, például egy bájt, félszó (

) és a 64 bites regiszter szavai műveleti kódokat használnak

illetőleg.

Megjegyzés mező.

Ez a mező magyarázatokat ad a program műveleteiről. A megjegyzések nem befolyásolják a program működését, és egy személynek szólnak. Szükség lehet rájuk egy olyan program módosításához, amely ilyen megjegyzések nélkül még a tapasztalt programozók számára is teljesen érthetetlen lehet. A megjegyzés karakterrel kezdődik, és a programok magyarázatára és dokumentálására szolgál. A megjegyzés kezdő karaktere lehet:

● pontosvessző (;) a vállalat feldolgozóinak nyelvein

Felkiáltójel(!) nyelveken for

Minden megjegyzésnek fenntartott külön sor előtt egy kezdő karakter szerepel.

Pszeudo parancsok (irányelvek).

Az assembly nyelvben a parancsok két fő típusa különböztethető meg:

alapvető utasításokat, amelyek egyenértékűek a processzor gépi kódjával. Ezek a parancsok elvégzik a program által biztosított összes feldolgozást;

álparancsok vagy irányelvek, a program kódkombinációk nyelvére történő lefordításának folyamatát szolgálja. Példaként a táblázatban. Az 5.2.2 néhány pszeudo-parancsot mutat be az as-assemblertől

családnak

.

A programozás során vannak olyan helyzetek, amikor az algoritmus szerint ugyanazt a parancsláncot kell sokszor megismételni. A helyzetből való kilépéshez a következőket teheti:

● írja be a kívánt parancssort, amikor az előfordul. Ez a megközelítés a program volumenének növekedéséhez vezet;

● rendezze ezt a szekvenciát eljárásba (szubrutinba), és szükség esetén hívja meg. Az ilyen kilépésnek megvannak a hátrányai: minden alkalommal egy speciális eljáráshívási utasítást és egy visszatérési utasítást kell végrehajtani, amelyek egy rövid és gyakran használt szekvenciával nagymértékben csökkenthetik a program sebességét.

A legegyszerűbb és hatékony módszer parancslánc ismételt ismétlését kell használni makró, amely egy pszeudo-parancsnak tekinthető, amely egy programban gyakran előforduló parancscsoport újrafordítására szolgál.

A makrót vagy makróutasítást három szempont jellemzi: a makró meghatározása, a makró inverziója és a makró kiterjesztése.

makró meghatározása

Ez a programparancsok ismétlődő sorozatának megjelölése, amelyet a program szövegében található hivatkozásokhoz használnak.

A makró szerkezete a következő:

Kifejezések listája; makró meghatározása

A fenti makródefiníciós szerkezet három részből áll:

● fejléc

nevet tartalmazó makró

Pszeudo-parancs

és egy sor paramétert;

● pontozott test makró;

● csapat

érettségi

makró definíciók.

A makróparaméterkészlet tartalmazza a kiválasztott utasításcsoport operandusmezőjében megadott összes paraméter listáját. Ha ezeket a paramétereket korábban megadtuk a programban, akkor a makródefiníció fejlécében elhagyhatók.

A kiválasztott utasításcsoport összeállításához egy hívást használnak, amely a névből áll

makró- és paraméterlista más értékekkel.

Ha az assembler a fordítás során makródefinícióval találkozik, eltárolja azt a makródefiníciós táblában. A későbbi megjelenésekkel a név programjában (

) egy makró esetében, az assembler lecseréli a makró törzsére.

A makrónév műveleti kódként történő használata meghívásra kerül makro-visszafordítás(makróhívás), és ennek cseréje a makró törzsével - makro bővítés.

Ha a program karaktersorozatként van ábrázolva (betűk, számok, szóközök, írásjelek és kocsi visszatér, hogy új sorba lépjen), akkor a makróbővítés abból áll, hogy ebből a sorozatból néhány karakterláncot más karakterláncra cserél.

A makró bővítése az összeállítási folyamat során történik, nem a program végrehajtása során. A karakterláncok kezelésének módjai hozzá vannak rendelve makró eszközök.

Az összeszerelési folyamat megtörténik két menetben:

● Az első lépésben minden makródefiníció megmarad, és a makróhívások kibővülnek. Ebben az esetben a program beolvassa a forrásprogramot, és olyan programmá alakítja, amelyben az összes makródefiníciót eltávolítják, és minden makróhívást felvált egy makrótörzs;

● A második lépés makrók nélkül dolgozza fel a fogadott programot.

Makrók paraméterekkel.

Az ismétlődő parancssorozatokkal való munkához, amelyek paraméterei különböző értékeket vehetnek fel, makródefiníciók állnak rendelkezésre:

● -val tényleges paraméterek, amelyek a makróhívás operandusmezőjébe kerülnek;

● -val hivatalos paramétereket. A makróbővítés során minden formális paraméter, amely a makró törzsében megjelenik, lecserélődik a megfelelő tényleges paraméterre.

makrók használata paraméterekkel.

Az 1. program két hasonló parancssort mutat, amelyek abban különböznek egymástól, hogy az első felcseréli a P és a parancsokat

És a második

A 2. program tartalmaz egy makrót két formális P1 és P2 paraméterrel. A makróbővítés során a makrótörzsben minden P1 karaktert az első aktuális paraméter helyettesít (P,

), és a P2 szimbólum helyére a második aktuális paraméter (

) az 1. számú programból. Makróhívásban

a 2. program jelölése: P,

Az első tényleges paraméter,

A második tényleges paraméter.

1. program

2. program

MOV EBX,Q MOV EAX,Pl

MOV Q,EAX MOV EBX,P2

MOV P,EBX MOV P2,EAX

Bővített képességek.

Vegye figyelembe a nyelv néhány speciális funkcióját

Ha egy feltételes elágazási utasítást és egy ugráshoz szükséges címkét tartalmazó makrót kétszer vagy többször hívnak meg, akkor a címke megkettőződik (címkeduplikációs probléma), ami hibát okoz. Ezért minden híváshoz (a programozó) külön címkét rendel paraméterként. A nyelvben

a címke helyinek minősül (

) és a fejlett funkcióknak köszönhetően az assembler automatikusan más címkét generál minden alkalommal, amikor a makró kibontásra kerül.

lehetővé teszi makrók meghatározását más makrókon belül. Ez a speciális funkció nagyon hasznos, ha feltételes programhivatkozással kombinálják. Fontolgat

IF WORDSIZE GT 16 M2 MAKRO

Az M2 makró az utasítás mindkét részében definiálható

A meghatározás azonban attól függ, hogy a program összeállítása 16 bites vagy 32 bites processzoron történik. Ha az M1 nem kerül meghívásra, akkor az M2 makró egyáltalán nem lesz meghatározva.

Egy másik fejlett funkció, hogy a makrók más makrókat is hívhatnak, beleértve önmagukat is. rekurzív hívás. Ez utóbbi esetben a végtelen ciklus elkerülése érdekében a makrónak át kell adnia magának egy paramétert, amely minden bővítéssel változik, jelölje be ezt a paramétert, és fejezze be a rekurziót, amikor a paraméter eléri bizonyos értéket.

A makrók használatáról az assemblerben.

Makró használatakor az assemblernek képesnek kell lennie két funkció végrehajtására: mentse a makródefiníciókatÉs kibővíteni a makróhívásokat.

Makródefiníciók mentése.

Minden makrónév egy táblázatban tárolódik. Minden névhez tartozik egy mutató a megfelelő makróra, hogy szükség esetén hívható legyen. Egyes assemblerek külön táblával rendelkeznek a makróneveknek, másoknak közös táblájuk van, amelyben a makrónevek mellett minden gépi parancs és direktíva is megtalálható.

Ha összeállítás közben makróval találkozik létrehozva:

új táblázatelem a makró nevével, a paraméterek számával és egy másik makródefiníciós táblára mutató mutatóval, ahol a makró törzsét tárolni kell;

● lista hivatalos paramétereket.

A makró törzsét, amely egyszerűen egy karaktersorozat, a rendszer ezután beolvassa és a makródefiníciós táblázatban tárolja. A ciklustörzsben előforduló formális paraméterek meg vannak jelölve különleges karakter.

Egy makró belső ábrázolása

a 2. program fenti példájából (244. oldal) a következő:

MOV EAX, MOV EBX, MOV MOV &

ahol a pontosvesszőt kocsivisszaadási karakterként, az & jelet pedig formális paraméterkarakterként használják.

Makró hívásbővítmény.

Ha az összeállítás során makródefinícióval találkozunk, az a makrótáblában tárolódik. Makró meghívásakor az assembler ideiglenesen felfüggeszti a bemeneti adatok beolvasását a beviteli eszközről, és elkezdi olvasni a mentett makró törzsét. Kivonat a makró törzsből formális paraméterek helyébe a tényleges paraméterek kerülnek, és a hívás biztosítja. A paraméterek előtt található & jel lehetővé teszi az összeszerelő számára, hogy felismerje azokat.

Bár az assemblernek számos változata létezik, az összeszerelési folyamatok közös jellemzőkkel rendelkeznek, és sok tekintetben hasonlóak. Az alábbiakban egy kétmenetes összeszerelő munkáját tekintjük át.

Két menetes szerelő.

A program számos operátorból áll. Ezért úgy tűnik, hogy a következő műveletsor használható az összeszerelés során:

● lefordítani gépi nyelvre;

● a kapott gépi kód átvitele fájlba, a lista megfelelő része pedig egy másik fájlba;

● ismételje meg a fenti eljárást, amíg a teljes műsort el nem sugározza.

Ez a megközelítés azonban nem hatékony. Példa erre az úgynevezett probléma vezető link. Ha az első utasítás egy ugrás a program legvégén lévő P utasításra, akkor az assembler nem tudja lefordítani. Először meg kell határoznia a P operátor címét, és ehhez be kell olvasnia a teljes programot. Az eredeti program minden teljes olvasását hívjuk átjáró, átkelés. Mutassuk meg, hogyan oldhatjuk meg az előremenő referenciaproblémát két lépéssel:

az első menetben gyűjtés tárolja az összes szimbólumdefiníciót (beleértve a címkéket is) a táblázatban, majd a második lépésben olvassa el és állítsa össze az egyes operátorokat. Ez a módszer viszonylag egyszerű, de az eredeti programon való második áthaladás további I/O időt igényel;

● az első menetben, alakítani program egy köztes formába, és mentse el egy táblázatba, és a második lépés nem az eredeti program, hanem a táblázat szerint történik. Ezzel az összeállítási módszerrel időt takaríthat meg, mivel a második lépésben nem történik I/O művelet.

Első lépés.

Az első menet célja- szimbólumtáblázat készítése. Amint fentebb megjegyeztük, az első lépés másik célja az összes makródefiníció mentése és a hívások megjelenésük szerinti kiterjesztése. Ezért a karakterdefiníció és a makróbővítés is ugyanabban a lépésben történik. A szimbólum bármelyik lehet címke, vagy jelentése, amelyhez a -you direktíva segítségével egy adott név van hozzárendelve:

;Érték - puffer mérete

Az utasításcímke mezőben a szimbolikus nevek jelentésének megadásával az assembler lényegében beállítja azokat a címeket, amelyekkel minden utasítás rendelkezni fog a program végrehajtása során. Ehhez az összeszerelő az összeszerelési folyamat során ment utasítás címszámláló(

) speciális változóként. Az első lépés elején a speciális változó értéke 0-ra van állítva, és minden egyes feldolgozott parancs után növekszik a parancs hosszával. Példaként a táblázatban. Az 5.2.3 a program egy töredékét mutatja, amely a parancsok hosszát és a számlálóértékeket jelzi. A táblázatok az első lépés során generálódnak szimbólumnevek, direktívákÉs működési kódok,és ha szükséges szó szerinti asztal. A literál olyan állandó, amelyre az assembler automatikusan memóriát foglal le. Azonnal megjegyezzük modern processzorok közvetlen címekkel ellátott utasításokat tartalmaznak, így összeállítóik nem támogatják a literálokat.

Szimbólum táblázat

minden névhez egy elemet tartalmaz (5.2.4. táblázat). A szimbólumtábla minden eleme tartalmazza magát a nevet (vagy egy rámutatót), annak számértékét, és néha további információkat, amelyek magukban foglalhatják:

● a szimbólumhoz tartozó adatmező hossza;

● memória-újraképező bitek (amelyek jelzik, hogy egy szimbólum értéke megváltozik-e, ha a program az assembler által tervezetttől eltérő címre kerül betöltésre);

● információ arról, hogy a szimbólum elérhető-e az eljáráson kívülről.

A szimbolikus nevek címkék. Operátorokkal adhatók meg (pl.

Irányelvek táblázata.

Ez a táblázat felsorolja az összes direktívát vagy pszeudo-parancsot, amely egy program összeállításakor előfordul.

Műveleti kód táblázat.

A táblázatban minden műveleti kódhoz külön oszlopok vannak: műveleti kód megjelölése, 1. operandus, 2. operandus, a műveleti kód hexadecimális értéke, az utasítás hossza és az utasítás típusa (5.2.5. táblázat). A műveleti kódok az operandusok számától és típusától függően csoportokra vannak osztva. A parancs típusa határozza meg a csoport számát, és meghatározza a csoport összes parancsának feldolgozásához meghívott eljárást.

Második menet.

A második menet célja- objektumprogram készítése és szükség esetén összeállítási protokoll nyomtatása; A linker által a különböző időpontokban összeállított eljárások egyetlen végrehajtható fájlba való összekapcsolásához szükséges kimeneti információkat.

A második lépésben (mint az elsőben) egymás után olvassák be és dolgozzák fel az utasításokat tartalmazó sorokat. Az eredeti operátor és a belőle származó kimenet hexadecimálisan tárgy a kód kinyomtatható vagy pufferelhető későbbi nyomtatáshoz. A parancscímszámláló nullázása után a következő utasítás kerül meghívásra.

Forrás program hibákat tartalmazhat, például:

az adott szimbólum nem vagy többször van definiálva;

● A műveleti kódot érvénytelen név jelöli (elírási hiba miatt), nincs elég operandus, vagy túl sok operandust tartalmaz;

● nincs kezelő

Egyes összeszerelők észlelhetnek egy nem meghatározott szimbólumot, és kicserélik azt. Azonban a legtöbb esetben, ha egy hibás utasítást talál, az assembler hibaüzenetet jelenít meg a képernyőn, és megpróbálja folytatni az összeállítási folyamatot.

Az assembly nyelvnek szentelt cikkek.

Assembly nyelvi utasításszerkezet A gépi utasítások szintjén történő programozás az a minimális szint, amelyen a számítógépes programozás lehetséges. A gépi utasítások rendszerének elegendőnek kell lennie a szükséges műveletek végrehajtásához a gép hardverének utasításokkal. Minden gépi utasítás két részből áll: egy műveleti részből, amely meghatározza a „mit tegyünk”, és egy operandusból, amely meghatározza a feldolgozó objektumokat, vagyis a „mit kell tenni”. A mikroprocesszor gépi utasítása, Assembly nyelven írva, egysoros, a következő formában: címke utasítás/irányító operandus(ok) ; megjegyzések A címkét, a parancsot/direktívát és az operandust legalább egy szóköz vagy tabulátor karakter választja el. Az utasítás operandusokat vessző választja el.

Az assembly nyelvi utasítás felépítése Az assembly nyelvi utasítás megmondja a fordítónak, hogy a mikroprocesszornak milyen műveletet kell végrehajtania. Az összeállítási direktívák a program szövegében megadott paraméterek, amelyek befolyásolják az összeállítási folyamatot vagy a kimeneti fájl tulajdonságait. Az operandus megadja az adatok kezdeti értékét (az adatszegmensben), vagy az utasítás által végrehajtandó elemeket (a kódszegmensben). Egy utasításnak lehet egy vagy két operandusa, vagy nem is. Az operandusok számát implicit módon az utasításkód adja meg. Ha a parancsot vagy az utasítást a következő sorban kell folytatni, akkor a fordított perjel karakter kerül felhasználásra: "" . Alapértelmezés szerint az assembler nem tesz különbséget a nagy- és kisbetűk között a parancsokban és direktívákban. Irányelv és parancs példák Szám db 1 ; Név, direktíva, egy operandus mov eax, 0 ; Parancs, két operandus

Az azonosítók érvényes karaktersorozatok, amelyek a változónevek és címkenevek kijelölésére szolgálnak. Az azonosító egy vagy több alábbi karakterből állhat: a latin ábécé összes betűje; számok 0-tól 9-ig; speciális karakterek: _, @, $, ? . A címke első karaktereként egy pont használható. A fenntartott assembler nevek (direktívák, operátorok, parancsnevek) nem használhatók azonosítóként. Az azonosító első karakterének betűnek vagy speciális karakternek kell lennie. Az azonosító maximális hossza 255 karakter, de a fordító elfogadja az első 32 karaktert, a többit figyelmen kívül hagyja. Minden olyan címkének, amely olyan sorba íródott, amely nem tartalmaz assembler direktívát, kettősponttal ":" kell végződnie. A címkének, a parancsnak (direktívának) és az operandusnak nem kell a karakterlánc egyetlen helyén sem kezdődnie. A program jobb olvashatósága érdekében ajánlatos ezeket egy oszlopba írni.

Címkék Az assembler direktívát nem tartalmazó sorokra írt összes címkének kettősponttal ":" kell végződnie. A címkének, a parancsnak (direktívának) és az operandusnak nem kell a karakterlánc egyetlen helyén sem kezdődnie. A program jobb olvashatósága érdekében ajánlatos ezeket egy oszlopba írni.

Megjegyzések A megjegyzések használata egy programban javítja a program áttekinthetőségét, különösen akkor, ha egy utasításkészlet célja nem egyértelmű. A megjegyzések a forrásmodul bármely sorában pontosvesszővel (;) kezdődnek. Minden karakter a "; A sor végére a megjegyzések következnek. A megjegyzés bármilyen nyomtatható karaktert tartalmazhat, beleértve a szóközt is. A megjegyzés átívelheti a teljes sort, vagy követheti az ugyanabban a sorban lévő parancsot.

Az assembly nyelvi program felépítése Az assembly nyelvi program több részből, úgynevezett modulokból állhat, amelyek mindegyike egy vagy több adat-, verem- és kódszegmenst definiálhat. Minden teljes assembly nyelvű programnak tartalmaznia kell egy fő- vagy főmodult, amelyből a végrehajtása kezdődik. Egy modul tartalmazhat programot, adatokat és veremszegmenseket, amelyeket a megfelelő direktívákkal deklarálnak.

Memóriamodellek A szegmensek deklarálása előtt meg kell adnia a memóriamodellt egy direktíva segítségével. MODEL módosító memóriamodell, hívási_konvenció, OS_típus, verem_paraméter Alapvető összeállítási nyelvi memóriamodellek: Memóriamodell Kódcímzés Adatcímzés Operációs rendszer Kód- és adatbeillesztés TINY MS-DOS KÖZELÉBEN Érvényes KIS MS-DOS KÖZELÉBEN, Windows Nem KÖZÉPES MS-DOS KÖZELÉB, Windows nem KOMPAKT KÖZEL TÁVOLI MS-DOS, Windows nincs NAGY TÁVOLI MS-DOS, Windows nincs HATALMAS TÁVOLI MS-DOS, Windows nincs Windows 2000 KÖZELÉBEN, Windows XP, Windows Érvényes FLAT NT KÖZEL,

Memóriamodellek Az apró modell csak 16 bites MS-DOS alkalmazásokban működik. Ebben a modellben minden adat és kód egy fizikai szegmensben található. A programfájl mérete ebben az esetben nem haladja meg a 64 KB-ot. A kis modell egy kódszegmenst és egy adatszegmenst támogat. Az adatok és a kód ennek a modellnek a használatakor a közeli (közeli) címzést jelenti. A médiummodell több kódszegmenst és egy adatszegmenst támogat, a kódszegmensek összes hivatkozását alapértelmezés szerint távolinak (távolinak), az adatszegmensben lévő hivatkozásokat pedig közelnek (közelnek) tekintik. A kompakt modell több olyan adatszegmenst támogat, amelyek távoli adatcímzést (távoli) és egy kódszegmenst használnak, amelyek közeli adatcímzést (közeli) használnak. A nagy modell több kódszegmenst és több adatszegmenst is támogat. Alapértelmezés szerint az összes kód- és adathivatkozás messze van. A hatalmas modell szinte egyenértékű a nagy memóriás modellel.

Memóriamodellek A lapos modell nem szegmentált programkonfigurációt feltételez, és csak 32 bites operációs rendszereken használatos. Ez a modell hasonlít az apró modellhez, mivel az adatok és a kód ugyanabban a 32 bites szegmensben találhatók. A direktíva előtti lapos modell programjának kidolgozása. lakásmodellnek el kell helyeznie az egyik direktívát: . 386, . 486, . 586 ill. 686. A processzorválasztó direktíva megválasztása határozza meg a programok írásakor elérhető parancsok halmazát. A processzorválasztási direktíva utáni p betű védett üzemmódot jelent. Az adat- és kódcímzés közel van, minden cím és mutató 32 bites.

memória modellek. MODEL módosító memória_modell, hívási_konvenció, OS_típus, verem_paraméter A módosító paraméter a szegmenstípusok meghatározására szolgál, és a következő értékeket veheti fel: use 16 (a kiválasztott modell szegmensei 16 bitesként kerülnek felhasználásra) use 32 (a kiválasztott modell szegmensei használatosak 32 bitesként). A calling_convention paraméter annak meghatározására szolgál, hogy a paraméterek hogyan kerülnek átadásra, amikor egy eljárást más nyelvekről hívnak meg, beleértve a magas szintű nyelveket (C++, Pascal). A paraméter a következő értékeket veheti fel: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

memória modellek. MODEL módosító memory_model, calling_convention, OS_type, stack_parameter Az OS_type paraméter alapértelmezés szerint OS_DOS, és jelenleg ez a paraméter egyetlen támogatott értéke. A stack_param paraméter beállítása: NEARSTACK (az SS regiszter egyenlő a DS-szel, az adatok és a verem régiók ugyanabban a fizikai szegmensben találhatók) FARSTACK (az SS regiszter nem egyenlő a DS-szel, az adatok és a verem régiók különböző fizikai szegmensekben találhatók). Az alapértelmezés a NEARSTACK.

Példa a "semmit csináló" programra. 686 P. MODELL LAKÁS, STDCALL. ADAT. KÓD START: RET END START RET - mikroprocesszor parancs. Ez biztosítja a program helyes leállítását. A program többi része a fordító működéséhez kapcsolódik. . 686 P - A Pentium 6 (Pentium II) védett módú parancsai megengedettek. Ez a direktíva kiválasztja a támogatott assembler utasításkészletet a processzormodell megadásával. . MODEL FLAT, stdcall - lapos memória modell. Ezt a memóriamodellt a Windows operációs rendszer használja. Az stdcall a konvenciót hívó eljárás.

Példa a "semmit csináló" programra. 686 P. MODELL LAKÁS, STDCALL. ADAT. KÓD INDÍTÁSA: RET END START . DATA - adatokat tartalmazó programszegmens. Ez a program nem használja a veremet, ezért szegmentál. A STACK hiányzik. . CODE - a program egy szegmense, amely tartalmazza a kódot. START - címke. END START - a program vége és egy üzenet a fordítónak, hogy a programot a START címkéről kell elindítani. Minden programnak tartalmaznia kell egy END direktívát, amely a végét jelöli forráskód programokat. Az END direktívát követő összes sort figyelmen kívül hagyja.Az END direktíva utáni címke közli a fordítóval annak a fő modulnak a nevét, amelytől a program végrehajtása kezdődik. Ha a program egy modult tartalmaz, akkor az END direktíva utáni címke elhagyható.

Assembly nyelvi fordítók A fordító olyan program, ill technikai eszközöket A, amely az egyik programozási nyelven lévő programot a célnyelv programjává alakítja, amelyet objektumkódnak neveznek. A gépi utasítások mnemonikájának támogatása mellett minden fordítónak megvannak a saját direktívái és makrói, amelyek gyakran semmi mással nem kompatibilisek. Az assembly nyelvi fordítók fő típusai a következők: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - egy szabadon terjesztett többmenetes assembler, amelyet Tomasz Gryshtar (lengyel) írt, NASM (Netwide Assembler) - a Az Intel x architektúra 86 ingyenes assemblerjét Simon Tatham és Julian Hall készítette, és jelenleg a Source egy kis fejlesztőcsapata fejleszti. Kohó. háló.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Programfordítás a Microsoft Visual Studio 2005-ben 1) Hozzon létre egy projektet a Fájl->Új->Projekt kiválasztásával menü És"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В !} további beállítások projekt varázslót az „Üres projekt” beállításához.

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="Programfordítás a Microsoft Visual Studio 2005-ben 2) A projektfában (View->Solution Explorer) adja hozzá"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

A program fordítása Microsoft Visual Studio 2005-ben 3) Válassza ki a Code C++ fájltípust, de adja meg a nevet a kiterjesztéssel. asm:

A program fordítása a Microsoft Visual Studio 2005-ben 5) Állítsa be a fordító beállításait. Kiválasztás szerint jobb gomb a Custom Build Rules menü projektfájljában...

A program fordítása a Microsoft Visual Studio 2005-ben, és a megjelenő ablakban válassza a Microsoft Macro Assembler lehetőséget.

A program fordítása a Microsoft Visual Studio 2005-ben Ellenőrizze a hello fájl jobb gombjával. asm a projektfából a Tulajdonságok menüből, és állítsa be az Általános->Eszköz: Microsoft Macro Assembler beállítást.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="Programfordítás a Microsoft Visual Studio 2005-ben 6) Fordítsa le a fájlt a Build->Build hello.prj kiválasztásával ."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Programozás Windows operációs rendszerben A Windows operációs rendszer programozása API függvények (Application Program Interface, azaz interfész) használatán alapul szoftveralkalmazás). Számuk eléri a 2000-et. A Windows programja nagyrészt ilyen hívásokból áll. Az operációs rendszer külső eszközeivel és erőforrásaival való minden interakció általában az ilyen funkciókon keresztül történik. Műtőszoba Windows rendszer lapos memória modellt használ. Bármely memóriahely címét egy 32 bites regiszter tartalma határozza meg. A Windowshoz 3 féle programstruktúra létezik: dialógus (a főablak egy párbeszéd), konzolos vagy ablak nélküli struktúra, klasszikus struktúra (ablak, keret).

Windows API-függvények hívása A súgófájlban bármely API-függvény a függvény_név típusaként jelenik meg (FA 1, FA 2, FA 3) Típus – visszatérési érték típusa; A FAX a formális argumentumok listája a megjelenésük sorrendjében, például int Message. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Ez a funkcióüzenetet és kilépési gomb(oka)t tartalmazó ablakot jelenít meg. A paraméterek jelentése: h. Wnd - annak az ablaknak a fogantyúja, amelyben az üzenetablak megjelenik, lp. Szöveg – az ablakban megjelenő szöveg, lp. Felirat - szöveg az ablak címében, u. Típus - ablak típusa, különösen a kilépési gombok számát adhatja meg.

Windows API függvények hívása az Üzenetben. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Szinte az összes API függvényparaméter valójában 32 bites egész szám: a HWND egy 32 bites egész szám, az LPCTSTR egy 32 bites karakterlánc-mutató, az UINT egy 32 bites egész szám. Az "A" utótagot gyakran hozzáadják a függvények nevéhez, hogy a függvények újabb verzióira ugorjanak.

Windows API függvények hívása az Üzenetben. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); A MASM használatakor @N N karaktert kell hozzáadnia a név végéhez – ez az a bájtok száma, amelyet az átadott argumentumok a veremben foglalnak el. A Win 32 API-függvényeknél ez a szám az n-szeres argumentumok számaként definiálható 4-szer (bájt minden argumentumban): N=4*n. Egy függvény meghívásához az assembler CALL utasítását kell használni. Ebben az esetben a függvény összes argumentuma a veremen (PUSH parancs) keresztül kerül átadásra. Az érvelés átadási iránya: BALRA JOBBRA - ALUL FEL. Az u argumentum először kerül a verembe. típus. A megadott függvény hívása így fog kinézni: HÍVÁS Üzenet. doboz. [e-mail védett]

Windows API függvények hívása az Üzenetben. Box (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Bármelyiknek az eredménye API függvényekáltalában egy egész szám, amelyet az EAX regiszterben ad vissza. Az OFFSET direktíva egy "szegmenseltolás" vagy magas szintű nyelvhasználattal egy "mutató" egy karakterlánc elejére. Az EQU direktíva, mint a #define C-ben, egy állandót határoz meg. Az EXTERN direktíva közli a fordítóval, hogy egy függvény vagy azonosító a modulon kívüli.

Példa a "Helló mindenkinek!" . 686 P. MODELL LAKÁS, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "Az első programom", 0 STR 2 DB "Helló mindenkinek!", 0 HW DD ? EXTERN üzenet. doboz. [e-mail védett]: KÖZEL. KÓD START: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Üzenet. doboz. [e-mail védett] RET END START START

Az INVOKE direktíva A MASM nyelvi fordító a függvényhívás egyszerűsítését is lehetővé teszi egy makróeszköz segítségével - az INVOKE direktíva: INVOKE függvény, paraméter1, paraméter2, ... Nem kell @16-ot hozzáadni a függvényhíváshoz; a paraméterek pontosan a függvényleírásban megadott sorrendben vannak felírva. A fordító makrók paramétereket tolnak a verembe. az INVOKE direktíva használatához rendelkeznie kell a PROTO direktívát használó függvény prototípusának leírásával a következő formában: Üzenet. doboz. A PROTO: DWORD, : DWORD

Általános információk az assembly nyelvről

A szimbolikus assembly nyelv lehetővé teszi a gépi nyelvű programozás hiányosságainak nagyrészt kiküszöbölését.

Legfőbb előnye, hogy az assembly nyelvben minden programelem szimbolikus formában jelenik meg. A szimbolikus parancsnevek bináris kódjukká alakítása a felelős speciális program- assembler, amely megszabadítja a programozót a fáradságos munkától és kiküszöböli az elkerülhetetlen hibákat.

Az assembly nyelven történő programozás során bevezetett szimbolikus nevek általában tükrözik a program szemantikáját, és a parancsok rövidítése - fő funkciójuk. Például: PARAM - paraméter, TABLE - táblázat, MASK - maszk, ADD - összeadás, SUB - kivonás stb. n. Az ilyen neveket a programozó könnyen megjegyzi.

Az assembly nyelvű programozáshoz komplexnek kell lennie eszközöket mint gépi nyelven történő programozásnál: szükségünk van mikroszámítógépre vagy PC-re épülő számítógépes rendszerekre perifériakészlettel (alfanumerikus billentyűzet, karakteres kijelző, hajlékonylemez-meghajtó és nyomtató), valamint rezidens vagy keresztprogramozási rendszerekre a szükséges típusokhoz. mikroprocesszorok. Az Assembly nyelv lehetővé teszi a gépi nyelvnél sokkal összetettebb programok hatékony írását és hibakeresését (akár 1-4 KB).

Az összeállítási nyelvek géporientáltak, vagyis a megfelelő mikroprocesszor gépi nyelvétől és szerkezetétől függenek, mivel minden mikroprocesszor utasításhoz egy adott szimbolikus nevet rendelnek.

Az összeállítási nyelvek jelentős növekedést biztosítanak a programozók termelékenységében a gépi nyelvekhez képest, és ugyanakkor megtartják a mikroprocesszor összes szoftverrel elérhető hardver erőforrásának használatát. Ez lehetővé teszi a képzett programozók számára, hogy olyan programokat írjanak, amelyek több mint egy kis időés kevesebb memóriát foglalnak el, mint a magas szintű nyelven írt programok.

Ebben a tekintetben szinte minden I / O eszközvezérlő program (illesztőprogram) assembly nyelven van írva, annak ellenére, hogy a magas szintű nyelvek meglehetősen nagy választéka található.

Az assembly nyelv használatával a programozó a következő paramétereket állíthatja be:

a mikroprocesszor gépi nyelvének minden egyes parancsának mnemonikus (szimbolikus neve);

szabványos formátum egy assemblerben leírt program soraihoz;

a különböző címzési módszerek és parancsopciók megadására szolgáló formátum;

formátum karakterkonstansok és egész típusú konstansok megadására különböző számrendszerekben;

pszeudo-parancsok, amelyek a program összeállításának (fordításának) folyamatát irányítják.

Az assembly nyelven a program soronként íródik, azaz minden utasításhoz egy sor van lefoglalva.

A legelterjedtebb típusú mikroprocesszorokra épülő mikroszámítógépeknél az assembly nyelvnek több változata is létezhet, azonban az egyiknek általában egy gyakorlati eloszlása ​​van - ez az úgynevezett standard assembly nyelv.

A gépi utasítások szintjén történő programozás az a minimális szint, amelyen a programozás lehetséges. A gépi utasítások rendszerének elegendőnek kell lennie a szükséges műveletek végrehajtásához a számítógép hardverének utasításokkal.

Minden gépi utasítás két részből áll:

működés - a "mit kell tenni" meghatározása;

· operandus - feldolgozó objektumok meghatározása, "mit kell csinálni".

A mikroprocesszor assembly nyelven írt gépi utasítása egyetlen sorból áll, a következő szintaktikai formában:

címke parancs/irányító operandus(ok) ;megjegyzések

Ebben az esetben a sorban egy kötelező mező egy parancs vagy utasítás.

A címkét, a parancsot/direktívát és az operandusokat (ha vannak) legalább egy szóköz vagy tabulátor karakter választja el.

Ha egy parancsot vagy utasítást a következő sorban kell folytatni, akkor a fordított perjel karakter kerül felhasználásra: \.

Alapértelmezés szerint az assembly nyelv nem tesz különbséget a nagy- és kisbetűk között a parancsokban vagy direktívákban.

Közvetlen címzés: A tényleges címet közvetlenül a gépi utasítás eltolási mező határozza meg, amely 8, 16 vagy 32 bites lehet.

mov eax, sum ; eax = összeg

Az assembler lecseréli az összeget az adatszegmensben tárolt megfelelő címre (alapértelmezés szerint a ds regiszter címezi), és a sum címen tárolt értéket az eax regiszterbe helyezi.

indirekt címzés viszont a következő típusokkal rendelkezik:

Közvetett alap (nyilvántartási) címzés;

Közvetett alap (regiszter) címzés eltolással;

· közvetett indexcímzés;

· közvetett alapindex címzés.

Közvetett alap (regiszter) címzés. Ezzel a címzéssel az operandus effektív címe bármely általános célú regiszterben lehet, kivéve az sp / esp és a bp / ebp (ezek speciális regiszterek a verem szegmenssel történő munkához). Szintaktikailag egy utasításban ezt a címzési módot a regiszter nevének szögletes zárójelben való feltüntetésével fejezzük ki.

mov eax, ; eax = *esi; *esi érték az esi címen

Assembly nyelvi parancsok (előadás)

ELŐADÁSTERV

1. A műveletek fő csoportjai.

Pentium.

1. A műveletek fő csoportjai

A mikroprocesszorok utasításokat hajtanak végre, amelyek a következő fő műveletcsoportokat valósítják meg:

továbbítási műveletek,

aritmetikai műveletek,

logikai műveletek,

műszakos műveletek,

összehasonlító és tesztelési műveletek,

bit műveletek,

Programmenedzsment műveletek;

Processzor vezérlési műveletek.

2. Processzorparancsok mnemokódjai Pentium

A parancsok leírásánál általában azok mnemonikus jelöléseit (mnemonikus kódjait) használjuk, amelyek Assembly nyelven történő programozáskor a parancs megadására szolgálnak. Mert különféle változatok Egyes parancsok Assembler emlékeztetői eltérhetnek. Például egy szubrutin meghívására szolgáló parancshoz a mnemonikus kódot használjákHÍVÁS vagy JSR ("Ugorj szubrutin”). A mikroprocesszorok fő típusaihoz tartozó legtöbb parancs mnemonikus kódja azonban megegyezik vagy kissé eltér, mivel ezek a megfelelő angol szavak rövidítései, amelyek meghatározzák a végrehajtandó műveletet. Fontolja meg a processzorokhoz elfogadott parancsmnemonikat Pentium.

Előre irányuló parancsok. Ennek a csoportnak a fő parancsa a parancsMOV , amely adatátvitelt biztosít két regiszter között vagy egy regiszter és egy memóriacella között. Egyes mikroprocesszorok átvitelt valósítanak meg két memóriacella között, valamint több regiszter tartalmának csoportos átvitelét a memóriából. Például a 68-as család mikroprocesszorai Motorola xxx hajtsa végre a parancsotMOZOG , amely biztosítja az átvitelt egyik memóriacellából a másikba, és a parancsMOVEM , amely egy adott regiszterkészlet (maximum 16 regiszter) tartalmát a memóriába írja vagy a memóriából tölti be. CsapatXCHG két processzorregiszter vagy egy regiszter és egy memóriacella tartalmának kölcsönös cseréjét végzi.

Parancsok bevitele BAN BEN és kimenet KI megvalósítani az adatfeldolgozói regiszterből külső eszközre történő adatátvitelt vagy külső eszközről a regiszterbe történő adatvételt. Ezek a parancsok megadják annak az interfészeszköznek (I/O port) a számát, amelyen keresztül adatátvitel történik. Vegye figyelembe, hogy sok mikroprocesszornak nincs külön utasítása a hozzáféréshez külső eszközök. Ebben az esetben az adatok bevitele és kiadása a rendszerben a parancs segítségével történikMOV , amely megadja a szükséges interfész eszköz címét. Így egy külső eszköz memóriacellaként van megcímezve, a címtérben pedig egy meghatározott szekciót foglalunk le, amelyben a rendszerhez kapcsolt interfész eszközök (portok) címei találhatók.

Parancsok aritmetikai műveletekhez. Ebben a csoportban a fő parancsok az összeadás, kivonás, szorzás és osztás, amelyeknek számos opciója van. Hozzáadás parancsok HOZZÁAD és kivonás ALATTI végezze el a megfelelő műveleteketckét regiszterrel, egy regiszterrel és egy memóriahellyel rendelkezik, vagy egy közvetlen operandust használ. Csapatok HIRDETÉS C , SB B az attribútum értékének figyelembevételével végezze el az összeadást és kivonástC, beállítva az átvitel kialakítása során az előző művelet végrehajtásának folyamatában. Ezen parancsok segítségével valósul meg az operandusok szekvenciális összeadása, amelyek számjegyeinek száma meghaladja a processzor kapacitását. Csapat NEG megváltoztatja az operandus előjelét, kettős komplementerré alakítva azt.

Előjeles számokkal (parancsokkal) végezhetők szorzási és osztási műveletekén MUL, én DIV ) vagy aláíratlan (parancsok MUL, DIV ). A művelet eredménye a regiszterben található. Szorzáskor (parancsokMUL , IMUL ) kétszámjegyű eredményt ad, amely két regisztert használ a befogadáshoz. Osztáskor (parancsokDIV , IDIV ) osztalékként egy kétjegyű operandust használunk, amelyet két regiszterbe helyezünk, és ennek eredményeként a hányados és a maradék két regiszterbe íródik.

Logikai parancsok . Szinte minden mikroprocesszor végez logikai ÉS, VAGY, kizárólagos VAGY műveleteket, amelyeket parancsok segítségével hajt végre az azonos nevű operandusbiteken. ÉS, VAGY, x VAGY . A műveleteket két regiszter, egy regiszter és egy memóriahely tartalmával, vagy azonnali operandussal hajtjuk végre. Csapat NEM Megfordítja az operandus minden bitjének értékét.

Shift parancsok. A mikroprocesszorok a megcímzett operandusok aritmetikai, logikai és ciklikus eltolását végzik egy vagy több bittel. Az eltolni kívánt operandus lehet regiszterben vagy memóriahelyen, és a shift bitek számát az utasításban foglalt azonnali operandus segítségével, vagy a megadott regiszter tartalma határozza meg. Az átadási jel általában részt vesz a váltás végrehajtásábanCaz állapotnyilvántartásban (SR vagy ZÁSZLÓK), amely a regiszterből vagy a memóriahelyből kihúzott operandus utolsó bitjét tartalmazza.

Összehasonlítási és tesztelési parancsok . Az operandusok összehasonlítása általában az utasítással történikCMP , amely elvégzi az operandusok kivonását a jellemzők értékeinek beállításával N, Z, V, C az állapotregiszterben az eredmény szerint. Ebben az esetben a kivonás eredménye nem kerül mentésre, és az operandusok értékei nem változnak. A kapott jellemző értékek utólagos elemzése lehetővé teszi a relatív érték meghatározását (>,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Egyes mikroprocesszorok tesztparancsot hajtanak végre TST , amely az összehasonlítási utasítás egyetlen operandusos változata. Amikor ez a parancs végrehajtódik, a jelek beállnak N, Z a címzett operandus előjele és értéke (egyenlő vagy nem nulla) szerint.

Bit kezelési utasítások . Ezek a parancsok állítják be az attribútum értékétCaz állapotregiszterben a tesztelt bit értékének megfelelőenbn a címzett operandusban. Egyes mikroprocesszorokban a tesztelés eredménye szerint egy előjelet állítanak beZ. Tesztbit számanvagy a parancsban megadott regiszter tartalma, vagy egy azonnali operandus állítja be.

Ennek a csoportnak a parancsai különböző opciókat valósítanak meg a tesztelt bit megváltoztatására BT ennek a bitnek az értékét változatlanul tartja.Parancs B T S a tesztelés után beállítja az értéket bn=1, és a parancs B T C - jelentése bn=0.Parancs B T C megfordítja a bn bit értékét a tesztelés után.

Programkezelési műveletek. A program vezérléséhez nagyszámú parancsot használnak, amelyek között szerepel:

- feltétel nélküli vezérlésátviteli parancsok;

- feltételes ugrási parancsok;

- parancsok programciklusok szervezéséhez;

- megszakítási parancsok;

- funkcióváltási parancsok.

Az irányítás feltétel nélküli átadását a parancs hajtja végreJMP , amely betöltődik a programszámlálóbaPCúj tartalom, amely a következő végrehajtandó parancs címe. Ez a cím vagy közvetlenül a parancsban van megadvaJMP (közvetlen cím), vagy az aktuális tartalom összegeként számítvaPCés a parancsban megadott eltolás, ami egy előjeles szám (relatív címzés). MertPCtartalmazza a program következő parancsának címét, majd az utolsó metódus beállítja az átmenet címét, a következő címhez képest adott számú bájttal eltolva. Ha az eltolás pozitív, akkor a program következő parancsaira való áttérés történik, ha az eltolás negatív, akkor az előzőekre.

Az alprogramot a parancs használatával a vezérlés feltétel nélküli átadásával is meghívjákHÍVÁS (vagy JSR ). Ebben az esetben azonban a betöltés előttPC új tartalom, amely az alprogram első utasításának címét adja meg, annak aktuális értékét (a következő utasítás címét) el kell menteni, hogy a szubrutin végrehajtása után a főprogramba (vagy a előző szubrutin szubrutinok beágyazásakor). A feltételes ugrási utasítások (program ágak) betöltődnekPCúj tartalom, ha bizonyos feltételek teljesülnek, amelyeket általában az állapotregiszter különböző attribútumainak aktuális értéke szerint állítanak be. Ha a feltétel nem teljesül, akkor a következő programparancs kerül végrehajtásra.

A tulajdonságkezelő parancsok írást biztosítanak - a tulajdonságokat tároló állapotregiszter tartalmának kiolvasását, valamint az egyes tulajdonságok értékeinek megváltoztatását. Például a Pentium processzorok parancsokat hajtanak végre LAHF És SAHF , amelyek az előjeleket tartalmazó alacsony bájtot töltik be az állapotregiszterből EFLAG a regiszter alacsony bájtjára EAXés az alacsony bájt kitöltése ZÁSZLÓK a nyilvántartásból E Ax.. Parancsok CLC, STCállítsa be az átviteli jelző CF=0, CF=1 és a parancs értékeit CMC ennek a tulajdonságnak az értékét megfordítja. Mivel a tulajdonságok határozzák meg a programvégrehajtás folyamatát a feltételes ugrások során, a program vezérlésére általában jellemző változtatási utasításokat használnak.

Processzor vezérlőparancsok . Ebbe a csoportba tartoznak a stop parancsok, a művelet nélkül, valamint számos olyan parancs, amely meghatározza a processzor vagy egyes blokkjainak működési módját. CsapatHLT leállítja a program végrehajtását és a processzort leállított állapotba állítja, amelyből a kilépés megszakítási vagy újraindítási jelek érkezésekor történik ( Visszaállítás). Csapat NOP Egy („üres” utasítás), amely nem okoz semmilyen műveletet, a program késleltetésének megvalósítására vagy a programban keletkezett hiányosságok kitöltésére szolgál.

Különleges csapatok CLI, STI letiltja és engedélyezi a megszakítási kérések szolgáltatását. Processzorokban Pentium vezérlőbitet (flag) használnak erreHA nyilvántartásban ZÁSZLÓK.

Sok modern mikroprocesszor azonosító parancsot ad ki, amely lehetővé teszi a felhasználónak vagy más eszközöknek, hogy információt szerezzenek az adott rendszerben használt processzor típusáról. Processzorokban Pentuim erre való a parancs CPUID , melynek során a feldolgozóról szükséges adatok bekerülnek a nyilvántartásokba EAX,ebx,ECX,EDX majd a felhasználó vagy az operációs rendszer elolvashatja.

A processzor által megvalósított működési módoktól és a feldolgozott adatok meghatározott típusaitól függően a végrehajtható parancsok készlete jelentősen bővíthető.

Egyes processzorok BCD aritmetikai műveleteket hajtanak végre, vagy speciális eredményjavító utasításokat hajtanak végre ilyen számok feldolgozásakor. Számos nagy teljesítményű processzor tartalmaz FPU - számfeldolgozó blokk c "lebegőpont".

Számos modern processzorban több egész vagy szám csoportos feldolgozását valósítják meg. c „lebegőpont” egyetlen paranccsal az elv szerint SIMD („Egyetlen utasítás – Több adat ”) - „Egy parancs – Sok adat”. A műveletek egyidejű végrehajtása több operanduson jelentősen megnöveli a processzor teljesítményét, ha video- és hangadatokkal dolgozik. Az ilyen műveleteket széles körben használják a képfeldolgozásban, az audiojel-feldolgozásban és más alkalmazásokban. E műveletek végrehajtásához speciális blokkokat vezetnek be a processzorokba, amelyek végrehajtják a megfelelő utasításkészleteket, amelyek különböző típusú processzorokban ( Pentium, Athlon) kapta a nevetMMX (“ Milti- Média kiterjesztés ”) – Multimédiás kiterjesztés,SSE(" Streaming SIMD Extension ") – SIMD adatfolyam - hosszabbítás, “3 DKiterjesztés- 3D bővítés.

A cég processzorainak jellemző vonása Intel , a 80286-os modelltől kezdődően a memória elérésének elsőbbségi vezérlése, amelyet akkor biztosítanak, ha a processzor védett virtuális cím módban működik - " Védett mód " (védett mód). Ennek az üzemmódnak a megvalósításához speciális parancscsoportokat használnak, amelyek a memóriavédelem megszervezésére szolgálnak az elfogadott prioritási hozzáférési algoritmus szerint.

Ha hibát észlel, jelöljön ki egy szövegrészt, és nyomja meg a Ctrl + Enter billentyűket
OSSZA MEG: