. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件为最小()最大()?  [待解决] 回复[ 12次 ]   点击[ 815次 ]  
senhueibian
[帖 主]   [ 发表时间:2009-08-21 13:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-08-04 20:36
有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件为最小()最大()? 
我根据CPU寻址的公式:物理地址=段地址*16 +偏移地址 得到: 
20000H=SA *16+偏移地址 
SA=(20000-最大的偏移地址)\16 
SA=(20000-FFFF)\16 
SA=10001\16 
按教材上说的段地址*16=16进制左移一位,那相反则应该等于10001右移一位即1000.1(由于本人初次涉及16进制乘除法,还请各位老师指点)出现了小数位?看答案上说的却是1001H,在这里有点不解,请各位前辈帮忙解答一下,十分感谢!
tinyparticle
[第1楼]   [ 回复时间:2009-08-22 02:34 ]   [引用]   [回复]   [ top ] 
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26
答案的1001H是这么得来的:
20000h=SA*16+EA  
SA=(20000h-EA)/16
  =20000h/16-EA/16
  =2000h-EA/16  
EA的变化范围为0h~ffffh 
EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值  
EA取最小值时,SA=2000h-0h/16=2000h,SA为最大值

这里的ffffH/16=fffh我是通过WIN自带计算器算的
按位移来算确实应该为fff.fh,这里小数点后的f应该是省略了
单就除法来说,应有商和余数,但此题要求的是地址最大和最小,所以余数忽略了

不过如果根据LZ的算法,小数点后应该是不能省略的
我们可以反过来再思考下,如果SA为1000h的话,小数点后省略
SA=1000h,EA取最大ffffh,物理地址为1ffffh,将无法寻到20000H单元

这道题不应看成是单纯的计算题吧
zhangs
[第2楼]   [ 回复时间:2009-09-24 01:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-20 01:11
原来是这样算出来的啊,我的是推理出来的,不过也做对了,哈哈!
heiok.com
[第3楼]   [ 回复时间:2009-10-23 11:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01
还是没看明白.有点晕....呵...努力.
tanyouf
[第4楼]   [ 回复时间:2009-10-29 15:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-01 14:59
我是这么理解的:
20000H=SA*16+EA=SA*10H+EA
SA=20000H/10H - EA/10H
EA的值为0H~FFFFH之间,如果EA取最大值FFFFH,那么
SA=20000H/10H-FFFFH/10H
  =2000H-0FFFH
  =1001H
我觉得在计算过程中,不应使用数学计算,用位移法更能弄清楚这个过程,如20000H/10H右移一位变成2000H,FFFFH/10H右移一位变成0FFFH,两者相减得1001H.
我是初学小白,不知道这么理解对不对,大家多多指点。
liamlee
[第5楼]   [ 回复时间:2009-10-30 13:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-28 09:45
ok
    不再不确定了···
  谢谢
yo_007
[第6楼]   [ 回复时间:2009-10-30 14:27 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2009-10-29 10:41
1楼的是正解
419745469
[第7楼]   [ 回复时间:2009-11-12 15:57 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-22 18:01
4楼,这觉得这道题最不容易理解的地方就是FFFFH/10H这里了,得出的答案有小数点的,应该是进一位还是舍去。
你竟然直接就FFFFH/10H=FFFH了。。。。
tonyones
[第8楼]   [ 回复时间:2009-11-12 17:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-12 10:44
楼主既然已经计算到 SA=1000.1 这时就稍加判断就能得出结果
1000.1这个值你只要把它当做一个SA的理论上底线值就好,SA至少是大于等于1000.1的,所以SA只能取值1001h,进一步举例说明:
    如果取值为1000h,此时SA*16+EA的范围是10000h~1FFFFh,正好取不到20000h的值;
    而当SA取值1001h时,SA*16+EA的范围是10010h~2000fh,是可以取到20000h的值的。
  所以正确答案是1001h
suixin
[第9楼]   [ 回复时间:2009-11-28 16:35 ]   [引用]   [回复]   [ top ] 
荣誉值:7
信誉值:10
注册日期:2009-11-19 11:28
我觉得4楼的是正解
20000h应该是16进位的,而16确实10进位的再16进位表达是10H
arcman2009
[第10楼]   [ 回复时间:2009-11-28 22:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-22 15:29
当偏移地址为0时SA取最大,偏移地址为FFFF时SA取最小,但偏移地址必须满足是10的倍数,所以偏移地址只能取到FFF0H 
即:(20000H-fff0H)/16=1001H此时SA为最小 
   (20000H-0H)/16=2000H此时SA为最大
eaookii
[第11楼]   [ 回复时间:2013-03-16 19:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-03-16 12:52
留名
stonepan
[第12楼]   [ 回复时间:2013-03-19 21:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-28 23:55
各抒己见,还是不明白。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved