Турбо С: руководство пользователя. Часть 2

Турбо С: руководство пользователя. Часть 2 - Стр. 40

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 2
Стр. 2
Стр. 3
Стр. 4
Стр. 5
Стр. 6
Стр. 7
Стр. 8
Стр. 9
Стр. 10
Стр. 11
Стр. 12
Стр. 13
Стр. 14
Стр. 15
Стр. 16
Стр. 17
Стр. 18
Стр. 19
Стр. 20
Стр. 21
Стр. 22
Стр. 23
Стр. 24
Стр. 25
Стр. 26
Стр. 27
Стр. 28
Стр. 29
Стр. 30
Стр. 31
Стр. 32
Стр. 33
Стр. 34
Стр. 35
Стр. 36
Стр. 37
Стр. 38
Стр. 39
Стр. 40
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 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. Малая модель сегментации памяти