. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
主题 : :  我所理解的16位地址转20位地址  [待解决] 回复[ 17次 ]   点击[ 765次 ]  
chenandjun
[帖 主] [ 发表时间:2010-03-25 01:44 ] 
荣誉值:0
信誉值:0
注册日期:2010-03-16 21:08
刚在看2.4节,书上说8086内部是16位,而外部总线是20位,16位只能访问到64k的地址,而外部总线却有1M的地址空间,怎样用16位去访问1M的地址空间,书上讲的是分段,把1M地址分成小段,每段64k,CPU内部用了一个叫地址加法器的东西,物理段地址的形成是段地址*16+偏移地址,我看着没大明白,为什么段地址要*16,我理解的是象这样,你把1M地址分成小段,物理地址应该是,比如你是在第三段,就应该是段地址*3+偏移地址啊,怎么要*16呢,不大明白
scuzg
[第14楼] [ 回复时间:2010-04-23 12:01 ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
回复:[第13楼]
------------------
8088 CPU 是不能直接给出 20 位地址信息的,这是因为 8086/8088 CPU 可编程的 14 个寄存器都是 16 位的,更没有通过编程直接输出20 位地址信息的其他途径。20 位地址输出是通过来自段寄存器的和 CPU 内部总线的两个 16 位地址分量在“地址加法器”“移位相加”得到的。
    地址加法器在将两个16位分量相加之前,先将来自段寄存器的16位地址信息左移四位,然后再和 CPU 内部总线的16位地址分量相加。由于二进制数左移四位相当于乘以16,所以在通过逻辑地址计算物理地址时,就有下面的表达式进行计算:

    段地址*16+偏移地址

这是我对 *16 的解释。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved