鱼C论坛

 找回密码
 立即注册
查看: 4069|回复: 17

王爽汇编的2.2检测题,百撕不得骑姐。

[复制链接]
发表于 2012-6-23 21:08:51 | 显示全部楼层 |阅读模式
1鱼币
有一个数据储存在20000h单元中,现给段地址为SA,若想通过偏移地址寻找此单元,则SA要满足什么条件,最大为多少----,最小为多少?

现在先来说一下。物理地址=段地址X16(10H)+偏移地址。

偏移地址的寻址范围在0000到ffff之间。

那么我来算一下。   20000h-ffff=10001。     10001再除去16(10h)=1000。    这是错误的答案。

我这为什么会是错误的答案,错在哪里?明明按照物理地址=段地址x16+偏移地址的算法算出来的。

看了小鱼的答案却是1001到fff0,这究竟是怎么算出来的,若是将数据放在33333h单元中,又要怎么算出来,答案又是什么?

求解。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-23 22:12:55 | 显示全部楼层
偏移地址16位,变化范围为0H—FFFFH。题目中要访问的是内存20000H的单元,偏移地址的值不是固定的(范围是固定的,就拿16位来讲),偏移地址的值取大了,会出现访问不到20000H单元,因为计算SA要取整,SA*16+FFFFH=20000H,得SA=1000H,再SA*16+FFFFH=1FFFFH<20000H(此时偏移地址取最大都访问不到20000H单元),所以应该缩小偏移地址求SA。看完之后希望你认真思考一下,希望你能弄懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-23 22:17:00 | 显示全部楼层
是1001h到2000h,10001再除去16有余数被舍去了,当sa为1000h时,最大只能寻址1ffffh,所以
sa最小为1001h。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-23 22:36:39 | 显示全部楼层

看不懂, 最大的偏移地址为ffff怎么缩小成为fff0的,计算机sa又是怎么取整的?

详细解释下谢谢。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-23 22:56:54 | 显示全部楼层
骑着蟑螂闯红灯 发表于 2012-6-23 22:12
偏移地址16位,变化范围为0H—FFFFH。题目中要访问的是内存20000H的单元,偏移地址的值不是固定的(范围是固 ...

不用回复了,我终于知道了,你妹的,居然算起来这么麻烦,要算八次才能算出,靠。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-23 22:58:16 | 显示全部楼层
这个问题其实很容易解答,你可以把问题简单化一点:
SA(段地址) * 10H + PA(偏移地址) = 20000H,偏移地址PA的取值范围【0,0FFFFH】,求 SAmin和SAmax。

OK,现在来解题:SAmin = 取整【(20000H - PAmax)/10h】,(20000H -0ffffH)/10h 按理论计算是1000h多一点,因此SAmin=1001h,这里你不理解可以反算下,如果SAmin=1000h,PA = 0ffffH,则寻找到的地址为:SAmin+PA = 1ffffH,找不到20000H;

同理,SAmax = 取整【(20000H - PAmin)/10h】=取整【(20000H -0)/10h】 = 2000H

因此,答案就很明了了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-23 23:01:43 | 显示全部楼层
玩酷子弟lv 发表于 2012-6-23 22:17
是1001h到2000h,10001再除去16有余数被舍去了,当sa为1000h时,最大只能寻址1ffffh,所以
sa最小为1001h。

知道了,20000再减掉1FFFF再加1000=最小的1001。 之后的就能理解解,为什么最大值为fff0了。

编程简直就是在考验人的思考逻辑能力,这种算法太麻烦了,要加减好几次。

谢谢。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-23 23:05:39 | 显示全部楼层
就是说你这个20000H-FFFF=10001H 这是不行的。。减出来的值必须是10的倍数。不能有余。因为本来就是段地址乘以10H才得到的。段地址不能为小数吧。。。而往上数最小就是10010.这样处以10H就是1001。。还有最大是2000H。不是FFF0H。。

最后正解是:1001H-2000H。明白了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-24 13:01:10 | 显示全部楼层
宋末 发表于 2012-6-23 22:36
看不懂, 最大的偏移地址为ffff怎么缩小成为fff0的,计算机sa又是怎么取整的?

详细解释下谢谢。。。

注意:偏移地址最大值是FFFFH,题目要我们求的是既满足题目要求(能访问到20000H单元),而且是最大的SA,①不满足题目要求的偏移地址我们不能取,②得到的SA的值不是最大值的偏移地址不能取.③color=Red]SA*16+偏移地址=物理地址,知道吧???对于16位,来讲最大偏移地址绝对为FFFFH,没有争议,偏移地址是可变的啊,这里如果取偏移地址为FFFFH的话,你知道会出现什么情况吗,会得到SA=1000H,这样能访问的最大内存单元是1FFFFH<20000H,访问不到20000H单元(不符合题目条件),哦哦哦!仔细想想原来是偏移地址取大了,看看减小点试试看行不行?偏移地址取FFF0H,则SA=1001H,偏移地址最大为FFFFH,此时能访问的最大内存单元是2000FH,最小内存单元是10010H(20000H单元在其内,满足)
。大兄弟,如果这样都听不懂,那说明是你自己的问题啦,自己的问题该怎么办,自己解决,多问无益,多想多动手!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-24 18:12:40 | 显示全部楼层
楼主这里就是错误的  “ 10001再除去16(10h)=1000。”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-25 05:24:48 | 显示全部楼层
我也学习了    感谢大家
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-25 11:15:42 | 显示全部楼层
本帖最后由 MewCatcher 于 2012-6-25 11:16 编辑

C君,你的答案【绝对错】!(亮一下哦~)
《汇编课》监测点2.2的第二题,你的答案是对的,但解析以及补充解析是错的。
课本25页(2)说偏移地址是从0H~FFFFH(在这里你已经错了!)

这道题应该这么解析:
SA = ( 20000H - 偏址 ) / 16;
偏址的范围是 [ 0000H, FFFFH ];
因为 SA x 16 = ????0H (末位是零);
所以 SA x 16 的范围是 ( 20000H - 偏址 ) 的范围,
    也即:[ 10001H, 20000H ];
由去尾法进行舍位,可得 SA 范围是 [ 1001H, 2000H ];
完成,谢谢收看,注意采纳!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-25 11:20:31 | 显示全部楼层
本帖最后由 MewCatcher 于 2012-6-25 11:21 编辑
宋末 发表于 2012-6-23 23:01
知道了,20000再减掉1FFFF再加1000=最小的1001。 之后的就能理解解,为什么最大值为fff0了。

编程简直 ...

看12楼的标准推算!!
解释一下
【去尾法】:3 / 2 = 1.5 约等于 1(把小数部分舍掉)
【进一法】:3 / 2 = 1.5 约等于 2(有小数则进一位)
【四舍五入法】: 3 / 2 = 1.5 满5进1约等于 2



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-25 21:47:21 | 显示全部楼层
又学习了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-25 22:45:37 | 显示全部楼层
我也学习了    感谢大家
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-26 03:02:50 | 显示全部楼层
其实这个问题是取整的问题,到底是向上取整还是向下取整,例如X>=1.1,那么X 应该是向上取整2,又或者x<=1.9,那么X向下取整1。向上取还是向下取是根据需求的,不是根据四舍5入的,更不能直接去尾了事。便宜地址范围为0~FFFFh,物理地址的实际范围为sa*16+0~sa*16+ffffh,也就是说20000h必须在SA*16+0~SA*16+ffffh之间,可以写成SA*16+0<=20000h<=SA*16+FFFFh,先算
sa*16+0<=20000h,得sa<=20000h/16,向下取整的2000h,再算20000h<=sa*16+ffffh,得
SA>=(20000-ffff)/16,这个数在1000h~1001h之间,向上取整1001h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 02:55:02 | 显示全部楼层
怎么算的是知道了。问题是现在那逻辑是什么。我怎么想都没想到。因为只知道一和20000H的物理地址的数据。那地址段跟偏移地址什么都不知道。怎么去算??还有都知道偏移地址最大是FFFF啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-18 17:29:52 | 显示全部楼层
{:1_1:}  谢谢各位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 10:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表