Far pointer
From Wikipedia, the free encyclopedia
In a segmented architecture computer, a far pointer is a pointer which includes a segment selector, making it possible to point to addresses outside of the current segment.
For example, in an Intel 8086, where an ordinary pointer is just a 16-bit offset within an implied segment, 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 20 bits (actually 21-bit, which led to the address wraparound and the Gate A20). Comparison and arithmetic on far pointers are problematic: there are potentially sixteen different segment-offset address pairs that point to the same address. To compare two far pointers, they must first be converted (normalized) to their 20-bit linear representation.
On C compilers targetting the 8086 processor family, far pointers were declared using a non-standard far qualifier. For example, char far *p;
defined a far pointer to a char. The difficulty of normalizing far pointers could be avoided with the non-standard huge qualifier.