中山汇编视频第4集
存储器里以字节为单位存储信息,每一个字节单元给以一个存储器的地址;
一、 8086/8088CPU有20根地址线,可寻址1M(2的20次方)的内存空间;
内存地址以20位地址进行编码,即内存的物理地址为一个20位2进制位的数字,对应的16进制位为5位(4个二进制位顶一个16进制位);00000H~FFFFFH;
8086的CPU的运算字长是16个二进制位,用什么办法来提供20位2进制内存地址呢?
----采用存储器(内存也是存储器的一种)地址分段的办法
8086CPU的运算字长为16个二进制位,而20根地址线可表示1M内存空间;将内存地址进行分段,且规定,每段的起始地址必须为16个字节的倍数,即00010H,
程序员在编制程序的时候要把存储器划分成段,每个段的大小可达64K,这样段内地址可以用16位表示。
段与段之间可以相连,也可以不相连,还可以部分重叠。
IBM-PC 机对段的起始地址有所限制,段不能起始于任意地址,而必须从任一小段的首地址开始。
机器规定:从0地址开始,每16个字节为一小段(16的倍数)
00000,00001,00002,...,0000E,0000F;
00010,00011,00012,...,0001E,0001F;
00020,00021,00022,...,0002E,0002F;
......
第一列就是每个小段的首地址,其特征是:在16进制表示的地址中,最低为0(即20位地址的低4位为0)
在1M字节的地址空间里,共有64K个小段首地址,可表示如下:
00000H
00010H
00020H
...
FFFE0H
FFFF0H
在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址,称为:该存储单元的物理地址。
CPU访问存储器时,必须先确定所要访问的存储单元的物理地址才能取得(或存入)该单元中的内容。
要访问的某一个存储单元,总是属于某个段。
把存储单元的地址与所在段的起始地址的差称为段内偏移,简称偏移。
在一个段内,通过偏移可指定要访问的存储单元,或者说要访问的存储单元可由偏移来指定。
在整个1M地址空间中,存储单元的物理地址等于段起始地址加上偏移。
存储单元的逻辑地址由:段值和偏移两部分组成,即:段值:偏移;
根据逻辑地址可方便的得到存储单元的物理地址,公式如下:
物理地址=段值*16+偏移
所以20位物理地址由:16位段地址和16位偏移地址组成。
段地址是指每一段的起始地址,由于它必须是小段的首地址,所以其低4位一定是0