A gépi nyelv hogyan tud lefutni, és elindítani a processzort?
Az Assembly-hez is kell assembler. De a gépi nyelvhez nem kell semmi?
Mitől függ, hogy lefut-e vagy sem?
Röviden és egyszerűsítve: minden futó program a processzoron gépi kódban fut (még a pythos is, csak ott ugye ez az interpreter). A gépi kód bináris számokból áll (0-k és 1-ek), melyek a memóriában vannak (RAM). A processzor innen szépen sorban olvassa be az utasításokat és feldolgozza őket. A feldolgozás azt jelenti, hogy veszi az utasítást, annak az értéke alapján pedig a megfeleő utasításhoz tartó műveletet (pl. összeadás) elvégzi. A műveletekhez regiszereket használ belül az operandusok tárolására.
Tehát nem a gépi nyelv indítja el a processzort, hanem a processzor dolgozza fel az utasításokat és hajtja őket végre. Ezek az utasítások amúgy egyszerűek, pl. memóriába írás/olvasás, négy alapművelet, stb.
A többi alkazrész kezelése történhet pl. memóriacímzéssel. Pl. PCI buszra írással/olvással, amit az adott eszköz figyel
A gépi nyelv egy olyan nyelv, amelyet a számítógép processzora képes értelmezni és végrehajtani. A gépi nyelvben írt utasításokat a processzor közvetlenül végrehajtja, ezért a gépi nyelv a leggyorsabb és leghatékonyabb módja a számítógép vezérlésének.
A gépi nyelvben írt programokat általában fordítóprogramok segítségével fordítják át olyan nyelvekbe, amelyeket az emberek könnyebben tudnak olvasni és írni, mint például a C++ vagy a Python. A fordított programot aztán lehet futtatni a számítógépen, és a processzor végrehajtja az utasításokat.
A processzor és a számítógép többi alkatrésze között van egy olyan adatcsere, amelynek segítségével a processzor el tudja indítani és irányítani a többi alkatrész működését. A processzor általában egy olyan "vezérlő egység" (control unit), amely irányítja a számítógép működését, és végrehajtja az utasításokat, amelyeket a gépi nyelvben írt programok adnak neki.
A processzor általában egy olyan úgynevezett "memória-címekkel" dolgozik, amelyek megadják, hogy melyik memóriacímekben találhatóak az adatok, amelyeket a processzor szükségesnek lát. A processzor el tudja indítani a többi alkatrész működését azáltal, hogy elküldi nekik az utasításokat és az adatokat, amelyeket szükségesnek lát a működésükhöz.
A processzor különféle úgynevezett "vezérlő áramkörökkel" is rendelkezik, amelyek segítségével tudja irányítani a többi alkatrész működését. Például a processzor tudja vezérelni a számítógép háttértárának működését, az adatok áramlását a memória között, és más fontos funkciókat is.
néhány példa a gépi nyelvben írt utasításokra:
ADD: Az "ADD" utasítás azt jelenti, hogy a processzor két számot össze kell adnia, és az eredményt el kell tárolnia valahol a memóriában.
MOV: Az "MOV" utasítás azt jelenti, hogy a processzor egy adatot kell áthelyeznie valahonnan valahova a memóriában.
CMP: Az "CMP" utasítás azt jelenti, hogy a processzor két számot kell összehasonlítania, és meg kell határoznia, hogy melyik szám nagyobb.
JMP: Az "JMP" utasítás azt jelenti, hogy a processzor a program futásának egy másik pontjára kell ugrania, és onnan kell folytatnia a végrehajtást.
Ezek csak néhány példa a gépi nyelvben létező utasításokra. A gépi nyelvben sokféle utasítás létezik, és a processzor képes végrehajtani számos más utasítást is.
ADD R1, R2, R3
Ez az utasítás azt jelenti, hogy a processzor két számot (R2 és R3) össze kell adnia, és az eredményt el kell tárolnia R1-ben.
def add(x, y):
return x + y
print(add(3, 4))
Ez a Python-ban írt program egy "add" nevű függvényt definiál, amely két számot vesz át, és összeadja őket. Majd a program a függvényt meghívja, és a "3" és a "4" számokat adja át neki, aminek az eredménye "7" lesz. A program végül kiírja az eredményt a képernyőre.
Jó, de a processzor mért, és hogyan dolgozza ezeket föl? Pl. mért indul el a feldolgozása bizonyos parancsokra, és másokéra mért nem?
A gépi nyelv hogy tud lefutni? Mi alapján működik a gépi nyelv?
Két szám összeadása milyen parancsokkal működne?
A processzor áramkör (nagyon bonyolult egyébként, de most ettől tekintsünk el). Mint mondtam, sorban ovassa be a parancsokat és a parancs alapján tudja, hogy mi kett csinálni. Sokféle parancs van, pl. összeadás. Ennek van egy egyedi azonosítója, pl. az, hogy a 4 bájtos parancs első bájta 10 értékű. Tehát, a processzor egy komparátorba küldi a parancsot, és ha igaz, akkor az összeadás áramkör lesz aktív, ha hamis, akkor pedig nem (pontosabban, sok parancs van, és az lesz aktív amelyre igazat ad vissza). Az összeadás áramkör pedig címzéssel a regiszerekből kiveszi az értékeket, összeadja őket és visszaírja a célregiszterbe.
A miért indul el a feldolgozás: folyamatosan van feldolgozás, maximum ez a feldolgozás egy ún. NOP, azaz no operation, vagyis üresjárat. Amikor a processzor nem csinál semmit, akkor ezeket pörgeti folyamatosan (és ezt úgy csináltáék meg, hogy keveset fogyasszon).
Egy gépi kódban adott bináris számok adott parancsot jelentenek, más processzorban már a gépi kód, ugyanaz a bináris más parancsot jelent (vagy értelmetlen
Gépi nyelv nem létezik. Te inkább gépi kódra gondolhattál.
A gépi kód nem indítja el a processzort. Nem is lenne erre képes, mert a gépi kód a processzoron hajtódik végre, annak meg ehhez, mármint a végrehajtáshoz már működnie kellene.
A processzor a gép bekapcsolása pillanatában feszültség alá kerül. Ezzel egy időben a processzor órajel generátora is feszültséget kap és kitol magából egy impulzust, egy négyszögjelet. Ez az órajel hajtja meg a processzort.
Minden processzor egy állapotgép. van nekik valahány regiszterük, számolóművük (ALU), adat, cím és vezérlő sinük. Ezek mind kisebb-nagyobb áramköri elemek, amelyek egymással kapcsolatban állnak, egymás működésére hatnak.
Az állapotuk akkor változik meg, amikor az órajel beérkezik, ez ugyanis "bemozgatja" a részeket. Elkezdődik egy adott műveletsor (boot). A memória meghatározott részéből adat olvasódik be a processzorba, az az adat pedig beállítja az állapotgépet (a procit) valamilyen másféle helyzetbe. A következő órajel meg azt a beállított helyzetet nyugtázza. Na, ez a folyamat maga a program végrehajtás.
"Ja és még annyi, hogy akkor az assembly is lassabb a gépi nyelvnél, mert mindig lefut az assembler? "
Nem. Natív nyelvek esetében nincs olyan, mint a pythonnál, vagy más interpreteres nyelvnél.
Natívnál maga a gépi kód kerül be a memóriából a processzorba. Ezért is gyorsabb.
A gépi kódot meg az assembler vagy más fordító (compiler) állítja elő a forrásból.
További kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!