Kezdőoldal » Számítástechnika » Programozás » A boot szektor bootloaderében...

A boot szektor bootloaderében miért olyan fontos az önmagát állandóan meghívó (jmp $) végtelen ciklusú utasítás?

Figyelt kérdés
2014. nov. 14. 00:04
 1/3 anonim ***** válasza:
100%
Mert ha leállna a program futása, mégis hová kerülne a vezérlés? Ha a bootloader leáll, utána már nincs visszaút a gépnek, csak az újraindítás.
2014. nov. 14. 00:41
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
Tehát tulajdonképpen nem önmagát hívja meg hanem az éppen aktuális címen lévő utasítást ugye?
2014. nov. 14. 01:34
 3/3 anonim ***** válasza:
100%

Az első jó felé kapirgál, de nem pontosan ez a helyzet.


A bootloader tulajdonképpen nem áll le soha. A processzor számára ismeretlen fogalom a program vége. Az egész memóriát egyetlen egy, irdatlan hosszú bájtsorként értelmezi, így is hajtja végre.

Amikor futtatsz valamit (az ugrásoktól, ciklusoktól most tekintsünk el egy pillanatra), akkor a CPU mindig egyre magasabb címről fog utasítást betölteni.


Amikor elér a bootloader végére, elkezdi végrehajtani azt a bármit is, amit utána talál. Innentől egyrészt kiszámíthatatlan, a futás, másrészről előbb-utóbb bele fog szaladni vagy egy BIOS reboot rutinba, vagy egy olyan utasítássorozatba, amely dupla-, illetve tripla kivételt okoz (ennek részleteibe most ne menjünk bele). Triple kivételkor a helyzet menthetetlennek számít, így ilyenkor az alaplap automatikusan reseteli a CPU-t.


Egyébként a jmp $ (amely valóban saját magára ugrik, mivel a $ jel ASM-ben az aktuális sor memóriabeli címét jelenti) bad practice, mert feleslegesen darálja az órajelet, ezzel fűtve a procit és zabálva az áramot. Bootloaderben azért van létjogosultsága, mert csak két bájtot foglal. Ahol ván elég hely, ott a helyes megoldás:


_halt_cpu:

˙˙˙˙cli

˙˙˙˙hlt

˙˙˙˙jmp _halt_cpu


Az utolsó ugrásra azért van szükség, mert bár a megszakításokat letiltottuk, és így a CPU elvileg vég nélküli alvásba kezd, gyakorlatilag egy NMI bármikor betehet ennek, így ekkor vissza kell küldeni a processzort az alvós kódra.


Ha minden igaz, nem hagytam ki semmit...

2014. nov. 14. 17:57
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!