Avatar billede kov Nybegynder
20. april 2001 - 15:20 Der er 3 kommentarer og
1 løsning

32 bit addresserum under DOS

Jeg vil gerne kunne læse og skrive i addresserummet over 1 MB under DOS.

Forskellige memory drivere som EMM386 og HIMEM giver adgang til lidt mere hukommelse, men jeg vil gerne kunne addressere frit i et 32 bit område.

Jeg ved at det kan gøres ved at sætte processoren i protected mode, det er en kompliceret affære, så et eksempel ville hjælpe.

TIA KOV
Avatar billede peter_m Nybegynder
02. maj 2001 - 14:07 #1
Er dos ikke et 16 bit OS....ellers er jeg lige med på en lytter.
Avatar billede kov Nybegynder
02. maj 2001 - 15:36 #2
DOS er, helt rigtigt, et 16 bit OS. 16 bit giver adgang 65 kB hvilket blev vurderet som værende for lidt allerede i PC\'ens barndom (noget rigtigt havde de trods alt fat i =;). Derfor opbyggede man processoren (8086) således at den var i stand til at addressere 1 MB = 20 bit. Dette opnåede man ved at sammensætte  addressen af to seperate registre (offset og segment). Herved opstod fænomenet med segmenteret addressering som mange elsker at hade. Denne lidt besværlige metode benytter alle processore der arbejder i real mode (8086 emulering), hvilket man normalt gør under DOS.

Moderne processorer (fra og med 386) kan addressere et 4GB = 32 bit linært addresserum. For at få adgang til dette skal processoren arbejde i protected mode hvilket f.eks benyttes af win9x, OS2, NT og div. UNIX.

Det er også muligt at addressere 4GB fra DOS, det kræver dog at processoren bringes til at arbejde i protected mode hvilket er en relativt kompliceret sag. DOS udnytter selv denne funktion via driverne EMM386 og HIMEN der i bund og grund fungerer ved at mappe hukommelsen over 1 MB ned i et vindue under 1 MB. Dette foregår ved at driverne overvåger tilgangen til dette vindue og opdager de at et program forsøger at få adgang sker følgende:
driveren \"oversætter\" addresen på forespørgslen til den virkelige addresse over 1 MB. Processoren sættes i protected mode og segmentet der ønskes bliver læst og mappet ned i vinduet under 1 MB. Herefter sættes processoren i real mode igen og programmet kan nu læse de ønskede data fra vinduet.

Ulempen ved disse driver er, at de kun tilbyder adgang til en begrænset del af addresse rummet over 1MB (HIMEM giver op til 16 MB). De er derfor ikke anvendelige til mit formål.

VH KOV
Avatar billede thomasj Nybegynder
03. maj 2001 - 18:29 #3
Du kan finde en glimrende introduktion til Protected Mode med eksempler her:
http://x86.ddj.com/articles/pmbasics/tspec_a1_doc.htm

Der findes forøvrigt i kuriøst hack kalder \'flat real mode\' hvor du skifter til Protected Mode, sætter din descriptor til en grænse på 4GB for alle segment registre og returnerer til real-mode igen. Tricket består i at den ændring du lavede i Protected Mode bliver husket, og du har nu adgang til et 4GB adresserum i real-mode.

Men som sagt, det er et hack (udokumenteret), og det virker f.eks. ikke under en shell i Win95.
Avatar billede kov Nybegynder
28. maj 2001 - 10:17 #4
Nå, vi må hellere få afsluttet det her spørgsmål. Thomasj var den der kom tættest på med en god henvisning, så pointene ryger i den retning.

KOV
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester