Alapvető assembly nyelvi összetevők és parancsstruktúra. Az IBM-PC Assembler nyelvi utasításrendszer általános jellemzői (alap utasításkészlet, fő operandus címzési módszerek)

Alapvető assembly nyelvi összetevők és parancsstruktúra.  Az IBM-PC Assembler nyelvi utasításrendszer általános jellemzői (alap utasításkészlet, fő operandus címzési módszerek)
Alapvető assembly nyelvi összetevők és parancsstruktúra. Az IBM-PC Assembler nyelvi utasításrendszer általános jellemzői (alap utasításkészlet, fő operandus címzési módszerek)

Témakör 2.5 A processzorprogramozás alapjai

A program hosszának növekedésével egyre nehezebb megjegyezni a különböző műveletek kódjait. A mnemonika nyújt némi segítséget ebben a tekintetben.

A szimbolikus utasításkódoló nyelvet ún szerelő.

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

Szerelés program konvertálása assembly nyelvről, azaz program gépi nyelven történő elkészítése a műveletek szimbolikus neveinek gépi kódokkal, a szimbolikus címek abszolút vagy relatív számokkal való helyettesítésével, valamint könyvtári programok beépítése és szimbolikus utasítássorozatok generálása meghatározott paraméterek megadásával. mikroutasításokban. Ez a programáltalában ROM-ban helyezik el, vagy valamilyen külső adathordozóról lépik be a RAM-ba.

Az Assembly nyelvnek számos jellemzője van, amelyek megkülönböztetik a magas szintű nyelvektől:

1. Ez egy-egy megfeleltetés az assembly nyelvi utasítások és a gépi utasítások között.

2. Az assembly nyelvű programozó hozzáfér a célgépen található összes objektumhoz és parancshoz.

A géporientált nyelvek programozási alapjainak megértése hasznos:



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

Alkalmazott problémák megoldására szolgáló programok algoritmusainak racionálisabb struktúráinak kidolgozása;

Lehetőség a .exe és .com kiterjesztésű, bármely magas szintű nyelvről lefordított futtatható programok megtekintésére és javítására a forrásprogramok elvesztése esetén (a DEBUG program debuggerbe való meghívásával és a megjelenítésük assembly nyelven történő visszafordításával );

A legkritikusabb feladatok megoldására szolgáló programok összeállítása (a gépi nyelven összeállított program általában hatékonyabb - 30-60 százalékkal rövidebb és gyorsabb, mint a magas szintű nyelvekből fordítás eredményeként kapott programok)

A főprogramban lévő eljárások külön töredékként történő megvalósításához abban az esetben, ha nem valósíthatók meg sem a használt magas szintű nyelven, sem az operációs rendszer szolgáltatási eljárásait használva.

Egy assembly nyelvű program csak az azonos családba tartozó számítógépeken futhat, míg egy magas szintű nyelven írt program potenciálisan különböző gépeken futhat.

Az assembly nyelv ábécéje ASCII karakterekből áll.

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

bináris számok, B betűvel végződik;

D-vel végződő decimális számok;

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

RAM, nyilvántartások, adatábrázolás

Egy bizonyos MP-sorozathoz egyedi programozási nyelvet használnak - assembly nyelvet.

Az Assembly nyelv egy köztes helyet foglal el a gépi kódok és a magas szintű nyelvek között. Ezen a nyelven egyszerűbb a programozás. Egy assembly nyelvű program racionálisabban használja ki egy adott gép (pontosabban MP) képességeit, mint egy magas szintű nyelvű program (ami egyszerűbb a programozónak, mint az assemblernek). Megvizsgáljuk a géporientált nyelvek programozásának alapelveit, példaként az MP KR580VM80 összeállítási nyelvét használva. A nyelven történő programozáshoz általános technikát használnak. A programok rögzítésének speciális technikái a cél MP architektúrájához és parancsrendszeri jellemzőihez kapcsolódnak.

Szoftver modell mikroprocesszoros rendszer MP KR580VM80 alapján

Az MPS programmodellje az 1. ábra szerint

MP portok memória

S Z AC P C

1. kép

A programozó szemszögéből a KR580VM80 MP a következő, program által elérhető regiszterekkel rendelkezik.

A– 8 bites akkumulátor regiszter. Ez az MP fő nyilvántartása. Az ALU-ban végrehajtott bármely művelet magában foglalja a feldolgozandó operandusok egyikének az akkumulátorba helyezését. Az ALU-ban végzett művelet eredménye is általában A-ban tárolódik.

B, C, D, E, H, L– 8 bites általános célú regiszterek (RON). Belső memória MP. Úgy tervezték, hogy tárolja a feldolgozott információkat, valamint a művelet eredményeit. A 16 bites szavak feldolgozása során a regiszterekből BC, DE, HL párok jönnek létre, és a kettős regiszter az első betű - B, D, H. A regiszterpárban az első regiszter a legmagasabb. Az adatok tárolására és a RAM cellák 16 bites címeinek tárolására egyaránt használt H, L regiszterek speciális tulajdonsággal rendelkeznek.

FL– flag regiszter (feature register) 8 bites regiszter, amely az MP-ben aritmetikai és logikai műveletek végrehajtásának eredményének öt jellemzőjét tárolja. FL formátum a kép szerint

C bit (CY - carry) - átvitel, 1-re állítva, ha a bájt magas sorrendjéből átvitel történt az aritmetikai műveletek végrehajtásakor.

P bit (paritás) - paritás, 1-re van állítva, ha az eredmény bitjeiben páros az egységek száma.

Az AC bit egy kiegészítő átvitel, amelyet arra terveztek, hogy az eredmény alsó tetradjából származó átviteli értéket tárolja.

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

Az S (előjel) bit 1-re van állítva, ha az eredmény negatív, és 0-ra, ha az eredmény pozitív.

SP-- a veremmutató, egy 16 bites regiszter, annak a memóriahelynek a címének tárolására szolgál, ahová a verembe utoljára beírt bájtot írták.

RS– programszámláló (programszámláló), 16 bites regiszter, amely a következő végrehajtható utasítás címének tárolására szolgál. A programszámláló tartalma automatikusan 1-gyel növekszik közvetlenül a következő utasításbyte lekérése után.

A 0000H - 07FF cím kezdeti memóriaterületén egy vezérlőprogram és demo programok találhatók. Ez a ROM terület.

0800 - 0AFF - címterület a vizsgált műsorok rögzítéséhez. (RAM).

0В00 - 0ВВ0 - címterület adatrögzítéshez. (RAM).

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

A verem a RAM egy speciálisan szervezett területe, amelyet adatok vagy címek ideiglenes tárolására terveztek. A verembe utoljára betolt szám az első, amelyik kiugrik a veremből. A veremmutató az utolsó veremhely címét tárolja, ahol az információkat tárolták. Egy szubrutin meghívásakor a főprogram visszatérési címe automatikusan eltárolódik a veremben. Általában minden szubrutin elején a végrehajtásában részt vevő összes regiszter tartalma a veremben tárolódik, az alprogram végén pedig visszaáll a veremből.

Assembly nyelvi adatformátum és parancsstruktúra

A Memory MP KR580VM80 egy 8 bites szavakból álló tömb, amelyet bájtoknak neveznek, és minden bájtnak saját 16 bites címe van, amely meghatározza a memóriacellák sorrendjében elfoglalt helyét. Az MP 65536 bájt memóriát tud megcímezni, amely ROM-ot és RAM-ot is tartalmazhat.

Adatformátum

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

D7 D6 D5 D4 D3 D2 D1 D0

A legkisebb jelentőségű bit a 0, a legjelentősebb bit a 7. bit.

A parancsot a formátum jellemzi, vagyis a számára lefoglalt bitek száma, amelyek bájtonként vannak felosztva bizonyos funkcionális mezőkre.

Parancs formátum

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

A parancs első bájtja a mnemonikus formában írt műveleti kódot tartalmazza.

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

A második és harmadik bájt tartalmazhat kezelendő adatokat, vagy címeket, amelyek jelzik az adatok helyét. Azokat az adatokat, amelyeken a műveleteket végrehajtják, operandusoknak nevezzük.

Egybájtos parancsformátum a 2. ábra szerint

4. ábra

Az assembly nyelvi utasításokban az opcode egy rövidített formája az angol szavak írásának - egy mnemonikus jelölés. A mnemonika (a görög mnemonikus szóból - a memorizálás művészete) megkönnyíti a parancsok emlékezését azok funkcionális céljának megfelelően.

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


Megszólítási módszerek

Minden operandus kódot (bemeneti és kimeneti) el kell helyezni valahol. Az MP belső regisztereiben lehetnek (a legkényelmesebb és leggyorsabb lehetőség). Elhelyezkedhetnek rendszermemória(a leggyakoribb lehetőség). Végül az I / O eszközökben lehetnek (a legritkább eset). Az operandusok helyét az utasításkód határozza meg. Különféle módszerek léteznek, amelyekkel az utasításkód meghatározhatja, hogy honnan vegye 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ódszerek állnak rendelkezésre:

Azonnali;

Regisztráció;

közvetett;

Kazal.

Azonnali A címzés feltételezi, hogy az operandus (bemenet) közvetlenül az utasításkód után van a memóriában. Az operandus általában egy konstans, amelyet el kell küldeni valahova, hozzá kell adni valamihez stb. Az adatokat a parancs második vagy második és harmadik bájtja tartalmazza, az alacsony adatbájt a második, a magas adatbájt a harmadik parancsbájtban.

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

Regisztráció A címzés feltételezi, hogy az operandus (bemenet vagy kimenet) a belső MP regiszterben van. Egybájtos parancsokban használatos

Közvetett Az (implicit) címzés feltételezi, hogy az MP belső regisztere nem maga az operandus, hanem a memóriában lévő címe.

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

Parancsrendszer

Az MP parancsrendszer azon elemi műveletek teljes listája, amelyeket az MP képes végrehajtani. Az ezekkel a parancsokkal vezérelt MP végrehajtja egyszerű lépéseket, mint például az elemi aritmetika és logikai műveletek, adatátvitel, két érték összehasonlítása, stb. A parancsok száma MP KR580VM80 - 78 (a módosításokkal együtt 244).

A következő parancscsoportok vannak:

Adatátvitel;

Számtan;

Összerakós játékaik;

Ugrás parancsok;

Parancsok a bemenethez-kimenethez, a vezérléshez és a veremmel való munkához.


Parancsok leírásánál és programok írásánál használt szimbólumok és rövidítések

Szimbólum Csökkentés
CÍM 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
Bájt 3 Harmadik parancsbájt
R, R1, R2 Az egyik regiszter: A, B, C, D, E, H, L
RP Az egyik lajstrompár: B - egy repülőgéppárt állít be; D - beállít egy pár DE; H - egy HL-párt határoz meg
RH A pár első regisztrációja
RL A pár második regisztere
Λ Logikai szorzás
V Boole-összeadás
Modulo két kiegészítés
M Memóriacella, amelynek címe meghatározza a HL regiszterpár tartalmát, azaz M = (HL)

Struktúrák assembly nyelven

A fent tárgyalt tömbök azonos típusú elemek gyűjteményét alkotják. Az alkalmazásokban azonban gyakran figyelembe kell venni egy bizonyos adatkészletet különböző típusú mint valami egyedi típus.

Ez nagyon lényeges például az adatbázis-programoknál, ahol különböző típusú adatok gyűjteményét kell egy objektumhoz társítani.

Például korábban megnéztük a 4. listát, amely három bájtos elemekből álló tömbbel működött. Mindegyik elem két különböző típusú elem volt: egy egybájtos számlálómező és egy kétbájtos mező, amely a tároláshoz és a feldolgozáshoz szükséges további információkat hordozhatta. Ha az olvasó ismeri valamelyik magas szintű nyelvet, akkor tudja, hogy egy ilyen objektumot általában speciális adattípussal írnak le - szerkezetek.

Az assembly nyelv használhatóságának javítása érdekében ezt az adattípust is bevezették benne.

A-priory szerkezet egy olyan adattípus, amely meghatározott számú különböző típusú elemből áll.

Ha struktúrákat szeretne használni egy programban, három dolgot kell tennie:

    Kérdez szerkezeti sablon .

    Ez lényegében egy új adattípus definiálását jelenti, amivel később az ilyen típusú változók definiálhatók.

    Határozza meg szerkezet példány .

    Ez a szakasz egy adott változó inicializálását foglalja magában egy előre meghatározott (sablon segítségével) struktúrával.

    Szervez a struktúra tagjainak elérése .

Nagyon fontos, hogy már az elején megértsd, mi a különbség a kettő között leírás struktúrák a programban és annak meghatározás.

leírni a struktúra egy programban azt jelenti, hogy csak a sémáját vagy mintáját jelzi; memória nincs lefoglalva.

Ez a sablon csak információnak tekinthető a fordító számára a mezők helyéről és alapértelmezett értékéről.

Határozza meg A struktúra azt jelenti, hogy utasítja a fordítót, hogy foglaljon le memóriát és rendeljen szimbolikus nevet ehhez a memóriaterülethez.

A struktúrát a programban csak egyszer írhatja le, és akárhányszor definiálhatja.

Struktúra sablon leírása

A szerkezetsablon-deklaráció a következő szintaxissal rendelkezik:

szerkezet_neve STRUC

szerkezet_neve VÉGE

Itt adatleíró direktívák sorozata db, dw, dd, dqÉs dt.

Operandusaik határozzák meg a mezők méretét és opcionálisan a kezdeti értékeket. Ezek az értékek esetleg inicializálják a megfelelő mezőket a struktúra meghatározásakor.

Amint azt a sablon leírásakor már megjegyeztük, nincs memória foglalva, mivel ez csak információ a fordító számára.

Elhelyezkedés sablon a programban tetszőleges lehet, de az egymenetes fordító logikáját követve annak a hely előtt kell elhelyezkednie, ahol az ilyen szerkezetű változót meghatározzuk. Azaz, amikor egy változót valamilyen struktúra típusú adatszegmensben írunk le, a sablonját az adatszegmens elejére vagy elé kell helyezni.

Fontolja meg a struktúrákkal való munkát egy bizonyos részleg alkalmazottai adatbázisának modellezésével.

Az egyszerűség kedvéért, hogy elkerüljük a bevitel során az információkonverzió problémáit, egyetértünk abban, hogy minden mező szimbolikus.

Határozzuk meg ennek az adatbázisnak a rekordstruktúráját a következő mintával:

Adatok meghatározása struktúratípussal

Ahhoz, hogy a sablon segítségével leírt struktúrát a programban használhassuk, meg kell határozni egy változót ennek a szerkezetnek a típusával. Ehhez a következő szintaxist használják:

[változónév] szerkezet_neve

    változó neve- az adott szerkezettípus változó azonosítója.

    A változónév megadása nem kötelező. Ha nincs megadva, akkor a rendszer egyszerűen lefoglal egy memóriaterületet a struktúra összes elemének hosszának összegével.

    értékek listája- a szerkezeti elemek kezdeti értékeinek vesszővel elválasztott listája szögletes zárójelben.

    Feladata is választható.

    Ha a lista hiányos, akkor az adott változóhoz tartozó struktúra minden mezőjét a sablonból származó értékekkel inicializálja, ha van ilyen.

    Az egyes mezők inicializálása megengedett, de ebben az esetben a hiányzó mezőket vesszővel kell elválasztani. A hiányzó mezők inicializálása a struct sablonból származó értékekkel történik. Ha egy új változó definiálásakor ennek a szerkezetnek a típusával egyetértünk a sablonban szereplő összes mezőértékkel (vagyis alapértelmezés szerint), akkor csak szögletes zárójeleket kell írni.

    Például: győztes munkás.

Például definiáljunk több változót a fent leírt szerkezettípussal.

Szerkezeti módszerek

A strukturális típus bármely programozási nyelvbe történő bevezetésének ötlete az, hogy különböző típusú változókat egyesítsünk egy objektumba.

A nyelvnek lehetőséget kell biztosítania ezekhez a változókhoz egy adott struktúrapéldányon belül. Annak érdekében, hogy egy parancsban valamilyen szerkezetű mezőre hivatkozzanak, egy speciális operátort használnak - szimbólum ". " (pont). A következő szintaxisban használatos:

    cím_kifejezés- valamilyen szerkezeti típusú változó azonosító vagy zárójelben lévő kifejezés az alább jelzett szintaktikai szabályoknak megfelelően (1. ábra);

    szerkezet_mező_neve- mezőnév a szerkezetsablonból.

    Valójában ez is egy cím, vagy inkább a mező eltolása a struktúra elejétől.

Tehát az operátor" . " (pont) kiértékeli a kifejezést

Rizs. 5. Címkifejezés szintaxisa egy struktúramező hozzáférési operátorban

Mutassuk meg az általunk meghatározott szerkezet példáján munkás néhány technikát a szerkezetekkel való munkavégzéshez.

Például kivonat ide fejsze mezőértékek az életkorral. Mivel nem valószínű, hogy egy cselekvőképes személy életkora meghaladja a 99 évet, a karaktermező tartalmának nyilvántartásba vétele után fejsze paranccsal kényelmes lesz bináris reprezentációvá alakítani aad.

Legyen óvatos, mert az adattárolás elve miatt „alacsony bájt alacsony címen” a kor legmagasabb számjegye kerül be al, és a legfiatalabb a Ah.

A javításhoz használja a parancsot xchg al, ah:

mov ax,word ptr sotr1.age ;at al age sotr1

és ez így lehetséges:

A szerkezetek tömbjével végzett további munka ugyanúgy történik, mint egy egydimenziós tömb esetében. Itt több kérdés is felmerül:

Hogyan kezeljük a méretet és hogyan szervezzük meg a tömbelemek indexelését?

A programban definiált többi azonosítóhoz hasonlóan a fordító a struktúratípus nevéhez és a változó nevéhez a szerkezettípussal egy type attribútumot rendel. Ennek az attribútumnak az értéke a struktúra mezői által elfoglalt méret bájtokban. Ezt az értéket az operátor segítségével kinyerheti típus.

Ha egy struktúrapéldány mérete ismertté vált, az indexelés megszervezése struktúrák tömbjében nem különösebben nehéz.

Például:

Hogyan másolhatunk egy mezőt az egyik struktúrából egy másik struktúra megfelelő mezőjébe? Vagy hogyan lehet a teljes szerkezetet másolni? Másoljuk a mezőt nam harmadik alkalmazott a területen namötödik alkalmazott:

mas_sotr worker 10 dup()

mov bx, offset mas_sotr

mov si,(munkás típus)*2 ;si=77*2

mov di,(munkás típusa)*4 ;si=77*4

Nekem úgy tűnik, hogy a programozó mestersége előbb-utóbb jó háziasszonynak teszi az embert. Ő is, akárcsak ő, állandóan azt keresi, hol mentsen meg valamit, vágjon vissza, és készítsen egy csodálatos vacsorát minimális ételből. És ha ez sikerül, akkor az erkölcsi elégedettség nem kisebb, sőt talán több is, mint egy csodálatos vacsora a háziasszonynál. Úgy tűnik számomra, hogy ennek az elégedettségnek a mértéke a szakma iránti szeretet mértékétől függ.

Másrészt a szoftver- és hardverfejlesztésben elért haladás némileg ellazítja a programozót, és elég gyakran a légyről és az elefántról szóló közmondáshoz hasonló helyzet adódik – egy-egy apró probléma megoldására a nehéz eszközök amelyeknek hatékonysága általában csak viszonylag nagy projektek megvalósítása esetén jelentős.

A következő két típusú adat nyelven való jelenléte valószínűleg a „hostess” azon vágyának köszönhető, hogy az asztal munkaterületét (RAM) a lehető leghatékonyabban használja ételkészítéskor vagy termékek elhelyezésekor (programadatok) ).

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űtő - a "mit kell tenni" meghatározása;
  • operandus - feldolgozó objektumok meghatározása, „mihez kezdjünk”.

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

címke parancs/irányelv operandus(ok) ;megjegyzések

Ahol kötelező mező sorban egy parancs vagy utasítás található.

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.

Példa kódsorok:

Countdb 1 ;Név, direktíva, egy operandus
mov eax,0 ;Parancs, két operandus
cbw ; Csapat

Címkék

Címke assembly nyelven a következő karaktereket tartalmazhatja:

  • a latin ábécé összes betűje;
  • számok 0-tól 9-ig;
  • speciális karakterek: _, @, $, ?.

A pont használható a címke első karaktereként, de néhány fordító nem támogatja ezt a karaktert. A fenntartott összeállítási nyelvnevek (irányelvek, operátorok, parancsnevek) nem használhatók címkeként.

A címke első karakterének betűnek vagy speciális karakternek (nem számnak) kell lennie. A címke maximális hossza 31 karakter. Minden olyan címkének, amely egy assembler direktívát nem tartalmazó sorba ír, kettősponttal kell végződnie: .

Csapatok

Csapat megmondja a fordítónak, hogy a mikroprocesszornak milyen műveletet kell végrehajtania. Egy adatszegmensben egy parancs (vagy direktíva) határoz meg egy mezőt, munkaterületet vagy állandót. A kódszegmensben az utasítás egy műveletet határoz meg, például egy mozgatást (mov) vagy egy hozzáadást (add).

irányelveket

Az assembler számos operátorral rendelkezik, amelyek lehetővé teszik az összeállítás és a lista létrehozásának folyamatát. Ezeket az operátorokat hívják irányelveket . Csak a program összeállításának folyamatában járnak el, és az utasításokkal ellentétben nem generálnak gépi kódokat.

operandusok

Operandus – olyan objektum, amelyen egy gépi parancs vagy egy programozási nyelv operátora végrehajtódik.
Egy utasításnak lehet egy vagy két operandusa, vagy egyáltalán nem. Az operandusok számát implicit módon az utasításkód adja meg.
Példák:

  • Nincs operandus ret ;Return
  • Egy operandus inc ecx ;Inkrement ecx
  • Két operandus add eax,12 ;Add 12 to eax

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 azonban ajánlatos ezeket egy oszlopba írni.

Az operandusok lehetnek

  • azonosítók;
  • karakterláncok szimpla vagy dupla idézőjelbe zárva;
  • bináris, oktális, decimális vagy hexadecimális egész számok.
Azonosítók

Azonosítók – programobjektumok, például műveleti kódok, változónevek és címkenevek kijelölésére használt érvényes karaktersorozatok.

Az azonosítók írásának szabályai.

  • Az azonosító egy vagy több karakterből állhat.
  • Karakterként használhatja a latin ábécé betűit, számokat és néhányat különleges jelek: _, ?, $, @.
  • Az azonosító nem kezdődhet számjegy karakterrel.
  • Az azonosító legfeljebb 255 karakter hosszú lehet.
  • A fordító elfogadja az azonosító első 32 karakterét, a többit figyelmen kívül hagyja.
Hozzászólások

A megjegyzéseket karakter választja el a végrehajtható sortól; . Ebben az esetben minden, ami a pontosvessző után és a sor végéig van írva, megjegyzés. 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és bármilyen nyomtatható karaktert tartalmazhat, beleértve a szóközöket is. A megjegyzés átívelheti a teljes sort, vagy követheti az ugyanabban a sorban lévő parancsot.

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

Egy assembly nyelven írt program több részből állhat, ún modulok . Minden modul 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 kódot, adatokat és veremszegmenseket a megfelelő direktívákkal deklaráltan. A szegmensek deklarálása előtt meg kell adnia a memóriamodellt a .MODEL direktíva segítségével.

Példa egy "semmit csináló" programra assembly nyelven:

686P
.MODEL FLAT, STDCALL
.ADAT
.KÓD
RAJT:

RET
VÉGE START

Ez a program csak egy mikroprocesszor utasítást tartalmaz. Ez a parancs a RET. Ez biztosítja a program helyes leállítását. Általában ez a parancs az eljárásból való kilépésre szolgál.
A program többi része a fordító működéséhez kapcsolódik.
.686P - 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. A direktíva végén található P betű jelzi a fordítónak, hogy a processzor védett módban fut.
A .MODEL FLAT, az stdcall egy lapos memóriamodell. Ezt a memóriamodellt a Windows operációs rendszer használja. stdcall
A .DATA egy adatokat tartalmazó programszegmens.
A .CODE egy kódot tartalmazó programblokk.
A START egy címke. Az assemblerben nagy szerepe van a címkéknek, ami a modern magas szintű nyelvekről nem mondható el.
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 modulnak tartalmaznia kell egy END direktívát, amely kijelöli a program forráskódjának végét. Az END direktívát követő összes sort figyelmen kívül hagyja. Az END direktíva elhagyása hibát generál.
Az END direktíva utáni címke közli a fordítóval annak a fő modulnak a nevét, amelybő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 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 bármelyik sorral kezdődnek forrásmodul pontosvessző karakterrel (;). 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ória_modell, hívási_konvenció, OS_típus, verem_paraméter Alap assembly nyelvű memóriamodellek: Memóriamodell Kódcímzés Adatcímzés operációs rendszer Kód- és adatbeillesztés APRÓ MS-DOS KÖZELÉBEN KICSI MS-DOS KÖZELÉBEN, Windows nem KÖZEPES MESSZI MS-DOS KÖZELÉB, Windows nincs KOMPAKT KÖZEL MS-DOS, Windows nincs NAGY TÁVOLI MS-DOS, Windows nem HATALMAS MS-DOS, Windows NEM Windows 2000, Windows XP, Windows engedélyezett FLAT NT KÖZELÉBEN,

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ó memória_modell, calling_convention, OS_type, stack_parameter Az OS_type paraméter alapértelmezés szerint OS_DOS, és be van kapcsolva Ebben a pillanatban ez az egyetlen támogatott érték ehhez a paraméterhez. 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 kijelöli a program forráskódjának végét. 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ökkel 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: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - egy szabadon terjesztett többmenetes assembler, amelyet Tomasz Gryshtar (lengyel) írt, NASM (Netwide Assembler) - egy ingyenes összeszerelő számára Intel architektúrák Az x86-ot Simon Tatham hozta létre Julian Hall-lal, é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.!}

OS programozás Windows programozás OC-ban a Windows 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).

Hívás ablakok jellemzői API A súgófájlban bármely API függvény a függvény_neve 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. Hívás meghatározott funkciótí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ármely API függvény végrehajtásának eredménye á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 ? KÜLSŐ ü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 összetettebb eszközök szükségesek, mint a gépi nyelvű programozáshoz: mikroszámítógép alapú számítógépes rendszerek vagy készlettel rendelkező PC-k kellenek. perifériák(alfanumerikus billentyűzet, karakteres kijelző, hajlékonylemez-meghajtó és nyomtató), valamint rezidens vagy keresztprogramozási rendszerek a szükséges típusú mikroprocesszorokhoz. 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 gyakorlott programozók számára, hogy olyan programokat írjanak, amelyek rövidebb idő alatt futnak le, é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 az assemblerben leírt program soraihoz;

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

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 van a következő típusok:

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