로달
LOADALLLOADALL은 Intel 80286과 Intel 80386 프로세서의 서로 다른 두 가지 문서화되지 않은 기계 지침의 공통 명칭으로, 설명자 캐시 레지스터와 같이 일반적으로 IA-32 API 범위 밖에 있는 내부 프로세서 상태의 영역에 대한 액세스를 허용한다.286개 프로세서의 LOADALL은 0Fh 05h로 [1]인코딩되는 반면 386 프로세서의 LOADALL은 0Fh 07h로 인코딩된다.[2]
이름에서 알 수 있듯이 두 가지 변형 모두 모든 CPU 내부 레지스터를 한 번의 작업으로 로드한다.LOADALL은 해당 캐시된 부품과 독립적으로 세그먼트 레지스터(선택자)의 가시적인 부분을 설정하여 프로그래머가 CPU를 공식 프로그래밍 모델에서 달리 허용하지 않는 상태로 가져올 수 있는 고유한 기능을 가지고 있었다.
사용법
LOADALL은 이러한 기법의 유용성의 예로서 CPU를 설정하여 비현실 모드(보호 모드로 전환, 메모리에 액세스, 최종적으로 리얼 모드로 전환해야 함)로 전환할 필요 없이 리얼 모드에서 모든 메모리에 액세스할 수 있도록 할 수 있다.RAMDrive의 XMS 이전 버전과 같은 프로그램.SYS(1985),[3][1][4] SMARTDRV.SYS(1986)와 HIMEM.[4]로터스 1-2-3,는 확장 기억 속에 하드 디스크 공간이나 확장 기억해 위 디스크(1986년)[5](한 LIMulator 위 소프트웨어(이전에 Tele-Ware 웨스트 Time로스 앤젤레스 증권 그룹)), 그리고 OS/2 1.0[3]에 MS-DOS, 균일한 소프트웨어 시스템즈 Extender에 곧 또 보자(2.03, 1988-08-04, 20, 1988-08-17)[4]운전자들(1985년)과 커넥터(1985년).[1]과 1.1[6]286 LOADALL 명령 사용.DOS 3.3과 4.0은 LOADALL을 위해 저장 및 복원할 필요가 없도록 (일반적으로 DOS BIOS 데이터가 점유하고 있던) 0070:0100h로 102바이트의 버퍼를 예약했다.마이크로소프트의 EMM386.EXE 특수 케이스는 유효하지 않은 opcode 핸들러에 LOADALL 지침 286 및 386 둘 다 포함.[7]윈도우즈/386 2.10에서 가상 머신 모니터 코드를 검사한 결과 286[citation needed] 변종과 심지어 덜 알려진 386 변종을[citation needed] 모두 사용하는 것으로 나타났다.마이크로소프트의 HIMEM.SYS 버전 2.06은[8] 또한 LOADALL을 사용하여 286 시스템의 확장 메모리와 빠르게 복사했다.
책 "OS/2의 설계"[9]에 수록된 LOADALL의 또 다른 흥미로운 용도는 1985년 이후 디지털 리서치의 Concurrent DOS [10][11][12]286과[13] 1986년 이후 IBM 4680[14][15] OS가 활용했던 16비트 보호 모드에서 이전의 리얼 모드 프로그램을 실행할 수 있게 하는 것이었다.GDT와 LDT에 모든 설명자 캐시를 "존재하지 않음"으로 표시하면 운영 체제가 세그먼트-레지스터 재장전을 가둘 수 있을 뿐만 아니라 실제 모드 특유의 "세그먼트 산술"을 수행하려고 시도하고 세그먼트 설명자(LOADALL 다시)를 업데이트하여 원하는 동작을 에뮬레이트할 수 있다.그러나 80286에 대한 이 "가상 8086 모드"는 실용적이기엔 너무 느렸다.E-2 스텝 전 일부 초기 Intel 80286 프로세서의 에라타 때문에 아이디어는 대부분 폐기되어야 했다.[10][11][13]그 결과 OS/2 1.x – "표준" 모드와 Windows 역시 DOS 프로그램을 실제 모드로 실행해야 했다.그럼에도 불구하고, 아이디어는 잃지 않았다; 그것은 인텔이 80386의 가상 8086 모드를 도입하게 하여, 마침내 비교적 효율적이고 문서화된 방법으로 "DOS 박스"의 구현을 가능하게 했다.
LOADALL은 프로세서 레지스터에 로드된 데이터의 유효성에 대한 점검을 실시하지 않았기 때문에 386급 CPU에 페이징(PG=1)과 함께 리얼 모드(PE=0)를 사용하는 등 정상적으로 입력할 수 없는 프로세서 상태를 로딩할 수 있었다.[2]
회로 내 에뮬레이터(ICE)는 저수준 디버깅에 사용되는 툴이다.Intel 80386에서 위치 B6의 문서화되지 않은 핀을 주장하면 마이크로프로세서가 실행을 중지하고 ICE 모드로 들어간다.마이크로프로세서는 전체 상태를 정상 시스템 메모리에서 분리된 메모리 영역에 저장한다.이 영역의 레이아웃은 LOADALL 지침에 적합하며, ICE 코드는 이 지침을 사용하여 정상 실행으로 복귀한다.
이후 프로세서에서는 이것이 시스템 관리 모드(SMM)로 진화했으며, SMM에서는 RSM 명령이 메모리 영역에서 전체 CPU 상태를 로드하는 데 사용된다.이 메모리 영역의 레이아웃은 LOADALL 명령에서 사용하는 것과 유사하다.[16] 386 스타일의 LOADALL 명령도 486에서 실행할 수 있지만, SMM 모드에서만 실행할 수 있다.이후 프로세서에서는 다른 인코딩을 사용한 RSM 명령이 그 역할을 맡았다.
마이크로소프트의 코드뷰 3.0과 볼랜드의 터보 디버거 2.0은 286과 386 LOADALL 지시를 정확하게 해독한다.[1]
두 LOADALL 지침은 문서화되지 않았고 이후 프로세서에 존재하지 않기 때문에, opcode는 AMD64 아키텍처에서 재사용되었다.[17]286 LOADALL 명령의 opcode, 0F05는 AMD64 명령 SYSCALL이 되고, 386 LOADALL 명령, 0F07은 SYSRET 명령이 되었다.이러한 정의는 AMD64의 Intel 64 구현을 도입하여 Intel CPU에서도 구현되었다.[18]
80286
Opcode 0F05.이 지침은 세그먼트의 콘텐츠가 등록되는 모든 주소의 데이터를 0x00800-0x00866에서 읽는다.
주소 | 번호를 붙이다 바이트의 | 등록하다 | 등록하다 | 등록하다 | 등록하다 |
---|---|---|---|---|---|
00800 | 6 | 사용하지 않음 | |||
00806 | 2 | MSW, 기계 상태 워드 | |||
00808 | 14 | 사용하지 않음 | |||
00816 | 2 | TR(태스크 레지스터) | |||
00818 | 2 | 깃발 | |||
0081A | 2 | IP(인스트레이션 포인터) | |||
0081C | 2 | LDTR, 로컬 설명자 테이블 레지스터 | |||
0081E | 4× 2 | DS(데이터 세그먼트) | SS(스택 세그먼트) | CS(코드 세그먼트) | ES(추가 세그먼트) |
00826 | 4× 2 | DI(대상 지수) | SI(소스 인덱스) | BP(기본 포인터) | SP(스택 포인터) |
0082E | 4× 2 | BX | DX | CX | AX |
00836 | 4× 6 | ES 세그먼트 설명자 | CS 세그먼트 설명자 | SS 세그먼트 설명자 | DS 세그먼트 설명자 |
0084E | 4× 6 | GDT, 전역 설명자 표 | LDT, 로컬 설명자 표 | IDT, 인터럽트 설명자 테이블 | TSS, 태스크 상태 세그먼트 |
80286 LOADALL 명령은 보호된 모드에서 실제 모드로[19] 전환하는 데 사용할 수 없다(MSW에서 PE 비트를 지울 수 없음).그러나 LOADALL 명령을 사용하면 보호 모드로 완전히 전환할 필요가 없을 수 있다.
80386
Opcode 0F07.이 명령은 주소 ES에서 데이터를 로드한다.EDI. 실제로 ES 설명자가 아닌 ES를 사용한다.
주소 | 번호를 붙이다 바이트의 | 등록하다 | 등록하다 | 등록하다 | 등록하다 |
---|---|---|---|---|---|
ES:EDI+00 | 4 | CR0, 제어 레지스터 0 | |||
ES:EDI+04 | 4 | 에플라그스 | |||
ES:EDI+08 | 4 | EIP, 명령 포인터 | |||
ES:EDI+0C | 4× 4 | EDI, 대상 인덱스 | ESI, 소스 인덱스 | EBP, 기본 포인터 | ESP, 스택 포인터 |
ES:EDI+1C | 4× 4 | EBX | EDX | ECX | EAX |
ES:EDI+2C | 2× 4 | DR6 | DR7 | ||
ES:EDI+34 | 4 | TR, 작업 상태 선택기 | |||
ES:EDI+38 | 4 | LDTR, 로컬 설명자 표 | |||
ES:EDI+3C | 4× 2 | GS, 추가 세그먼트 | 사용하지 않음 | FS, 추가 세그먼트 | 사용하지 않음 |
ES:EDI+44 | 4× 2 | DS, 데이터 세그먼트 | 사용하지 않음 | SS, 스택 세그먼트 | 사용하지 않음 |
ES:EDI+4C | 4× 2 | CS, 코드 세그먼트 | 사용하지 않음 | ES, 추가 세그먼트 | 사용하지 않음 |
ES:EDI+54 | 4× 12 | TSS 설명자, 태스크 상태 선택기 | IDT 설명자, 인터럽트 설명자 테이블 | GDT 설명자, 전역 설명자 표 | LDT 설명자, 로컬 설명자 표 |
ES:EDI+84 | 4× 12 | GS 세그먼트 설명자 | FS 세그먼트 설명자 | DS 세그먼트 설명자 | SS 세그먼트 설명자 |
ES:EDI+B4 | 2× 12 | CS 세그먼트 설명자 | ES 세그먼트 설명자 |
참고 항목
참조
- ^ a b c d Schulman, Andrew; Michels, Raymond J.; Kyle, Jim; Paterson, Tim; Maxey, David; Brown, Ralf D. (1990). Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures (1 ed.). Addison-Wesley. pp. 14–15. ISBN 978-0-201-57064-9. (xvii+694+vii 페이지, 2× 5.25"-플로피[1]) 에라타: [2][3]
- ^ a b Van Gilluwe, Frank (1994). The Undocumented PC (1 ed.). Addison-Wesley. pp. 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). Extending DOS (1 ed.). Reading, MA, USA: Addison-Wesley Publishing Company, Inc. pp. 100–103. ISBN 0-20155053-9.
- ^ a b c Necasek, Michal (2013-10-27). "More on LOADALL and OS/2". OS/2 Museum. Archived from the original on 2018-10-17. Retrieved 2018-10-17.
- ^ Collins, Robert R. (October 1991). "The LOADALL Instruction". TECH Specialist - the Journal for Advanced PC Developers. Lawrence, Kansas, USA: R&D Publications, Inc. 2 (10). ISSN 1049-913X. Archived from the original on 2020-02-20. Retrieved 2018-10-17. [5] (NB).이 잡지는 곧 "The DOS Developers Journal"로 이름이 바뀌었고, 결국 "The Windows/DOS Developer's Journal"(ISSN 1059-2407)로 바뀌었다.
- ^ Necasek, Michal (2011-03-18). "HIMEM.SYS, unreal mode, and LOADALL". OS/2 Museum. Archived from the original on 2017-01-03. Retrieved 2017-01-03.
- ^ 슐먼 앤드류, 브라운, 랄프 D.;Maxey, 데이비드. 미헬스, 레이먼드 J., 카일, 짐(1994년)[1993년 11월].윌리엄스, 앤드류(교육.).Undocumented 도스:예약된 MS-DOS를 사용하는 기능과 데이터 구조-MS-DOS6, 노벨 도스와 Windows3.1을 포함하도록 확장에 대한 프로그래머의 가이드입니다.그 앤드류 슐만 프로그래밍 시리즈(1,2판).읽으면서, 메사츄 세츠주, USA:애디슨 웨슬리 출판사. p. 42.아이 에스비엔 0-201-63287-X.(xviii+856+vi 페이지,3.5"-floppy[6])Errata:[7][8].
- ^ "Microsoft HIMEM.SYS 2.06 source code".
- ^ Deitel, Harvey M.; Kogan, Michael S. (1992). The Design of OS/2. Addison-Wesley. ISBN 0-201-54889-5.
- ^ a b Foster, Edward (1985-05-13). "Super DOS awaits new 80286 – Concurrent DOS 286 – delayed until Intel upgrades chip – offers Xenix's power and IBM PC compatibility". InfoWorld. InfoWorld Media Group. 7 (19): 17–18. ISSN 0199-6649. Archived from the original on 2019-04-21. Retrieved 2019-04-21.
- ^ a b Foster, Edward (1985-08-26). "Intel shows new 80286 chip – Future of DRI's Concurrent DOS 286 still unclear after processor fixed". InfoWorld. InfoWorld Media Group. 7 (34): 21. ISSN 0199-6649. Archived from the original on 2019-04-21. Retrieved 2019-04-21.
- ^ "Concurrent DOS 68K 1.2 - Developer Kit for Motorola VME/10 - Disk 2". 1986-08-06 [1986-04-08]. Archived from the original on 2019-04-03. Retrieved 2018-09-13. (NB. 이 패키지에는 CRANDER를 포함한 Concurrent DOS 286의 일부 헤더 파일도 포함되어 있다.H는 "8086 에뮬레이션"에 대해 LOADALL을 명시적으로 언급한다.)
- ^ a b FlexOS Supplement for Intel iAPX 286-based Computers (PDF). 1.3 (1 ed.). Digital Research, Inc. November 1986. Archived (PDF) from the original on 2019-04-21. Retrieved 2018-08-14.
- ^ Calvo, Melissa; Forbes, Jim (1986-02-10). "IBM to use a DRI operating system". InfoWorld. InfoWorld Media Group. Archived from the original on 2019-04-21. Retrieved 2011-09-06.
- ^ "IBM selects Concurrent DOS-286 for PC AT retail system" (PDF). European Review. Digital Research (18): 1. March 1986. Archived (PDF) from the original on 2019-04-03. Retrieved 2018-09-15.
- ^ Collins, Robert R. (January 1997). "Intel's System Management Mode". Archived from the original on 2017-01-03. Retrieved 2017-01-03.
- ^ Necasek, Michal (2013-10-18). "LOADALL Strikes Again". OS/2 Museum. Archived from the original on 2017-01-03. Retrieved 2016-01-27.
- ^ "Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2B" (PDF). Intel Corporation. December 2015. Archived (PDF) from the original on 2019-04-21. Retrieved 2016-01-27.
- ^ Slater, Michael (October 1987). "Secret 286 LOADALL instruction allows access to extended memory in real mode". Microprocessor Report.
추가 읽기
- IBM Operating System/2 Technical Reference - Programming Family (PDF). Vol. 1 (1st ed.). IBM. September 1987 [1986]. Archived (PDF) from the original on 2017-01-03.
- Chappell, Geoff (January 1994). Schulman, Andrew; Pedersen, Amorette (eds.). DOS Internals. The Andrew Schulman Programming Series (1st printing, 1st ed.). Addison Wesley Publishing Company. pp. 4, 21, 100–106, 127–129. ISBN 978-0-201-60835-9. (xxvi+738+iv 페이지, 3.5"-플로피[9][10]) 에라타: [11][12][13]
- Chappell, Geoff (2008-10-03) [1997-03-18]. "Strange Things LINK Knows about 80x86 Processors". Archived from the original on 2019-04-21. Retrieved 2019-04-21.
- Necasek, Michal (2014-12-13). "Curious Instructions". OS/2 Museum. Archived from the original on 2019-04-21. Retrieved 2019-04-21.
- Stiller, Andreas (1990). "Bitter für 32-Bitter". c't - magazin für computertechnik (in German). Vol. 1990, no. 8. p. 202.
- Juffa, Norbert; Siering, Peter (1990). "Wege über die Mauer. Loadall - Extended Memory im Real Mode des 80286". c't - magazin für computertechnik (in German). Vol. 1990, no. 11. pp. 362–366.