|
发表于 2012-12-19 19:04:40
|
显示全部楼层
怎么说呢,8086地址线有20根,所以可访问的地址是2^20也就是1M,但是寄存器却只有16位,可访问的地址2^16也就是64k。一个16位的地址是访问不到所有空间的。所以呢,我们将20位的地址分成两份,也就是所谓的 段地址:偏移地址。
按照上述方式如何得到20位的地址呢?我们所采取的方法是:计算的时候先把段地址(16位)左移4位(这样就有了20位),然后加上偏移地址。
比如说:0x0010 : 0x0200 所访问的地址为0x00100+0x0200也就是0x00300。
你也许会想,若以 段地址: 偏移地址的形式访问空间,有的地址岂不是会超出1M的空间?
比如0xffff:0xffff = 0xffff0+0xffff = 0x10ffef这就超出1M范围了。
实际上当程序员给出超过1M(100000H-10FFEFH)的地址时,使用8086cpu的系统并不认为其访问越界而产生异常,而是自动从0开始计算,也就是说系统计算实际地址的时候是按照对1M求模的方式进行的,比如地址0x10ffef会转化为0xffef。
好好学习吧,学好汇编好处很多的!
|
|