High memory area

High memory area je malý žlutý úsek 65520 bajtů nad hranicí 1 MiB.

High memory area (HMA) je v informatice označení pro metodu přístupu k 65520 bajtům operační paměti počítače nad hranicí 1 MiB v reálném režimu procesorů Intel 8086 a kompatibilních.

Charakteristika

Adresa je v režimu reálných adres určena dvěma registry: segmentovým a offsetovým. Fyzická adresa je vypočítána jako součet hodnoty v segmentovém registru vynásobené 16 (tedy posunuté o 4 bity doleva) a hodnoty v offsetovém registru.

Díky přenosu tak může být výsledkem součtu až 21bitové číslo: šestnáctkově 0xFFFF0 + 0xFFFF = 0x10FFEF. Na starších procesorech Intel 8086, Intel 8088, Intel 80186 vzhledem k jejich 20bitové sběrnici je z výsledku použita hodnota omezená na 20 bitů (tj. modulo 220) a tím je možné adresovat maximálně 1 MiB operační paměti (přesně 1048576 bajtů).

Aby bylo možné využít možnosti adresace zmíněného úseku operační paměti nad hranicí 1 MiB, bylo do standardu IBM PC zavedeno rozšíření umožňující 21. adresní bit aktivovat řadičem klávesnice. Na procesorech Intel 80286 a novějších, které už měly širší adresní sběrnici (24 a více bitů), k oříznutí vrchního bitu nedocházelo, a tak bylo možné tímto způsobem v reálném režimu adresovat zmíněný malý úsek operační paměti nad hranicí 1 MiB (přesněji do adresy 1 MiB + 64 KiB − 16 bajtů, tj. do adresy 1114095) i bez pomoci triku s řadičem klávesnice. Těchto 65520 bajtů bylo označováno jako HMA (high memory area).

Rozdílné chování u počítačů (bez podpory 21. bitu a s podporou 21. bitu) představovalo problém z hlediska zpětné kompatibility, protože některé starší programy spoléhaly na oříznutí (ignorování) vrchního bitu. Pomocí čipové sady, přesněji takzvaného hradla A20, bylo možné nastavit režimu kompatibilní se staršími procesory, ve kterém byla hodnota na adresní lince A20 udržována na nule (linka A20 představuje 21. adresovací bit).

Související články

Média použitá na této stránce

IBM PC Memory areas.svg
Autor: Wtshymanski, Licence: CC BY-SA 3.0
IBM PC memory map showing memory areas