Страница 40 из 56
личину к far-указателю, то изменяется только смещение. Если ре-
зультат сложения превышает величину FFFF (это максимально возмож-
ная величина смещения), то указатель делает циклический переход
назад, к началу сегмента. Например, результатом прибавления 1 к
5031:FFFF, будет 5031:0000 (а не 6031:0000). Аналогично, если вы
вычитаете 1 из 5031:0000, то получите 5031:FFFF (а не 5030:000F).
Если вы хотите сравнить указатели, то надежнее использовать
или near-указатели, которые всегда используют один и тот же адрес
сегмента, или huge-указатели, описание которых следует далее.
Указатели типа HUGE
-----------------------------------------------------------------
Указатели типа huge (также как и far) имеют 32-битную длину
и содержат как адрес сегмента, так и смещение. Однако, в отличие
от far, они нормализованы с целью решения проблем, рассмотренных
в предыдущем разделе.
- 327,328 -
Что такое указатель типа huge? Это 32-битный указатель, ко-
торый имеет наибольшую из возможных величину адреса сегмента. Так
как сегмент всегда начинается с адреса, кратного 16 (или 10h), то
это означает, что смещение может принимать значения от 0 до 15
(от 0h до Fh).
Как нормализовать указатель? Очень просто: переведите его в
20-битный адрес, затем используйте правые 4 бита для смещения и
левые 16 бит для адреса сегмента. Например, дан указатель
2F84:0532; мы переведем его в абсолютный адрес 2FD72, который за-
тем нормализуется в 2FD7:0002. Приведем несколько указателей и их
нормализованные значения:
0000:0123 0012:0003
0040:0056 0045:0006
500D:9407 594D:0007
7418:D03F 811B:000F
Теперь вы знаете, что указатели типа huge всегда хранятся
нормализованными. Почему это важно? Потому, что для любого данно-
го адреса памяти имеется только один возможный указатель типа
huge - пара "сегмент:смещение". Это означает, что операторы >,
>=, МНННННННННННННННННННННННННННННН№ до конца
є FAR ХИП є памяти
МНННННННННННННННННННННННННННННН№
є Свободная область є
ИННННННННННННННННННННННННННННННј
Конеч.адрес.
Рис.12.3. Малая модель сегментации памяти