那如果CPU为16位,数据总线也为16位,这样的物理地址的表示还会用段地址+偏移量来表示 吗?
8 个解决方案
#1
数据总线为XXXXX(每个x表示4位,16进制),每次只能读取16位即XXXX,所以需要段地址先选中每个段的。分段为
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。
#2
那实际上呢,以后的话不是要兼容前面的吗?比如32位的CPU,数据总线也是32位。这怎么办?
#3
说了理论上可以,汇编设计的时候就是用段地址:偏移地址去寻址的。以80386(32位cpu,32位数据线)的地址是由描述符DI和偏移地址两个部分组成的,DI用了13位,偏移地址是32位,因此逻辑地址可以达到2^14个段(13位DI和1位TI),每个段的长度可达2^32B=4GB,虚拟内存2^14*2^32B=64TB,在80286中虚拟内存的单位是段,段最大64KB,但长度达到4GB就不合适了。所以80386中将4GB以4KB为一页分成了1G个等长的页面。80386进行了分页处理,所以经过两次转换才能得到物理地址。但也可以进行禁止分页处理,这样的话线性地址就是物理地址了。
#4
80386的存储管理分为分段单元和分页单元。段单元用来把逻辑地址变为线性地址。页单元把线性地址换算成物理地址。如果禁止分页,线性地址就等于物理地址,进行分页就不等。
#5
我还是不太明白 啊,DI和TI是什么 ?
也就是说以后的CPU物理地址,仍然是段地址+偏移量来表示 是吗
#6
对照这个图看看。好好理解下。再找些80386内存寻址的资料。
#7
不需要,实模式的知识
#8
有数据总线是32位,地址总线也是32位的CPU在使用“段+偏移”的寻址方式。这么做是为了实现一些高级的功能,比如保护模式、虚拟内存(这个我不敢确定)等。不过这个“段+偏移”和实模式相比复杂很多,但和实模式一样都有逻辑地址和物理地址的概念。
#1
数据总线为XXXXX(每个x表示4位,16进制),每次只能读取16位即XXXX,所以需要段地址先选中每个段的。分段为
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。
00000h~0ffffh......f0000h~fffffh;如果CPU为16位,数据总线也为16位的话,理论上是不需要的。
#2
那实际上呢,以后的话不是要兼容前面的吗?比如32位的CPU,数据总线也是32位。这怎么办?
#3
说了理论上可以,汇编设计的时候就是用段地址:偏移地址去寻址的。以80386(32位cpu,32位数据线)的地址是由描述符DI和偏移地址两个部分组成的,DI用了13位,偏移地址是32位,因此逻辑地址可以达到2^14个段(13位DI和1位TI),每个段的长度可达2^32B=4GB,虚拟内存2^14*2^32B=64TB,在80286中虚拟内存的单位是段,段最大64KB,但长度达到4GB就不合适了。所以80386中将4GB以4KB为一页分成了1G个等长的页面。80386进行了分页处理,所以经过两次转换才能得到物理地址。但也可以进行禁止分页处理,这样的话线性地址就是物理地址了。
#4
80386的存储管理分为分段单元和分页单元。段单元用来把逻辑地址变为线性地址。页单元把线性地址换算成物理地址。如果禁止分页,线性地址就等于物理地址,进行分页就不等。
#5
我还是不太明白 啊,DI和TI是什么 ?
也就是说以后的CPU物理地址,仍然是段地址+偏移量来表示 是吗
#6
对照这个图看看。好好理解下。再找些80386内存寻址的资料。
#7
不需要,实模式的知识
#8
有数据总线是32位,地址总线也是32位的CPU在使用“段+偏移”的寻址方式。这么做是为了实现一些高级的功能,比如保护模式、虚拟内存(这个我不敢确定)等。不过这个“段+偏移”和实模式相比复杂很多,但和实模式一样都有逻辑地址和物理地址的概念。