检测点2.2的问题
本帖最后由 loop 于 2011-4-22 05:08 编辑在第二题中,为什么偏移地址最大为FFF0H,而不是FFFFH呢?? 最大地址是 2000H ,你说的FFF0是错的。所以没有为什么。 我是说在解达的过程中,算最小值时,不是要用偏移值最大来算吗
这里面的FFF0H应该是最大的偏移地址吧,这个为什么不是FFFFH呢?不是说偏移地址的范围是0000~FFFF吗? 回复 3# pm3000
如果偏移地址是FFFFH,那么段地址没有符合呀?我们要使得物理地址为20000H。 噢,这里20000H减去偏移地址后,得到的数一定要是16的倍数,这样这个偏移地址最大就只能取到FFF0H。 FFF0H又是怎么算出来的呢 麻木了:L 回复 6# 小乌龟
转:
小甲鱼说了段地址要为16(10H)的倍数,
先不纠结答案1000或1001,
进行16进制运算,用课本给出的物理地址20000H
分别递减最大偏移地址
20000H - FFFF = 1 0001H
20000H - FFFE = 1 0002H
20000H - FFFD = 1 0003H
20000H - FFFC = 1 0004H
20000H - FFFB = 1 0005H
20000H - FFFA = 1 0006H
直到.......
20000H - FFF0 = 1 0010H
这时10H满足16(10H)的倍数了
物理地址减去最大偏移地址除以16(10H)等于最小段地址
20000H - FFF0H/ 10H = 1001H
出来都在混小学生知识都忘了,
可能前面没学好,小甲鱼给的答案,不知道FFF0怎么来?
起码给个比较官方的算法,这样才够零基础. EA取最大值时,SA=20000h-ffffh/16=1001h,SA 为最小值
EA取最小值时,SA=20000h-0h/16=2000h,SA为最大值
书上给出的结论:偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64KB个内存单元。
用20000H减去FFFFH(变化范围的最大值)再除以10H就等于SA的最小值,即SA=20000h-ffffh/16=1001h
用20000H减去0H(变化范围的最小值)再除以10H就等于SA的最大值,即SA=20000h-0h/16=2000h
本人是个初学者,不知道这样理解对不对? 物理地址=SA*10H+EA
EA的变化范围为0h~ffffh
物理地址范围为(SA*10H+0h)~(SA*10H+ffffh)
即在这个变化范围内,要求其结果都等于20000H
20000h=SA*10H+EA
SA=(20000h-EA)/10H
EA取最大值时,SA=20000h/10H-ffffh/10H=1001h,SA为最小值
EA取最小值时,SA=20000h/10H-0h/10H=2000h,SA为最大值
关键是那个16,这个16是十进制的16,转化为十六进制,就是10H了。 (1)给定段地址为0001H,仅通过变化偏移量地址寻址,CPU的寻址范围为多少到多少?
解:CPU的寻址范围为 0001H*16+0 到 0001H*16+FFFF
即寻址范围为 00010H~1000FH
(2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是:最小为多少?最大为多少?
解:要解答此题 我们可以根据 物理地址=段地址*16+偏移地址 的公式 列出两个方程 SA*16+0=20000H SA*16+FFFF=20000H
第一个方程SA的解 则为SA的最大值 第二个方程SA的解 则为SA的最小值
解方程:
SA=2000H
(1)SA*16+0=20000H
SA*16=20000H-0
SA*16=20000H
SA=20000H/16(10H)
SA=2000H
(2)
SA=1001H
SA*16+FFFFH=20000H
SA*16=20000H-FFFFH
SA*16=10001H
(因为基地址的起始地址必须是16的倍数 即SA*16=10001H不满足要求 ,所以这里的10001H 我们取值为10010H)
SA*16=10010H
SA=10010H/16(10H)
SA=1001H
所以SA应满足的条件是最小值为1001H 最大值为2000H (段地址*16 实际是左移4位,左移4位就等于*10)
我的理解方法是这样的:
SA*10+EA
EA取最小值为:SA=(20000H-FFF0)/10=1001H,SA为最少值
EA取最大值为:SA=20000H/10,SA为最大值
如:SA为26231H = (26231H-FFF1)/10=1624H
SA为222Fc = (222FcH-FFFc)/10 = 1230H
SA为32139 = (222FcH-FFF9)/10
偏移地址的“最大”范围一定是:0000H~FFFFH之间。最SA尾数 我的头好晕~~~~:dizzy: 本帖最后由 sunhopp 于 2011-4-24 03:01 编辑
看清楚哦。SA是段地址!8086 CPU的物理地址为20位,段地址X16+偏移地址=物理地址!
所以SA最大为2000啦!
注:段地址是16的倍数! 不明白!!!就是不懂:@:@:@:@ 我要知道的是道理.而不是方程式.????????///需要的是理解!!!!!!!!!!!!:'(:'(:'( 我找到了我我要的答案的了啊 哈哈 明白了,不孬 这题目我就晕了 这么向下学啊 sunhopp 发表于 2011-4-24 02:59 static/image/common/back.gif
看清楚哦。SA是段地址!8086 CPU的物理地址为20位,段地址X16+偏移地址=物理地址!
所以SA最大为2000啦!
...
基地址是16的倍数好不好,这是解题关键!
页:
[1]
2