|
主题 : : 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件为最小()最大()? [待解决] |
回复[ 12次 ]
点击[ 815次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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,在这里有点不解,请各位前辈帮忙解答一下,十分感谢! | | |
|
|
|
|
[第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单元
这道题不应看成是单纯的计算题吧 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-09-24 01:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-09-20 01:11 |
原来是这样算出来的啊,我的是推理出来的,不过也做对了,哈哈! | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-10-23 11:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01 |
|
|
|
|
|
[第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.
我是初学小白,不知道这么理解对不对,大家多多指点。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-10-30 13:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-28 09:45 |
|
|
|
|
|
[第6楼]
[ 回复时间:2009-10-30 14:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2009-10-29 10:41 |
|
|
|
|
|
[第7楼]
[ 回复时间:2009-11-12 15:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-22 18:01 |
4楼,这觉得这道题最不容易理解的地方就是FFFFH/10H这里了,得出的答案有小数点的,应该是进一位还是舍去。
你竟然直接就FFFFH/10H=FFFH了。。。。 | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第9楼]
[ 回复时间:2009-11-28 16:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:7
信誉值:10
注册日期:2009-11-19 11:28 |
我觉得4楼的是正解
20000h应该是16进位的,而16确实10进位的再16进位表达是10H | | |
|
|
|
|
[第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为最大 | | |
|
|
|
|
[第11楼]
[ 回复时间:2013-03-16 19:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-03-16 12:52 |
|
|
|
|
|
[第12楼]
[ 回复时间:2013-03-19 21:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-28 23:55 |
|