Fjern markør - Far pointer
I en segmenteret arkitekturcomputer er en langt pointer en markør, der inkluderer en segmentvælger , hvilket gør det muligt at pege på adresser uden for standardsegmentet.
Sammenligning og aritmetik på langt henvisende er problematisk: der kan være flere forskellige segment-offset adressepar, der peger på en fysisk adresse .
I 16-bit x86
For eksempel i en Intel 8086 såvel som i senere processorer, der kører 16-bit- kode, har en langt pointer to dele: en 16-bit segmentværdi og en 16-bit offset- værdi. En lineær adresse opnås ved at flytte den binære segmentværdi fire gange til venstre og derefter tilføje forskydningsværdien. Derfor er den effektive adresse 20 bit (faktisk 21-bit, hvilket førte til adresseindpakningen og Gate A20 ). Der kan være op til 4096 forskellige segment-offset adressepar, der peger på en fysisk adresse. For at sammenligne to langt henvisende skal de først konverteres (normaliseres) til deres 20-bit lineære repræsentation.
På C- kompilatorer, der er målrettet mod 8086-processorfamilien, blev langt pointer erklæret ved hjælp af en ikke-standard langt kvalifikator. For eksempel char far *p; defineret en langt markør til en char . Vanskeligheden ved at normalisere langt pointer kunne undgås med den ikke-standard enorme kvalifikationskamp.
Eksempel på fjernpeger:
#include <stdio.h>
int main() {
char far *p =(char far *)0x55550005;
char far *q =(char far *)0x53332225;
*p = 80;
(*p)++;
printf("%d",*q);
return 0;
}
- Output af følgende program: 81; Fordi begge adresser peger på samme placering.
- Fysisk adresse = (værdi af segmentregister) * 0x10 + (værdi af forskydning).
- Placering peget på med markøren 'p' er: 0x5555 * 0x10 + 0x0005 = 0x55555
- Placering peget på med markøren 'q' er: 0x5333 * 0x10 + 0x2225 = 0x55555
- Så p og q peger begge på den samme placering 0x55555.