Skip navigation

Regiszterek

Áttekintés

A regiszterek a processzorban található kis-méretű tárolók. Bináris számokat tárolnak, amelyek a következő feladat végrehajtásához szükségesek.

A regiszterek mérete meghatározza a processzor működését is. A regiszterek méretétől függ, hogy alapértelmezetten mekkora számokkal képes dolgozni a processzor, illetve, hogy mekkora memóriát képes megcímezni. Manapság a 64 bites processzorok a legelterjedtebbek. Mi az egyszerűség kedvéért 32 bites programokat írunk.

A regiszterek sok mindenben részt vesznek. Szerepük szerint lehetnek általános célúak, amelyekben a számítások bemenetét és részeredményeit tároljuk, de lehetnek speciális céluak is. Például:

  • Memória címeket tárolhatnak.
  • Mutatják a Verem tetejét a memóriában.
  • Meghatározzák a memóriában a program következő utasításának helyét.
  • stb.

Szegmens regiszterek

Az Intel x86 architektúrájában van 4 db szegmens regiszter, amelyek a segítségével az általunk használt szegmenseket azonosíthatjuk.

  • CS (Code Segment): utasítások címzéséhez,
  • SS (Stack Segment): verem címzéséhez,
  • DS (Data Segment): Elsődleges adatszegmens az adat terület címzéshez,
  • ES (Extra Segment): másodlagos adatszegmens,
  • FS : extra adatszegmens,
  • GS : extra adatszegmens.

Ezen regiszterek mérete minden esetben 16 bit. A regiszterek a szegmensek beazonosításában vesznek részt. (A részletes magyarázathoz lásd az előadás fóliákat.)

Vezérlő regiszterek

A processzorban található két vezérlő regiszter. Ezeknek az értékét általában közvetlenül nem használjuk, vagy módosítjuk. A processzor működését vezérlik.

  • EIP (Extended Instruction Pointer): az éppen végrehajtandó utasítás logikai címét tartalmazza a CS által mutatott szegmensben.
  • ESP (Extended Stack Pointer): a verem tetejére beírt adat logikai címére mutat az SS által mutatott szegmensben.
  • EFLAGS: a processzor állapotát jelző regiszter.

Minden 32 bites regiszter első Extended tagja azt jelzi, hogy a regiszter egy korábbi 16 bites regiszter kiterjesztése. A kompatibilitás megőrzésére a regiszterek alsó 16 bitje külön is nevesíthető.

Ezen regisztereknek speciális célja van. Az EIP, és az EFLAGS közvetlenül nem is olvasható, vagy írható. Az ESP a verem tetejét módosítja, de ha korábbi értékét elveszítjük, akkor elveszíthetjük a vermet, és a programunk futásképtelenné válhat.

Általánosan használható speciális regiszterek

A lenti regiszterek általánosan is használhatóak, de a processzor működéséhez kötött egy-egy speciális funkcióhoz kötött szerepük is van.

  • EBP (Extended Base Pointer): a verem indexelt címzéséhez használatos.
  • ESI (Extended Source Index): a kiindulási (vagy forrás-) adat terület indexelt címzéséhez használatos.
  • EDI (Extended Destination Index): a cél adat terület indexelt címzéséhez használatos.

Ezen regiszterek használhatóak adat tárolásra, de eredetileg speciális céljuk van. Az ESI, és az EDI a sztring műveletekben használatos. Az EBP-vel a veremben szoktunk fix pontot megadni.

Általános célú regiszterek

A Regiszterek általánosan is felhasználhatóak, de egyes utasításokban speciális felhasználásuk/szerepük is lehet.

  • EAX (Extended Accumulator): Szorzásnál, osztásnál van szerepe.
  • EBX (Extended Base Register): Címző regiszter.
  • ECX (Extended Counter): Gyakran használjuk a számlálásos vezérléseknél.
  • EDX (Extended Data Register): Szorzásnál, osztásnál és I/O műveletekben használatos.

Mint a vezérlő regiszterek esetében, az általános regiszterek is a korábbi 16 bites regiszterek kiterjesztett változatai, és (az ’Extended’ jelölő elhagysával) van lehetőség az alsó 16 bit külön történő elérésére is. További kiegészítés, hogy az alsó 16 bit két fele külön külön is megnevezhető.

regiszter felső bájt alsó bájt
AX AH AL Accumulator (szorzás, osztás)
BX BH BL Base Register (címző regiszter)
CX CH CL Counter Regiszter (számláló)
DX DH DL Data Register (szorzás, osztás, I/O)