Akkumulátor (informatika)

A Wikipédiából, a szabad enciklopédiából
Adatrendező gép akkumulátorai, 1936 körül. Mind a négy regiszter 1-1 tízjegyű decimális szám tárolására képes

A számítógépek mikroprocesszorában (CPU) az akkumulátor vagy akkumulátorregiszter olyan regiszter, amiben az aritmetikai-logikai egység által végzett műveletek operandusai, illetve az eredmény átmenetileg tárolódik. A korai számítógépekben egy akkumulátorhoz hasonló megoldás nélkül minden műveletvégzés (összeadás, szorzás, eltolás stb.) eredményét vissza kellene írni a fő memóriába, ahonnan talán egyből vissza is kellene olvasni a következő művelet számára. Ez nagyon lelassítaná a számítógép működését, mivel a központi memóriában használt technológia jóval lassabb (de olcsóbb) elérést tesz lehetővé, mint az akkumulátorban és más regiszterekben használt. A korszerű számítógépekben az akkumulátor helyett már egy vagy több regisztertömb van, amelyben akár 512 regiszter is elhelyezkedhet.

A hagyományos példa az akkumulátor használatára egy számokból álló lista összegzése (az accumulator szó szerinti jelentése: felhalmozó). Az akkumulátor kezdeti értékét nullára állítják, majd a számok egyenként beolvasásra kerülnek, és értékük hozzáadódik az akkumulátorhoz. Miután minden szám hozzá lett adva, az akkumulátorban lévő eredmény visszaíródik a központi memóriába, vagy egy másik (nem akkumulátor-) regiszterbe.

Processzorarchitektúra akkumulátorral
Mikroarchitekturális ábra az akkumulátorról és az ALU-ról

Az akkumulátorgép, amit 1-operandusú vagy egycímű gépnek is neveznek, illetve az akkumulátor-architektúrájú processzor olyan CPU, melyben a számítások eredményét – ha vannak is egyéb regiszterei – a CPU egy speciális regiszterben tárolja, amit tipikusan „akkumulátornak” neveznek. A hőskor számítógépei szinte mind akkumulátorgépek voltak; számos, a 2010-es években is népszerű mikrokontroller (mint a 68HC12, aPICmicro, a 8051 és mások) lényegében akkumulátorgép.

A modern mikroprocesszorok jellemzően 2- vagy 3-operandusú gépek – a további operandusok határozzák meg, hogy a számos általános célú regiszter (másképp: általános célú akkumulátor[1]) közül melyik lesz a számítások forrás- és célcíme. Az ilyen mikroprocesszorok nem tekinthetők „akkumulátorgépeknek”.

Az akkumulátorregisztert az általános célú regisztertől az különbözteti meg, hogy az akkumulátor (ha az architektúrában létezik ilyen) lehet aritmetikai utasítások implicit operandusa. Tekintsük a következő gépi kódú utasítást:

     ADD memcím

Ez az utasítás összeadná az akkumulátorban lévő értéket a memcím-en lévő értékkel, az eredményt az akkumulátorba helyezve el. Az utasítás nem azonosítja az akkumulátort a regiszter sorszáma alapján; az utasításban implicit módon szerepel az akkumulátor, és semmilyen másik regiszter nem lehet meghatározva az utasításban. Léteznek olyan architektúrák, ahol egyes utasításokban egy kijelölt regiszter akkumulátorként szerepel, más utasítások pedig explicit módon, a regiszter számával hivatkozhatnak rá.

Az akkumulátor története[szerkesztés | forrásszöveg szerkesztése]

Történelmi konvenciók szerint egy regisztert kiválasztanak „az akkumulátor” szerepére; ez az „aritmetikai szerv” szó szerint akkumulálja magában a számokat egy aritmetikai műveletsor idejére:

„Aritmetikai szervünk első része [...] egy párhuzamos tároló szerv legyen, ami képes egy számot fogadni és hozzáadni a már benne lévőhöz, képes törölni a tartalmát és tárolni azt. Az ilyen szervet nevezzük el akkumulátornak. Ez természetes elvi funkció a legkülönbözőbb múltbéli és jelenkori számítógépeknél, köztük az asztali szorzógépeknél, hagyományos IBM számlálóknál, a modern relés gépeknél, az ENIAC-nál” (Goldstine and von Neumann, 1946; p. 98 in Bell and Newell 1971).

Néhány példa az elérhető utasításokra (modern értelmezésben):

  • Töröld az akkumulátor értékét és add hozzá az X memóracímen található értéket
  • Töröld az akkumulátor értékét és vond ki belőle az X memóracímen található értéket
  • Az X memóriacímen található értéket add az akkumulátorhoz
  • Az X memóriacímen található értéket vond ki az akkumulátorból
  • Töröld az akkumulátor értékét és mozgasd egy regiszter értékét a helyére.

Nincs általánosan elterjedt konvenció az akkumulátor és regiszterek közötti műveletek elnevezésére. Egy hagyományos megoldás (pl. Donald Knuth 1973-as hipotetikus MIX számítógépében) szerint két utasítást használnak, egy load accumulator utasítást a regiszterből vagy memóriából való betöltésre (pl. „LDA r”) és store accumulator utasítást a regiszterbe vagy memóriába való mentésére (pl. „STA r”). Knuth modelljében számos más utasítás is szerepelt.

Jelentős akkumulátor-alapú számítógépek[szerkesztés | forrásszöveg szerkesztése]

IBM 701 számítógép előlapja 1952-ből. A középső részen a LED-es kijelzősorok különböző regiszterek tartalmát jelenítik meg. Baloldalt alul látható az utasításszámlálóinstruction counter

Az IBM korai „tudományos” számítógépeinek többsége, kezdve az 1952-ben bemutatott, vákuumcsöves IBM 701-gyel, egyetlen 36 bites akkumulátort tartalmazott külön szorzó/hányados regiszterrel a hosszabb eredmények kezelésére. A decimális IBM 650-nek tíz számjegyű akkumulátora volt; a későbbi, már tranzisztoros, decimális IBM 7070-ben három akkumulátor is volt.

A 12 bites PDP-8 a miniszámítógépek közül az elsők között használt akkumulátort, ami több későbbi gép designját is befolyásolta. A PDP-8-nak egyetlen akkumulátora volt, a HP 2100 és a Data General Nova 2, illetve 4 akkumulátorral rendelkezett. A Novát azok a mérnökök hozták létre, akik a Digitalon (DEC) belül más fejlesztési utat képviseltek, mint ami végül PDP-11-ben csúcsosodott ki. A Novának négy akkumulátora volt, AC0-AC3, bár az AC2 és az AC3 felhasználható volt eltolási címek megadására is, az általános célú regiszterek irányába tett lépésként. A PDP-11 az általános regiszterek a jelenlegihez közelebb álló modelljét tartalmazta, R0-R7 közötti vagy még tovább folytatódó számozással, amit a legtöbb későbbi CISC és RISC gépek is átvettek.

A korai 4 és 8 bites mikroprocesszorok, mint az Intel 4004, 8008 és mások egyetlen akkumulátorral rendelkeztek. A 8051-es mikrokontrollerben kettő volt, egy elsődleges és egy másodlagos akkumulátor; a másodikat csak szorzásnál (MUL AB) vagy osztásnál (DIV AB) használták, ahol az egyetlen akkumulátor kevésnek bizonyult; szorzásnál a 16 bites eredményt a két 8 bites akkumulátor közösen tárolta, míg osztásnál a hányadost az elsődleges akkumulátor (A), a maradékot a másodlagos akkumulátor (B) tárolta. A 8008-as közvetlen leszármazottaiként a 8080-as és a 8086-os, a széles körben elterjedt Intel x86 család tagjai nagy számok szorzásakor-osztásakor szintén az elsődleges EAX akkumulátort és a másodlagos EDX akkumulátort használják. Például a MUL ECX utasítás a 32 bites ECX és EAX regisztereket szorozza össze, a 64 bites eredményt az EAX-ben és az EDX-ben tárolva. A MUL és a DIV azonban egyedi esetek, más aritmetikai-logikai utasítások (ADD, SUB, CMP, AND, OR, XOR, TEST) a nyolc regiszter (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) bármelyikét kijelölheti akkumulátorként (tehát az utasítás bal operandusaként és célcímeként). Az x86 ezért, bár az akkumulátor-modellre épül, egy meglehetősen általános regiszterarchitektúrának tekinthető.[2] Az x86 utasításkészlet 64 bites kiterjesztése, az x86-64 még általánosabb, hiszen az eredeti 6 helyett 14 általános regiszter található benne.

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. HC16 Overview. Freescale.com. (Hozzáférés: 2008. szeptember 22.)[halott link]
  2. Irvine, Kip R.. Assembly Language for Intel-Based Computers, 5th edition, Pearson Prentice Hall, 633, 622. o (2007). ISBN 0-13-238310-1 
  • Goldstine, Herman H., and von Neumann, John, "Planning and Coding of the Problems for an Electronic Computing Instrument", Rep. 1947, Institute for Advanced Study, Princeton. Reprinted on pp. 92–119 in Bell, C. Gordon and Newell, Allen (1971), Computer Structures: Readings and Examples, McGraw-Hill Book Company, New York. ISBN 0-07-004357-4}. A veritable treasure-trove of detailed descriptions of ancient machines including photos.

Fordítás[szerkesztés | forrásszöveg szerkesztése]