实模式方式比较先看一下实模式下的地址转换方式,假设我们在ES中存入0x1000,DI中存入0xFFFF,那么ES:DI=0x1000*0x10+0xFFFF=0x1FFFF,这就是众所周知的“左移4位加偏移”
那么如果在保护模式下呢?假设上面的数据不变ES=0x1000,DI=0xFFFF,现在ES:DI等于什么呢?公式如下:(注:0x1000=1000000000000b= 10 0000 0000 0 00)ES:DI=全局描述符表中第0x200项描述符给出的段基址+0xFFFF现在比较一下,好象是不一样
再仔细看看,又好象没什么区别!为什么说没什么区别,因为我的想法是,既然ES中的内容都不是真正的段地址,凭什么实模式下称ES为“段寄存器”,而到了保护模式就说是“选择子”?你觉得呢?其实它们都是一种映射,只是映射规则不同而已:在实模式下这个“地址转换方式”是“左移4位”;在保护模式下是“查全局/局部描述表”
前者是系统定义的映射方式,后者是用户自定义的转换方式
而它影响的都是“shadow register”从函数的观点来看,前者是表达式函数,后者是列举式函数:实模式: F(es-->segment)={segment |segment=es*0x10}保护模式:F(es-->segment)={segment |(es,segment)∈GDT/LDT}其中GDT、LDT分别表示全局描述符表和局部描述符表
以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。