8086内存分段理解问题.谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/15 07:09:40
初学8086汇编.知道8086内存为1M. 看书上说是分为四个段,CS DS SS ES.每个段为16位.64K. 但四个段*64 =256K.不等于1M .1M是怎么算的.怎样理解.谢谢了.

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可以相同几个段重叠(如果放得下的话),也可以分开。大致是这样,不知你明白了没?

你能问出这种问题的话,我分析有以下几种可能:
1.你看书不认真,或者根本就是跳着读的
2.对汇编没有兴趣,导致看书不认真
3.选的书不好,不是那种适合初学者的书,如果你是个初学者的话,建议看王爽的<汇编语言>吧,很适合初学者的

CS DS SS ES 是段寄存器,用来保存段的地址的,

段的大小为 64K,可以有 64K 个段,段和段之间可以重叠