爱恨情仇泪 发表于 2012-3-2 22:37:56

监测题2.2第二题

监测题2.2中的第二题。
有一数据存放在内存20000H单元中,现给定地址段SA,若想用偏移地址寻到此单元,则SA应该满足的条件是:最小()最大()
偏移地址的范围是0000H--FFFFH,因此,最小的偏移量是0000H,最大的偏移量是FFFFH。
因为(段地址H×10H+偏移地址H=物理地址H)
那么(最大段地址H×10H+最小偏移H=物理地址H)或(最小段地址×10H+最大偏移H=物理地址H)
最大SA=未知数
最小偏移=0000H
物理地址=20000H
逆算过来(20000H-0000H÷10H=2000H)结论:SA最大为(2000H)。
最小SA=未知数
最大偏移=FFFFH
物理地址=20000H
逆算过来(20000H-FFFFH÷10H=1000H)结论:SA最小为(1000H)。
这道题小甲鱼老师在计算最小SA的时候,最大偏移用的是FFF0H,我反复看了数遍教程视频,也没发现这里为什么要用FFF0H,请求高手详细解答,要详细解答,是什么原因????
万分感谢……
      敬礼……

.静待彼岸 发表于 2012-3-2 22:37:57

首先问提问者,最大的会求吗?其次,我认为刚开始,我被最小值困惑住了!我来说说的歪理,希望对你有用,呵呵!
因为偏移地址的范围是0000H--FFFFH,因此,最小的偏移量是0000H,最大的偏移量是FFFFH。说的没有错。
也就是说我们可以认为SA*16+0000=20000求出SA的最大值。
SA*16+FFFF=20000,求出最小值,但是我想提醒的是,小甲鱼老师的话说过,就是我们要求的SA肯定是16的倍数,这样也就是说偏移地址并不是给定的范围就必须要用上,所以你按照SA*16+FFFF=20000求出来的并不是整数,所以我们有理由把偏移地址的范围进行可能的缩小范围,这样当偏移地址为FFF0时,即SA为1001H时为最小值!
希望对你有帮助{:1_1:}

clm~~ 发表于 2012-3-3 13:01:54

应该只用2000H-fff就可以得出最小的段地址了,因为SA的最在编移地址是ffff。用2000h*16-ffff=10001就可以得出物理地址了,又因为算的是SA,是段地址,最大偏移就只有FFF0,所以就用到了20000H-FFF0=10010,不要最后的0后就是最小的可以偏移的段地址了,SA=1001。好像所有的段地址都是16的倍数,就不要为这个纠结了,(逆算过来(20000H-0000H÷10H=2000H)结论:SA最大为(2000H)。
10H那就不叫偏移的了,应该是F`````){:1_1:}

.静待彼岸 发表于 2012-3-3 19:50:08

爱恨情仇泪 发表于 2012-3-3 12:30 static/image/common/back.gif
我通过转换成二进制发现最小值为(1000H)的话果然是错误的。如下:
0001000000000000 (1000H)
0001000 ...

转换成二进制,没有必要了!当时我做这个题目的时候,SA*16+FFFF=20000,你会发现这样算出来的SA是多少??
这样吧,我们逆运算SA*16就是在SA后面添上一个0 ,也就是*16,那么我们就知道!@#$0+FFFF=20000,不知道,这一步,能不能理解!然后你就明白要使能得到20000这个值,那么我们就必须在$位置进行这样的计算,那就是$+F=0,并且向前进一位,以此类推,所以我们 !@#$ 就应该为1001,也就是这个里面要求的最小值,希望我这样说你能理解!

爱恨情仇泪 发表于 2012-3-4 18:17:25

.静待彼岸 发表于 2012-3-3 19:50 static/image/common/back.gif
转换成二进制,没有必要了!当时我做这个题目的时候,SA*16+FFFF=20000,你会发现这样算出来的SA是多少? ...

我知道是怎么回事了,我用的系统的计算器,10001H÷10H实际结果是1000.1H,而计算器上没这个小数,成了1000H。
请问下,有什么计算器可以算出小数点的?

宿命,就这样 发表于 2012-7-24 22:13:20

页: [1]
查看完整版本: 监测题2.2第二题