Kezdőoldal » Számítástechnika » Programozás » Mért így van Assembly-ben?

Mért így van Assembly-ben?

Figyelt kérdés

Már az elején nem értem.


x = y + 1


Mozgassuk y értékét az 1. regiszterbe.

Mozgassuk az 1-es számot a 2. regiszterbe.

Az 1. regisztert adjuk a 2. regiszterhez.

A 2. regisztert mozgassuk az x változóba.


Így gyorsabb szerintem:

Mozgassuk az 1-es számot a 2. regiszterbe.

A 2. regisztert mozgassuk az x változóba.


2022. máj. 27. 19:50
1 2 3 4
 31/34 anonim ***** válasza:
0%
AVRs without SRAM will have a specialized set of registers to create a fixed-depth "hardware stack" but there is no explicit SP register in that case.
2022. máj. 30. 00:19
Hasznos számodra ez a válasz?
 32/34 anonim ***** válasza:
0%

MiniRISC processzor – Felépítés


(A MiniRISC processzor vezérlőegysége - Verem)


• A verem (stack) egy LIFO (Last-In-First-Out) adattároló

– A legutoljára beírt adat olvasható ki először

– Két művelet értelmezhető rajta

• Push: adat ráhelyezése a verem tetejére (tele verem → túlcsordulás)

• Pop: adat levétele a verem tetejéről (üres verem → alulcsordulás)


• A verem típusa lehet

– A processzorban lévő belső hardveres verem

– A memóriában megvalósított külső verem

• Az SP (Stack Pointer) regiszter tárolja a verem tetejének címét

• A MiniRISC processzorban 16 szavas belső hardveres verem van

2022. máj. 30. 03:23
Hasznos számodra ez a válasz?
 33/34 anonim ***** válasza:
63%
ÉS a fentiek közül melyiket használják a mai napig elterjedten? Különösen pl. a PDP-11-re gondolok ami a listádban is szerepel. A világ legkorszerűbb gépe /jahh nem közel 45 éve nem gyártják/. Most fogd meg és mindegyik sorod mellé írd oda, hogy melyik évben kezdték a gyártását és mikor fejezték be. Amit meg te ide böfögtél az meg keveri a stack és az akkumulátor gépet. Ezt fel kéne lassan fogjad. Értem én, hogy mi az, hogy stack gép de amit eddig ide böfögtél az nem az volt, hanem a kettő elég furcsa vegyítéke. De ezt méeg nem voltál képes felfogni.
2022. máj. 30. 08:35
Hasznos számodra ez a válasz?
 34/34 anonim ***** válasza:
63%

"AVRs without SRAM will have a specialized set of registers to create a fixed-depth "hardware stack" but there is no explicit SP register in that case." És azt elolvastad, hogy az AVR ezt a "stack"-et mire használja? Olvasd már el a mondat további résézt amit ide kimásoltál.

Érted te egyáltalán, hogy a kolléga mit írt?

Csak azért, hogy képbe kerüljél. Attól, hogy egy processzorban van stack az nem azt jelenti, hogy stack architektúrás processzorról beszélünk. Igen a Z80-ban is van stack meg egy rakás más proceesszorban. Csak kérdés, hogy ezt mire használja (egyébként a stack egy adattárolási módszer ez esetben).

Számtalan esetben ez csak és kizárólag arra szolgál (kisebb AVR-ek, kisebb PIC-ek, régebbi gépek), hogy pl. egy megszakítás esetén a visszatérési címet legyen hol tárolni. Illetve ugyanez szubrutin (alprogram hívás esetén). És nem arra szolgál ezekben a gépekben, hogy helyettesítse a processzoron belül az adatok mozgatását. Fel lehet sorolni kb. 1 millió típusú processzort és gépet amiben ilyen célra volt/van stack. Aztán rájöttek, hogy ez a stack használható arra is, hogy két szubrutin egymásnak "paramétert" adjon át (ez volt az a pont amikor elszabadult a pokol és került beépítésre egy rakás sebezhetőség a rendszerekbe már hardver szinten, de ez egy másik történet).


De amit te ideböfögtél az ún. stack architektúrás processzor ami eztől irgalmatlanul független dolog. Az egy egészen más felépítés de láthatóan nem érted, vagy nem akarod érteni. Mert neked fáj ha szembesítenek azzal, hogy folyamatosan de tényleg foylamatosan zöldséget beszélsz, és minden de tényleg minden kezdő kedvét még az élettől is elveszed. Sőt amit ide böfögtél az ráadásul nem is tisztán stack architektúrás hanem valami katyvasz (tudom te tervezted, de hát még kéne tanuljál egy kisit ehhez).

A "klasszikus" stack architektúrás processzor esetén egy darab átmeneti regiszter van a processzorban amelyikbe (illetve amelyikből) történik a külső adatbuszról (értsd pl. memóriából, IO-ból) illetve adatbusz felé (memóriába, IO-ba) az adatok továbbítása (ennek általában nincs is külön neve, mert alapvetően "láthatatlan" a programozó számára, de AX-nek és BX-nek tuti nem hívták soha sehol). Ezeknél a processzoron belül nincs is több adatregiszter (utasítás számláló, indexregiszter/ek, státusz regiszter, utasíás regiszter stb. van, de ezek most az adatfeldolgozás szempontjából lényegtelenek csak azért írtam ide, hogy tudjuk, hogy miről beszélünk). Ebből az átmeneti regiszterből az adat bekerül a processzor belső stack tetejér. Jön a következő adat a memóriából bekerül az átmeneti regiszterbe onnan a stacktetejére, miközben a stackben az adat "lép" (ennek is különböző technikái voltak, ne menjünk bele mert megint indifferens). Majd jöt a művelet pl. egy összeadás. Ekkor fogta a stack tetején lévő adatokkal elvégezte a kijelölt műveletet és az eredmény a stack tetejére került (hogy ez most felülírta az utolsó adatot, vagy az adatok léptek az processzor és néhány processzor esetén utasítás függő is volt, ezeknél akár több összeadó utasítás is volt). Majd és vagy otthagyta az ember a stackben az adatot mert akarta hozzá adni a következő értéket vagy vissza írta a memóriába, vagy visszaírta és egyuttal ott is hagyta. Ezen felépítés legklasszikusabb példája amit a kolléga is ít az ún. fordított lengyel gépek. De ezeknél nincs AX, BX meg mittom én milyen regiszter csak a stack létezik. És mindig a tetején lévő adatokkal dolgozik a művelet végző egység. Hogy egy művelet hány operandus attól függően 1-2-3-4 stb. értéket vesz le a stack tetejére, és az eredménytől függően tesz be 1-2-3-4 stb. érteket. Pl. egy egész osztás esetén két eredményt kapunk a hányadost és a maradékot.

Te egy olyan öszvért alkottál amit soha senki élesben nem használt mert értelmetlen teljesen. Lehet, hogy van 1-2 eldugott helyen lévő zsákutca fejlesztés (pl. korai CNC gépekben, esetleg PLC-kben voltak ilyen agyament megoldások de nem terjedtek el szerencsére). Hogy van egy adat stack és vannak regiszterek is és így lehet valami igen bonyolult úton pakolászni az adatokat. Ez egy ökörség és tényleg jó lenne ha ezt az ökörséget nem terjesztenéd. Főleg nem egy látjatóan kezdő kérdezőnek.


Ami eztől teljesen független (adat stack) van/lehet egy másik stack is a gépben amiben a visszatérési értékeket tároljuk. De ez teljesen független a műveletvégző egység stackjétől. Az, hogy mindkettőt stacknek hívják az csak azért van mert ez egy adattárolási technika (itt legalábbis, programozásban adatszerkezetnek fogják nevezni, de most a hardverről beszélünk). És adott esetben lehet egy harmadik is ahol pedig az egyes szubrutinok adják át egymásnak a paramétereket (érték vagy cím szerint ez teljesen mindegy), hogy erre is stacket használnak ez egy dolog. Itt sem lenne szükséges a stack aznélkül is vidáman elműködhet a proci és a számítógép.

2022. máj. 30. 10:27
Hasznos számodra ez a válasz?
1 2 3 4

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!