Far pointer
In a segmented architecture computer, a far pointer is a pointer to memory in a specific context,[1] such as a segment selector making it possible to point to addresses outside of the default segment. Comparison and arithmetic on far pointers is problematic: there can be several different segment-offset address pairs pointing to one physical address. In 16-bit x86For example, in an Intel 8086, as well as in later processors running 16-bit code, a far pointer has two parts: a 16-bit segment value, and a 16-bit offset value. A linear address is obtained by shifting the binary segment value four times to the left, and then adding the offset value. Hence the effective address is 21 bits[Note 1]. There can be up to 4096 different segment-offset address pairs pointing to one physical address. To compare two far pointers, they must first be converted (normalized) to their linear representation. On C compilers targeting the 8086 processor family, far pointers were declared using a non-standard Example of far pointer: #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;
}
Notes
References
|