Kezdőoldal » Számítástechnika » Programozás » Magas szintű nyelven megírt...

Magas szintű nyelven megírt program fordítása gépi kódra hogy történik?

Figyelt kérdés
Ahány processzor annyi féle utasításkészlet ugyebár. Hogy lehet az, hogy egy gépi kódra fordított programot (pl exe fájl) mégis minden gép végre tud hajtani, függetlenül attól, milyen processzor van benne. Mi a helyzet akkor, ha a processzor különlegesebb utasításokat is ismer, amit más processzorok általában nem (pl. vmi olyan utasítást aminek segítségével nagyban gyorsítható a videó renderelés), akkor ezt az utasítást hogy lehet használni ezen a processzoron úgy, hogy közben egy olyan processzoron is elfut a program, ami nem is ismeri ezt az utasítást. Valaki elmagyarázná ezt nekem?
2013. jún. 3. 23:17
 1/6 anonim ***** válasza:
68%

Hát ez nem éppen így van. Ha a processzor nem tudja végrehajtani ("mert nem ismeri az utasítást") akkor nem fog végrehajtódni. Ilyenkor jönnek a különböző hibák. Nem véletlen találták ki a "gépigényt". de a processzorok "utasítás készlete" szinte megegyezik. Úgy értem mi értelme lenne olyan processzort készíteni ami semmivel se kompatibilis? Amit írtál a renderelésről pont tudok példát mondai. A sony vegas képes kihasználni a GPU erejét de csak bizonyos videokártyáknál. A laptopomban lévőt nem míg az asztali gépben lévőt ki tudja használni.


Ez a probléma nem a fordítóprogramra van bízva hanem a programozókra, hogy építsenek a programba hiba keresést/ellenőrzést.

2013. jún. 3. 23:44
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
68%

Az, hogy egy EXE elfut minden gépen, eleve nem igaz. Futtass egy 64-bites utasításkészletre fordított programot egy 32-bites rendszeren. Nem fog futni.


És itt jön a kérdésed, hogy mi van, ha egy proci speckó utasításkészlettel bír: hát fordítanak egy olyan speckó változatot a programról, ami arra a procira jó. Lásd 32 és 64 bites változatok: rengeteg programnak van már így 2 változata.


És igen, én is akartam írni, amit #1 írt, hogy annyira nem különbözhetnek a processzorok, hogy gondot okozzon - nem éri meg olyan procit gyártani, amin semmilyen eddigi program nem fut, mert akkor nem venné senki.

2013. jún. 3. 23:50
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:
Jó, akkor maradjunk annál, hogy minden esetben 32 bites programokról beszélünk. De mi van akkor ha az egyik processzoron a JC utasításnak megfelelő gépi kód mondjuk 90 a másikon meg 73. Ezt hogy oldják meg? Vagy ez szabványos dolog? Tehát van mondjuk van egy processzor, ami ismer 10 db gépi kódú utasítást, meg van egy újabb processzor, ami ismer ezen kívül még 2-t, akkor az első 10 utasítás mindkét processzoron ugyanaz lesz, a másik kettőt meg az "általános" program nem használja, de a fejlesztők lefordíthatják az újabbra is, ami meg csak azon fog elfutni?
2013. jún. 4. 00:01
 4/6 anonim ***** válasza:
A fordítóprogramokat is frissítik. Ha bejön valami új dolog, akkor beleteszik szint úgy a programozási nyelveket is frissítik nem úgy van hogy itt a C++ és ennyi többet nem nyúlunk hozzá. Ilyenkor ha a proci tudja le fog futni a kód, ha nem akkor pedig egy kivétel fog keletkezni amiben le lesz írva hogy valami fura hiba okán nem fut a kód. De ezt az okos programozók már magába a programba is beleírják, hogy ne is jöjjön elő az a fura hiba, és csak egy egyszerű hibaüzenetet kapj, hogy az utasítás nem végrehajtható ezért és azért a hibáért. #1 voltam
2013. jún. 4. 00:41
Hasznos számodra ez a válasz?
 5/6 tabaki ***** válasza:
A processzor típusát le lehet kérdezni. Ha megvan a szükséges spéci, akkor egy azt kiaknázó ágra mehet a vezérlés, egyébként marad a hétköznapokban. A jelentősebb utasításkészlet-eltéréseket meg nem egy általános programmal oldják meg, hanem arra a processzorra megírt fordítóval. Ez az egyik nagy előnye a magasszintű nyelveknek, hogy ugyanazt a programot egészen más gépi kódra is le lehet fordítani, anélkül, hogy a hardverkülönbségekkel foglalkoznod kéne. Hasonló a helyzet az oprendszerek eltérő alprogramjainak kezelésével is.
2013. jún. 4. 00:44
Hasznos számodra ez a válasz?
 6/6 iostream ***** válasza:
77%

"Hogy lehet az, hogy egy gépi kódra fordított programot (pl exe fájl) mégis minden gép végre tud hajtani, függetlenül attól, milyen processzor van benne."


Vannak architektúrák, amik nagyrészt azonosak, ha általános kódot fordítasz (illetve az utolsó által felvetett alternatív végrehajtási utakat használod), akkor ugyanaz az exe fog futni az adott architektúra minden processzorán. De próbálj meg egy x86-ra fordított fájlt armon futtatni.

2013. jún. 4. 09:18
Hasznos számodra ez a válasz?

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!