Daleko ukazatel - Far pointer - Wikipedia
tento článek ne uvést žádný Zdroje.Prosince 2009) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
V segmentovaná architektura počítač, a vzdálený ukazatel je ukazatel který zahrnuje a selektor segmentů, což umožňuje směřovat na adresy mimo výchozí segment.
Porovnání a aritmetika na vzdálených ukazatelích je problematické: může existovat několik různých párů adres s posunem segmentu směřujících k jednomu fyzická adresa.
V 16bitovém x86
Například v Intel 8086, stejně jako v pozdějších spuštěných procesorech 16-bit kód, vzdálený ukazatel má dvě části: 16bitovou hodnota segmentu a 16-bit offset hodnota. Lineární adresa se získá posunutím hodnoty binárního segmentu čtyřikrát doleva a následným přidáním hodnoty posunutí. Efektivní adresa je tedy 20 bitů (ve skutečnosti 21 bitů, což vedlo k zalomení adresy a Brána A20 ). Na jednu fyzickou adresu může být až 4096 různých párů adres s offsetem segmentu. Chcete-li porovnat dva vzdálené ukazatele, je třeba je nejprve převést (normalizovat) na jejich 20bitovou lineární reprezentaci.
Na C překladače zaměřené na rodinu procesorů 8086, vzdálené ukazatele byly deklarovány pomocí nestandardního daleko kvalifikátor. Například, char far * p;
definoval vzdálený ukazatel na a char. S nestandardem bylo možné se vyhnout obtížnosti normalizace vzdálených ukazatelů obrovský kvalifikátor.
Příklad vzdáleného ukazatele:
#zahrnout <stdio.h>int hlavní() { char daleko *p =(char daleko *)0x55550005; char daleko *q =(char daleko *)0x53332225; *p = 80; (*p)++; printf("% d",*q); vrátit se 0;}
- Výstup následujícího programu: 81; Protože obě adresy směřují na stejné místo.
- Fyzická adresa = (hodnota registru segmentu) * 0x10 + (hodnota offsetu).
- Umístění, na které ukazuje ukazatel 'p', je: 0x5555 * 0x10 + 0x0005 = 0x55555
- Umístění, na které ukazuje ukazatel 'q', je: 0x5333 * 0x10 + 0x2225 = 0x55555
- Takže p a q ukazují na stejné místo 0x55555.