GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||
GeezerVison is showing en.wikipedia.org — Far pointer - Wikipedia
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 x86Further information: x86 memory models
For 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 normalized to a form with only one representation address. Such a normalized form may be one that minimizes the segment (maximizing the offset), minimizes the offset (maximizing the segment), or converts the 2-part segmented address to a (20-bit) linear representation. One commonly used normalized form minimizes the offset part of the address to a value less than 16 (10 hex): such a normalization can be computed simply by taking the low-order 4 bits of the unnormalized offset as the new offset, and adding to the unnormalized segment the unnormalized offset shifted right by 4 bits. 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; }
LegacyThe Windows API was originally designed for 16-bit x86, and provided typedefs for working with near and far pointers.[3] In the WinAPI convention, the names of far pointer types are prefixed with LP (for In Win32, the older pointer typedefs are retained for backwards-compatibility. Because the need for far pointers was obviated, there was no longer a distinction between the actual types underlying the near and far pointer typedefs.[5] This has resulted in code originally written for Win16 performing redundant pointer type conversions once ported to Win32.[3] In ESA/390 and z/ArchitectureOn some C compilers for ESA/390 and z/Architecture, far pointers can be used to include an identifier of an alternate address space to access.[6][7] ESA/370, ESA/390, and z/Architecture include facilities for a program running in one address space to access data in another via "access registers".[8] On AVROn larger AVR microcontrollers, addressing more than 64 KB is possible via far pointers, which include an identification of the 64 KB "page" to access. Notes
References
Hidden categories:
| ||
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |