6位”这句话你理解错了,不是内部地址总线有16位,而是寄存器是16位的,例如AX,BX,SI,DI都是16位的,它们能表示的地址码所以只有16位的。2的16次方等于64K,这是我们作为程序编写者能通过寄存器直接访问的内存空间。而8086/8088CPU提供的地址总线有20位,2的20次方等于1M,这是CPU它自己能访问的最大内存空间。
这就有个矛盾了:CPU能访问1M内存,而寄存器却只能表示64K内存大小。所以就引入段地址和偏移地址的概念。把这1M 的内存空间分成64K大小的一段段,指定哪一段,然后再在这个段的开始加上“偏移地址”,这不就可以访问1M内存的任意空间了?
段地址怎么得到的问题:
比如在汇编数据段某处声明了某个字符变量 STR
MOV DX,SEG STR
通过SEG 语句则可把STR所在段地址取出来,送给DX.
一上内容希望对你有帮助!
2^20=1MB的寻址空间。