LOADALL - LOADALL
LOADALL je běžný název pro dva různé, nedokumentované pokyny ke stroji z Intel 80286 a Intel 80386 procesory, které umožňují přístup do oblastí stavu interního procesoru, které jsou obvykle mimo IA-32 API rozsah, jako registry mezipaměti deskriptorů. LOADALL pro 286 procesorů je kódován 0Fh 05h,[1] zatímco LOADALL pro 386 procesorů je 0Fh 07h.[2]
Obě varianty - jak název napovídá - načtou všechny vnitřní registry CPU v jedné operaci. LOADALL měl jedinečnou schopnost nastavit viditelnou část registrů segmentů (selektor) nezávisle na jejich odpovídající části v mezipaměti, což programátorovi umožnilo uvést CPU do stavů, které oficiální programovací model jinak neumožňuje.
Používání
Jako příklad užitečnosti těchto technik může LOADALL nastavit CPU tak, aby umožňoval přístup k celé paměti z skutečný režim, aniž byste jej museli přepínat neskutečný režim (což vyžaduje přepnutí do chráněný režim, přístup do paměti a nakonec přepnutí zpět do reálného režimu). Programy jako předXMS verze RAMDRIVE.SYS (1985),[3][1][4] SMARTDRV.SYS (1986)[4] stejně jako HIMEM.SYS (2.03, 1988-08-04; 2.04, 1988-08-17)[4] řidiči v MS-DOS, Jednotné softwarové systémy ' Vysílač (1985) a Konektor (1985) pro Lotus 1-2-3, Nad diskem (1986)[5] (A OMEZOVAČ od společnosti Above Software (dříve Tele-Ware West aka Los Angeles Securities Group ), který převedl pevný disk prostor nebo rozšířená paměť do rozšířená paměť ), a OS / 2 1.0[3][1] a 1.1[6] použil instrukci 286 LOADALL. DOS 3.3 a 4.0 rezervoval 102bajtovou vyrovnávací paměť v 0070: 0100h (kterou obvykle zabíral DOS BIOS data), takže nebylo nutné je ukládat a obnovovat pro LOADALL. Microsoft EMM386.EXE speciální případy instrukcí LOADALL 286 a 386 v neplatném obslužném programu opcode.[7] Zkoumání kódu monitoru virtuálního stroje v Windows / 386 2.10 ukazuje, že používá jak 286[Citace je zapotřebí ] a ještě méně známá varianta 386[Citace je zapotřebí ]. Microsoft HIMEM.SYS verze 2.06[8] také použil LOADALL k rychlému kopírování do az rozšířené paměti na 286 systémech.
Další zajímavé použití knihy LOADALL, uvedené v knize Návrh OS / 2,[9] by bylo umožnit spuštění dřívějších programů v reálném režimu v 16bitovém chráněném režimu, jak je používá Digitální výzkum je Souběžný DOS 286 od roku 1985,[10][11][12] stejně jako FlexOS 286[13] a IBM 4680 OS[14][15] od roku 1986. Označování všech mezipamětí deskriptorů v GDT a LDT „not present“ by umožnilo operačnímu systému zachytit opětovné načtení segmentových registrů, stejně jako pokusy o provedení „aritmetiky segmentu“ specifické pro reálný režim a emulovat požadované chování aktualizací deskriptorů segmentů (opět LOADALL). Tento „virtuální režim 8086“ pro 80286 byl však příliš pomalý, než aby byl praktický. Myšlenka musela být většinou vyřazena, navíc kvůli chybám v některých časných procesorech Intel 80286 před E-2 šlapání.[10][11][13] Výsledkem bylo, že OS / 2 1.x - a Windows také ve „standardním“ režimu - musely spouštět programy DOS v reálném režimu. Myšlenka však nebyla ztracena; to vedlo Intel k zavedení virtuální režim 8086 z 80386, umožňující implementaci „DOS boxy „konečně relativně efektivním a zdokumentovaným způsobem.
Protože program LOADALL neprováděl žádné kontroly platnosti dat načtených do registrů procesorů, bylo možné načíst stav procesoru, který nebylo možné normálně zadat, například pomocí skutečný režim (PE = 0) společně s stránkováním (PG = 1) na procesorech třídy 386.[2]
An emulátor v obvodu (ICE) je nástroj používaný pro ladění na nízké úrovni. Na procesoru Intel 80386 způsobí uplatnění nezdokumentovaného kolíku v místě B6, že mikroprocesor zastaví provádění a vstoupí do režimu ICE. Mikroprocesor ukládá celý svůj stav do oblasti paměti izolované od normální systémové paměti. Rozložení této oblasti je vhodné pro instrukci LOADALL a tuto instrukci používá kód ICE k návratu k normálnímu provedení.
V pozdějších procesorech se to vyvinulo Režim správy systému. V režimu SMM se instrukce RSM používá k načtení úplného stavu CPU z oblasti paměti. Rozložení této oblasti paměti je podobné tomu, které používá instrukce LOADALL.[16] Instrukci LOADALL ve stylu 386 lze provést také na 486, ale pouze v režimu SMM. V pozdějších procesorech převzala svou roli instrukce RSM s odlišným kódováním.
Microsoft Codeview 3.0 a Borland's Turbo debugger 2.0 správně dekóduje pokyny 286 a 386 LOADALL.[1]
Jelikož tyto dvě instrukce LOADALL nebyly nikdy zdokumentovány a na pozdějších procesorech neexistují, byly operační kódy znovu použity v AMD64 architektura.[17] Operačním kódem pro instrukci 286 LOADALL, 0F05, se stala instrukce AMD64 SYSCALL; instrukce 386 LOADALL, 0F07, se stala instrukcí SYSRET. Tyto definice byly zavedeny i na procesorech Intel se zavedením Intel 64 implementace AMD64.[18]
80286
Opcode 0F05. Instrukce čte data z adres 00800–00866 bez ohledu na obsah segmentových registrů.
Adresa | číslo bajtů | Registrovat | Registrovat | Registrovat | Registrovat |
---|---|---|---|---|---|
00800 | 6 | nepoužívá | |||
00806 | 2 | MSW, stavové slovo stroje | |||
00808 | 14 | nepoužívá | |||
00816 | 2 | TR (registr úkolů) | |||
00818 | 2 | vlajky | |||
0081A | 2 | IP (instrukční ukazatel) | |||
0081C | 2 | LDTR, místní registr tabulky deskriptorů | |||
0081E | 4× 2 | DS (data segment ) | SS (segment zásobníku) | CS (segment kódu) | ES (extra segment) |
00826 | 4× 2 | DI (cílový index) | SI (zdrojový index) | BP (základní ukazatel) | SP (ukazatel zásobníku) |
0082E | 4× 2 | BX | DX | CX | SEKERA |
00836 | 4× 6 | ES deskriptor segmentu | Deskriptor segmentu CS | Deskriptor segmentu SS | Deskriptor segmentu DS |
0084E | 4× 6 | GDT, tabulka globálního deskriptoru | LDT, tabulka místního deskriptoru | IDT, tabulka deskriptorů přerušení | TSS, segment stavu úkolu |
Instrukci 80286 LOADALL nelze použít k přepnutí z chráněného zpět do reálného režimu[19] (nemůže vyčistit bit PE v MSW). Použití instrukce LOADALL však může zabránit nutnosti úplně přepnout do chráněného režimu.
80386
Opcode 0F07. Instrukce načte data z adresy ES: EDI. Ve skutečnosti používá ES, ne deskriptor ES.
Adresa | číslo bajtů | Registrovat | Registrovat | Registrovat | Registrovat |
---|---|---|---|---|---|
ES: EDI + 00 | 4 | CR0, řídicí registr 0 | |||
ES: EDI + 04 | 4 | EFLAGS | |||
ES: EDI + 08 | 4 | EIP, ukazatel instrukce | |||
ES: EDI + 0C | 4× 4 | EDI, cílový index | ESI, zdrojový index | EBP, základní ukazatel | ESP, ukazatel zásobníku |
ES: EDI + 1C | 4× 4 | EBX | EDX | ECX | EAX |
ES: EDI + 2C | 2× 4 | DR6 | DR7 | ||
ES: EDI + 34 | 4 | TR, selektor stavu úkolu | |||
ES: EDI + 38 | 4 | LDTR, tabulka místního deskriptoru | |||
ES: EDI + 3C | 4× 2 | GS, extra segment | nepoužívá | FS, extra segment | nepoužívá |
ES: EDI + 44 | 4× 2 | DS, datový segment | nepoužívá | SS, segment zásobníku | nepoužívá |
ES: EDI + 4C | 4× 2 | CS, segment kódu | nepoužívá | ES, extra segment | nepoužívá |
ES: EDI + 54 | 4× 12 | Deskriptor TSS, selektor stavu úlohy | Deskriptor IDT, tabulka deskriptorů přerušení | Deskriptor GDT, tabulka globálního deskriptoru | Deskriptor LDT, tabulka místního deskriptoru |
ES: EDI + 84 | 4× 12 | GS deskriptor segmentu | Deskriptor segmentu FS | Deskriptor segmentu DS | Deskriptor segmentu SS |
ES: EDI + B4 | 2× 12 | Deskriptor segmentu CS | Deskriptor segmentu ES |
Viz také
Reference
- ^ A b C d Schulman, Andrew; Michels, Raymond J .; Kyle, Jim; Paterson, Tim; Maxey, David; Brown, Ralf D. (1990). Nedokumentovaný DOS: Programátorský průvodce vyhrazenými funkcemi a datovými strukturami systému MS-DOS (1. vyd.). Addison-Wesley. str. 14–15. ISBN 978-0-201-57064-9. (stránky xviii + 694 + viii, diskety 2 × 5,25 " [1] ) Errata: [2][3]
- ^ A b Van Gilluwe, Frank (1994). PC bez dokladů (1. vyd.). Addison-Wesley. 62–70. ISBN 0-201-62277-7. [4]
- ^ A b Duncan, Ray; Petzold, Charles; Baker, M. Steven; Schulman, Andrew; Davis, Stephen R .; Nelson, Ross P .; Moote, Robert (1990). Rozšíření systému DOS (1. vyd.). Reading, MA, USA: Addison-Wesley Publishing Company, Inc. 100–103. ISBN 0-20155053-9.
- ^ A b C Nečasek, Michal (27.10.2013). „Více informací o LOADALLU a OS / 2“. Muzeum OS / 2. Archivováno od originálu dne 2018-10-17. Citováno 2018-10-17.
- ^ Collins, Robert R. (říjen 1991). „Instrukce LOADALL“. TECH Specialist - časopis pro pokročilé vývojáře PC. Lawrence, Kansas, USA: R&D Publications, Inc. 2 (10). ISSN 1049-913X. Archivováno od originálu 2020-02-20. Citováno 2018-10-17. [5] (Pozn. Časopis byl brzy přejmenován na „The DOS Developers Journal“ a nakonec na „The Windows / DOS Developer's Journal“ (ISSN 1059-2407).)
- ^ Nečasek, Michal (18.03.2011). „HIMEM.SYS, neskutečný režim a LOADALL“. Muzeum OS / 2. Archivováno z původního dne 2017-01-03. Citováno 2017-01-03.
- ^ Schulman, Andrew; Brown, Ralf D.; Maxey, David; Michels, Raymond J .; Kyle, Jim (1994) [listopad 1993]. Williams, Andrew (ed.). Nedokumentovaný DOS: Programátorský průvodce vyhrazenými funkcemi a datovými strukturami systému MS-DOS - rozšířen o MS-DOS 6, Novell DOS a Windows 3.1. Programovací řada Andrewa Schulmana (1. tisk, 2. vyd.). Reading, Massachusetts, USA: Nakladatelství Addison Wesley. str.42. ISBN 0-201-63287-X. (stránky xviii + 856 + vi, disketa 3,5 " [6] ) Errata: [7][8]
- ^ „Microsoft HIMEM.SYS 2.06 zdrojový kód“.
- ^ Deitel, Harvey M .; Kogan, Michael S. (1992). Návrh OS / 2. Addison-Wesley. ISBN 0-201-54889-5.
- ^ A b Foster, Edward (1985-05-13). „Super DOS čeká na nový 80286 - souběžný DOS 286 - se zpožděním, než Intel upgraduje čip - nabízí výkon Xenixu a kompatibilitu s IBM PC“. InfoWorld. InfoWorld Media Group. 7 (19): 17–18. ISSN 0199-6649. Archivováno od původního dne 2019-04-21. Citováno 2019-04-21.
- ^ A b Foster, Edward (26.08.1985). „Intel ukazuje nový čip 80286 - Budoucnost DRI Concurrent DOS 286 stále není jasná i po opravě procesoru“. InfoWorld. InfoWorld Media Group. 7 (34): 21. ISSN 0199-6649. Archivováno od původního dne 2019-04-21. Citováno 2019-04-21.
- ^ „Souběžný DOS 68K 1.2 - vývojářská sada pro Motorola VME / 10 - disk 2“. 1986-08-06 [1986-04-08]. Archivováno z původního dne 2019-04-03. Citováno 2018-09-13. (Pozn. Tento balíček obsahuje také některé soubory záhlaví z Souběžný DOS 286, včetně STRUCT.H, který výslovně uvádí LOADALL pro „emulaci 8086“.)
- ^ A b Dodatek FlexOS pro počítače s procesorem Intel iAPX 286 (PDF). 1,3 (1. vyd.). Digital Research, Inc. Listopad 1986. Archivováno (PDF) od původního dne 2019-04-21. Citováno 2018-08-14.
- ^ Calvo, Melissa; Forbes, Jim (02.02.1986). „IBM používat operační systém DRI“. InfoWorld. InfoWorld Media Group. Archivováno od původního dne 2019-04-21. Citováno 2011-09-06.
- ^ „IBM vybrala souběžný systém DOS-286 pro maloobchodní systém PC AT“ (PDF). Evropská recenze. Digitální výzkum (18): 1. března 1986. Archivováno (PDF) z původního dne 2019-04-03. Citováno 2018-09-15.
- ^ Collins, Robert R. (leden 1997). „Režim správy systému Intel“. Archivováno z původního dne 2017-01-03. Citováno 2017-01-03.
- ^ Nečasek, Michal (18. 10. 2013). „LOADALL znovu udeří“. Muzeum OS / 2. Archivováno z původního dne 2017-01-03. Citováno 2016-01-27.
- ^ „Příručka pro vývojáře softwaru Intel 64 a IA-32 Architectures, svazek 2B“ (PDF). Intel Corporation. Prosince 2015. Archivováno (PDF) od původního dne 2019-04-21. Citováno 2016-01-27.
- ^ Slater, Michael (říjen 1987). "Instrukce Secret 286 LOADALL umožňuje přístup k rozšířené paměti v reálném režimu". Zpráva mikroprocesoru.
Další čtení
- IBM Operating System / 2 Technical Reference - Programming Family (PDF). 1 (1. vyd.). IBM. Září 1987 [1986]. Archivováno (PDF) z původního dne 2017-01-03.
- Chappell, Geoff (leden 1994). Schulman, Andrew; Pedersen, Amorette (eds.). Interní systémy DOS. Programovací řada Andrewa Schulmana (1. tisk, 1. vyd.). Nakladatelství Addison Wesley. 4, 21, 100–106, 127–129. ISBN 978-0-201-60835-9. (xxvi + 738 + iv stránky, 3,5 "disketa [9][10] ) Errata: [11][12][13]
- Chappell, Geoff (03.10.2008) [1997-03-18]. „Strange Things LINK ví o procesorech 80x86“. Archivováno od původního dne 2019-04-21. Citováno 2019-04-21.
- Nečasek, Michal (13.12.2014). „Zvědavé pokyny“. Muzeum OS / 2. Archivováno od původního dne 2019-04-21. Citováno 2019-04-21.
- Stiller, Andreas (1990). „Bitter für 32-Bitter“. c't - magazin für computertechnik (v němčině). Sv. 1990 č. 8. str. 202.
- Juffa, Norbert; Siering, Peter (1990). „Wege über die Mauer. Loadall - Extended Memory im Real Mode des 80286“. c't - magazin für computertechnik (v němčině). Sv. 1990 č. 11. str. 362–366.