作者:夕阳红梅乎 | 来源:互联网 | 2023-01-29 16:53
我在Barry B. Brey的"THE INTEL MICROPROCESSORS"一书中找到了这个.这是真的吗?但为什么?我知道在实际的8086微处理器的实模式中,没有32位寄存器.那么现在应该对32位寄存器施加同样的限制吗?
1> Martin Rosen..:
我会说寄存器的内容无关紧要; 有效地址不得超过0xFFFF:
如果EBP
值为0xFFFFFFF,则使用指令mov EBX, [EBP+0x20]
访问地址0x10处的存储器.尽管寄存器的值高于0xFFFF,但这应该可以正常工作.
如果EBP
值为0xFFF0并且您使用相同的指令,则访问0x10010处的内存.尽管寄存器的值低于0xFFFF,但这不起作用.
Michael Pech在评论中已经暗示了这个原因:
内存段在实模式下确实有段限制!
在实模式中,不需要进行分段限制检查.286的开发人员可以通过在实模式下关闭段限制检查的方式开发电路.这将使电路更复杂和昂贵.因此,他们决定简单地将段限制初始化为0xFFFF,这会事实上禁用段限制检查,尽管段限制检查已打开.
在386中,Intel显然没有将此初始化值从0xFFFF更改为0xFFFFFFFF.
在386上,您可以使用Michael Petch'es评论中提到的"虚幻模式"来更改此限制.但据我所知,没有英特尔的官方文档说这种方法是"正式"允许的 - 这意味着没有文件说这种方法适用于所有未来的英特尔CPU.
例如,在386+的"虚拟模式"中(此模式用于在受保护模式OS处于活动状态时运行实模式程序),限制固定为0xFFFF.