. : : 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