near far(2)

来源:互联网 发布:hkpic.xyz forum.php 编辑:程序博客网 时间:2024/05/22 14:04

在80286以前的微处理器(CPU)组成的确16位机上,Windows操作系统(包括DOS)对于内存是分段使用的(分段内存模式,Segment   Memory   Mode)。运行在这些16位CPU微机上的Windows(Windows   1.0-3.1)被称为“Win16”。从80386开始的32位CPU开始,为了兼容,也采用上述分段内存模式,这就导致了near(short)、 far(long)指针的出现。         
从Windows   95开始的32位机上,Windows支持32位平面内存模式(与“分段内存模式”区别),相应地,Windows   95以后的Windows也就是我们常说的“Win32”。为Win32写的程序使用32位的线性地址空间。         

由此可见,如果你想写在Win16上也能运行的程序,才会涉及到newr、far指针的概念。在Win32上,指针无near、far的区分。

近指针是只能访问本段、只包含本段偏移的、位宽为16位的指针;
远指针是能访问非本段、包含段偏移和段地址的、位宽为32位的指针。

近指针、远指针、巨指针是段寻址的16bit处理器的产物(如果处理器是16位的,但是不采用段寻址的话,也不存在近指针、远指针、巨指针的概念),当前普通PC所使用的32bit处理器(80386以上)一般运行在保护模式下的,指针都是32位的,可平滑地址,已经不分远、近指针了。但是在嵌入式系统领域下,8086的处理器仍然有比较广泛的市场,如AMD公司的AM186ED、AM186ER等处理器,开发这些系统的程序时,我们还是有必要弄清楚指针的寻址范围


0 0
原创粉丝点击