. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  我所理解的16位地址转20位地址  [待解决] 回复[ 17次 ]   点击[ 765次 ]  
chenandjun
[帖 主]   [ 发表时间:2010-03-25 01:44 ]   [引用]   [回复]   [ top ] 
荣誉值: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
[第1楼]   [ 回复时间:2010-03-25 07:43 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
关于“怎样用16位去访问1M的地址空间”的问题,请参考我的这篇博文,希望对你有帮助:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=19481&kindId=34937&postId=42062&readSg=1
段寄存器的内容 * 16 是其“左移四位”的数学表示,分段不是按你理解的那种方式进行的。
aaron-0211
[第2楼]   [ 回复时间:2010-03-25 21:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-22 18:45
这个可以看看书上的比喻,22页2.7

用16进制表示的,移动一位当然要乘上16,就像10进制,左移一位就乘上10.

地址是20位的,但而寄存器是16位的,在计算地址时乘16,左移一位(二进制就移动了四位,即20位)。
偏移地址,我的理解方式是,表示这段地址的大小。
a4576
[第3楼]   [ 回复时间:2010-03-29 15:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-26 17:25
我也是在这里给卡住了
书里面有一个图表示123c8的过程
12300
+ 00c8  
————
123c8
它下面的注释是1230*16=12300
我对这里百思不得其解
用16进制表示的,移动一位当然要乘上16,就像10进制,左移一位就乘上10.
但这里为什么*16=12300
应该是*10才=12300
nk1
[第4楼]   [ 回复时间:2010-03-29 16:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2010-03-20 10:35
用16进制表示的,移动一位当然要乘上16,就像10进制,左移一位就乘上10. 
但这里为什么*16=12300 
应该是*10才=12300 

---------------
书中写的是*16,注意这个16后面没有“h”,也就是说乘以十进制的16 。

相当于*10h
nk1
[第5楼]   [ 回复时间:2010-03-29 16:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2010-03-20 10:35
但这里为什么*16=12300 
应该是*10才=12300 
------------

刚翻书看了下,这个12300出之21页图2.7吧?地址加法器里面默认是16进制

也就是说 1230H*10H=12300H   1230H*16=12300H
a4576
[第6楼]   [ 回复时间:2010-03-29 16:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-26 17:25
哎呀呀呀
谢谢楼上的
这个问题我琢磨了两天了
 1230H*16=12300H
这个应该16是十进制的
换成十六进制的就是*10H
对不?
nk1
[第7楼]   [ 回复时间:2010-03-29 16:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2010-03-20 10:35
哎呀呀呀 
谢谢楼上的 
这个问题我琢磨了两天了 
 1230H*16=12300H 
这个应该16是十进制的 
换成十六进制的就是*10H 
对不?
-----------
正确
a4576
[第8楼]   [ 回复时间:2010-03-29 16:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-26 17:25
谢谢了
hhajj
[第9楼]   [ 回复时间:2010-04-01 10:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-30 11:45
主要要把十六进制和二进制之间相互转化关系搞明白!还有要把系统总线多路复用概念搞清楚,还要弄明白8086存储器原理。个人建议在学指令之前先学一下存储器原理!
wojiaokangyi
[第10楼]   [ 回复时间:2010-04-01 20:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-27 14:42
16是十进制的  
换成十六进制的就是*10H
lenient315
[第11楼]   [ 回复时间:2010-04-20 22:56 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:0
注册日期:2010-04-20 22:33
就相当于在十进制里扩大了10倍   呵呵 看来LZ已经理解了啊
zj0916
[第12楼]   [ 回复时间:2010-04-21 14:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-08 10:48
我才看一章,说说我的理解
内部总线为16 寻址空间为64K
外部总线为20 寻址空间为1M
理论上16线CPU只能寻找 64K的空间 但是现在做处理后 扩大寻址空间 ,就是把1M/64K=16
分成16段 每段64K 这样就可以使用1M的空间
物理地址=段地址*64k+偏移地址
guanchun
[第13楼]   [ 回复时间:2010-04-23 11:25 ]   [引用]   [回复]   [ top ] 
荣誉值:11
信誉值:0
注册日期:2010-04-22 09:56
我该怎么解释呢

段地址*16+偏移地址

*16是什么意思?在一个16进制数据中,*16表示XXXXH变成XXXX0H

XXXXH是16位的,XXXX0H是20位的
scuzg
[第14楼]   [ 回复时间:2010-04-23 12:01 ]   [引用]   [回复]   [ top ] 
荣誉值: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 的解释。
1119174611
[第15楼]   [ 回复时间:2010-05-10 00:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-05-09 01:25
为什么要 
”20 位地址输出是通过来自段寄存器的和 CPU 内部总线的两个 16 位地址分量在“地址加法器”“移位相加”得到的。”呢?
我觉得这是资源的有效利用,但是同时它会拖慢了cpu整体速度的。
不禁想,16位地址也可以扩展成24 28 32 呢!!呵呵!
likelike
[第16楼]   [ 回复时间:2010-11-11 16:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-09 16:36
那是制造上的问题,高科技的技术上的东西还是有些不为人知
idpanjian
[第17楼]   [ 回复时间:2010-12-03 13:01 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-03 12:08
1M=1024K
1024K/64K=16
正好等于内部的16根总线,这样就可以寻到所有的外部20根总线的物理地址了
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved