8086/8088寻址为1M的由来

本文详细解释了8086/8088处理器如何利用寄存器、段地址和偏移地址实现对1M内存空间的访问。通过介绍寄存器的16位限制与20位地址总线的内存寻址能力之间的关系,解释了段地址和偏移地址的概念,并展示了如何通过指令获取段地址。同时,阐述了8086CPU的地址总线、数据总线及其在内存访问过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.8086/8088的寄存器是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.
二.8086CPU地址总线有20根,能寻址1MB的存储单元。
    8086CPU通过16条数据总线、20条地址总线和若干条控制总线与外部进行数据交换。由于地址总线有20条,所以CPU可以访问的存储单元数为2的20次方,即1M个存储单元。每个存储单元存放8位二进制数,即一个字节,且这些存储单元都是顺序排列的,每个单元用唯一的一个物理地址标示,这个物理地址既是由地址总线得到的20位二进制数。
关于寻址范围这里强调一下,N位地址线能访问2的N方个存储单元。比如:1位地址线只能访问2个存储单元,两位地址线能访问4个存储单元,等等。
    至于每个存储单元的大小要看CPU的字长了,即CPU的数据总线。8086的字长为16位,它的数据总线为16位,本应该存储单元是16位的,但为了与8位机兼容,将这16位分成了高8位和低8位,在寻址时用19位地址线确定16位的存储单元,用另一根地址线决定是高8位还是低8位。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值