21,496
社区成员




“实模式下,处理器也是用段寄存器描述符高速缓存器的32 位基地址加上16 位偏移地址访问内存,只不过基地址的高12 位通
常是0”
所以这是32位cpu上兼容实模式的机制嘛?
那实模式下,会用到gdtr和gdt这东西嘛?
如果描述符高速缓存器高12位不是0呢,那实模式怎么执行,是做隔断,只取后20位做基地址嘛,不理前12位嘛?
实模式下,怎么执行32位指令,32位寄存器的,是直接用32条的地址总线嘛,还是像旧cpu一样,只能用20个地址总线,然后分及次读写数据?不是说啥编译带反转前缀那个,我是好奇cpu在实模式下怎么去操作这些32位东西,
既然“32位x86中的实模式是一种经过特殊设置的保护模式”,那么保护模式那套东西大部分仍然起作用,只是隐藏在幕后而已。可以通过设置突破64K的段限制,也可以修改描述符使段位于1MB以上地址,实模式下怎么执行32位指令,和32位下怎么执行16位指令是类似的,通过指令的操作尺寸前缀和地址尺寸前缀来实现。
32位x86中的实模式是一种经过特殊设置的保护模式:禁用分页、装载段寄存器的值时直接设置对应描述符的基地址、段限制设置为64K、段访问权限设置为00
所以基于这种设置,可以搞一些另类操作,比如big real mode,就是从实模式切换进保护模式,修改某个段(比如es)的描述符,改成基地址0限制4G,再切换回实模式,就可以通过es访问4GB物理地址了。
还有没有大佬