段地址*16+偏移地址=物理地址
本帖最后由 汇编不会编 于 2012-12-11 16:30 编辑段地址为什么要*16 呢?
是不是因为x86CPU是16位的呢?
不太了解这节课,又不想跳过这节课。所以来求助了,希望得到详细的解答 呵呵
因为 8086CPU有20位地址总线的,而8086又是16位的,所以要像办法凑成20位的。所以有了
物理地址=段地址*16+偏移地址 因为8086的段寄存器都是16位的,地址线是20条,所以cpu无法直接给出20位的地址,所以就物理地址=段地址*16+16的偏移地址 因为8086的段寄存器都是16位的,地址线是20条,所以cpu无法直接给出20位的地址,所以就物理地址=段地址*16+16的偏移地址 你可以将其化为二进制数,然后将段地址*10000b,看看结果? 我是这么理解的,内部连接总线是16位,CPU与外部连接时是20位的总线,其实段地址就如其名,它是对一组地址进行定义,*16(左移4位即2的4次方=16)定义了这个段的长度范围和对段地址的起始点进行了定位,偏移地址则是定义到这个长度内其中一个点,而CPU通过20位的外部总线连接到内存时就将它们合并起来,便于对内存进行分段管理。 我解释给你听:
8086CPU是20根地址线,这样它所能访问的地址范围是2的20次方=1M大小.
因为寄存器是16位的,最多只能访问2的16次方个地址,无法访问1M的全部空间.所以就人为的把1M空间分成若干个段来表示. 也就是说通过改变起点位置的变化就可以表示整个1M内存范围了.
现在的CPU寄存器是32位的,总线也是32位的,都可以直接访问4GB的范围了,所以也就不用以前的表示方法了 阿帕奇 发表于 2012-12-11 16:19 static/image/common/back.gif
我解释给你听:
8086CPU是20根地址线,这样它所能访问的地址范围是2的20次方=1M大小.
因为寄存器是16位的,最 ...
谢谢你的解答!呵呵
页:
[1]