. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  段的大小最小是多少?有人说是16B,为什么?  [待解决] 回复[ 4次 ]   点击[ 513次 ]  
trojen_worm
[帖 主]   [ 发表时间:2011-04-30 10:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-30 19:00
如题
tsembrace
[第1楼]   [ 回复时间:2011-04-30 10:45 ]   [引用]   [回复]   [ top ] 
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20
物理地址=段地址*16+偏移地址
偏移地址的取值范围是0000h~ffffh.该范围即为段的大小,因此应该是2^16B=64KB.
trojen_worm
[第2楼]   [ 回复时间:2011-04-30 11:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-30 19:00
这是最大,我问的是最小。段地址以10H为基数起始地址,我直接把起始后的1个或2个内存单元设定为一个段不行吗?这样不就是1B或2B了?为什么最小是16B?
tsembrace
[第3楼]   [ 回复时间:2011-04-30 12:43 ]   [引用]   [回复]   [ top ] 
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20
以你的例子:10H为段地址;则对应的内存物理地址为(10H*16+00H)~(10H*16+ffffH),你说的起始后的1个或2个内存单元是在这范围的,这个段的大小仍然是64KB。
回到你的题目:
物理地址范围是0~fffffH;
段容量最小则是求当什么时候,偏移地址范围最小,很明显,当段地址最大时候,偏移地址最小,段地址最大可取ffffH,偏移地址范围为0~fH,为16个内存单元,16B。
atenl
[第4楼]   [ 回复时间:2011-05-01 13:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-07 15:21
首先我想这些问题在论坛已经有很多人问过了。
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1003&qkSg=2&qID=35408
我再说说个人对段的看法:
首先段的最小是16Byte,8086CPU的地址总线为20,可直接寻址的范围就是0H-FFFFFH。但是CPU是16位,一次只能处理16位地址,于是就使用段来管理地址:物理地址=段地址*16(<<4)+偏移地址(这样段地址和偏移地址都是CPU能处理的16位了,而寻址范围也成了20位的)
那为什么段的最小值为16位呢,这首先是根据CPU的特性人为的分段的,你可以设1B或2B为一个段,可在计算物理地址时段地址总是要左移四位,相邻两个段地址的长度为1<<4,也就是16(不考虑偏移地址,因为两者是可以转化的)。在我们写程序时,定义数据段时,你只定义一个字节的数据,编译后,还是会分配16byte的大小。
而楼上所说的一个段的大小为64KB,物理地址=段地址*16(<<4)+偏移地址,一个物理地址可以用不同的段地址和偏移地址表示,说是最小64KB就太牵强了,但在内存中显示的内存都是一个段64KB的,因为这样段地址和偏移地址都是线性的,方便管理。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved