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.

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.

Referencer