8086内存分段理解问题

来源:互联网 发布:js获取应用上下文 编辑:程序博客网 时间:2024/04/29 11:35
8086是16位CPU,CPU内部寄存器都是16位。那么地址也是由CPU里面的寄存器提供的,故只能提供16位地址,可寻址64K空间。而8086觉得64K空间不够用,引脚地址线非要弄成20条,寻址1M空间。但CPU里面地址只能是16位提供16位地址,里面的16位地址和外面的20根地址线矛盾怎么解决呢?只好多加了那几个段寄存器,和一些如DI的指针寄存器。每次形成地址时,根据不同的指令,系统会自动选取一个段寄存器(16位)左移四位后再加上一个对应的指针寄存器(在BIU里的地址加法器中完成),形成实际的物理地址20位输出,可寻址1M空间。你看四个段左移四位后形成20位的实际物理地址的段基址,再加上各自的指针64K的范围,四个段每个都是64K。总结:8086采用这种段加偏移技术,可以解决内部寄存器16位,但可提供20位地址的问题,将外寻址空间扩大到1M。我们在程序最初将CS DS SS ES给初值后,那这四个段在1M空间中的起始位置就确定了,由于每段对应的指针(如DI)是16位,故每段大小是64K。当然CS,DS还可以再重给初值对段重新定义,CS,DS可以相同几个段重叠(如果放得下的话),也可以分开。