汇编2.2的问题,很不解,求高手
本帖最后由 s0512 于 2013-5-26 13:53 编辑题目:有一个数据存放在内存20000H单元中,现给定段地址为 SA, 若想用偏移地址寻到此单元,则SA应该满足的条件是: 最小值为 1001H 最大值为 2000H。
根据 物理地址=段地址*16+偏移地址 偏移地址范围是0H~FFFFH
那 最小值 X *16+FFFFH=20000 有木有错? 那X应该=BA2H
最大值Y*16+0H=20000 Y=1745H
答案 最小值却=1001H 最大值 = 2000H ?
求高手解答我是真正的0基础啊~
jay4696 发表于 2012-2-21 13:36 static/image/common/back.gif
SAx16+0000H20000H各得到SAx16>20000H和SAx16
是计算步骤啦。不过不好意思我大于号小于号抄后面去的时候写反了,步骤是这样的: SAx16+0000H<20000H和SAx16+FFFFH>20000H各得到SAx16<20000H和SAx16>10001H得到 SA<20000H和SA>1000.1(1000.1取整,即1001),最终答案最小1001H,最大2000H。16进制的数除以16当然是小数点向前移一位啦,就像十进制中100除以10是不是就是把小数点向前移一位啊结果是10,计算机里你除以的那个16是十进制里的16啊,十六进制里有16这个数字吗?还有这个 SA>1000.1(1000.1取整,即1001)初中数学啦,比如你一道题目要求x>1000.1的最小正整数,你说是几,是1001吧?同样的道理嘛所以那个题目的最小数就是1001H喽。 根据题意列出两个不等式 SAx16+0000H<20000H和SAx16+FFFFH>20000H各得到SAx16>20000H和SAx16<10001H 把十六除到后面来,由于是16进制所以把直接把小数点向前移一位 分别得到SA>20000H和SA<1000.1(1000.1取整,即1001)最终答案最小1001H,最大2000H 能自己算的就不要用电脑上的科学计算机 本帖最后由 jay4696 于 2012-2-21 13:39 编辑
氵冗黙┡浚ご 发表于 2012-2-21 13:16 http://bbs.fishc.com/static/image/common/back.gif
根据题意列出两个不等式 SAx16+0000H20000H各得到SAx16>20000H和SAx1620000H和SA
SAx16+0000H<20000H和SAx16+FFFFH>20000H各得到SAx16>20000H和SAx16<10001H 计算步骤是? 还有 SA<1000.1(1000.1取整,即1001)这个也不明白,1000.2可以等于1002嘛? 我比较笨,麻烦您了。哦 还有就是我用计算机算20000/16 为什么不是 等于 2000H而是1745H 氵冗黙┡浚ご 发表于 2012-2-21 17:46 static/image/common/back.gif
是计算步骤啦。不过不好意思我大于号小于号抄后面去的时候写反了,步骤是这样的: SAx16+0000H20000H各 ...
我也刚接触的汇编,看小甲鱼视屏时认真点看,里面都讲到的 氵冗黙┡浚ご 发表于 2012-2-21 17:48 static/image/common/back.gif
我也刚接触的汇编,看小甲鱼视屏时认真点看,里面都讲到的
好的 谢谢 本帖最后由 非同凡想 于 2012-2-21 20:07 编辑
我非常理解楼主的苦衷,想弄懂一个问题,但又寻不到自己可以理解的答案,我也是0基础初学者,让我们共同努力吧,但最重要一点:希望你不要放弃!
相信楼上各位的解释你看完后还是不太清楚,我觉得这样告诉你容易理解些:
首先,段地址X16,这里的‘16’是从 1字=2字节=16位 而来的,可通俗的理解为十进制数据
所以,应该这样计算地址:X *16+FFFFh=20000h
1. 20000h-FFFFh=10001h
2. 10001h转换为十进制后为65537
3. 65537再除以十进制的16,等于4096余1
4. 4096转换为16进制等于1000h
再有我们可以反过来这样理解:16进制的16怎么表示?是不是10h?怎么能用16来表示呢?……
所以上题的求解同样可以用10001h除以10h直接得到1000h余1
希望我上面的回复可以帮你理解这个问题,其实很简单对吗?
本帖最后由 莫名其妙 于 2012-2-22 15:25 编辑
10进制是遇10向前进一位
16进制是遇16向前进一位
20000h
段地址+偏移地址=物理地址
偏移地址的范围最大是 0000H--FFFFH
所以
段地址(sa)*(16)+0000H=20000h 这个是段地址最大时 sa=2000这个就不用多说了 )*(16)这个要换成16进制的10H (这要补充一点 书上凡是数字后面没有H的都是10进制数要自己转换成16进制然后在数字后加H参与运算)
段地址(sa)*(16) + ffffh=20000h 这个是段地址最小时20000h-ffffh=10001/10h=sa=1000.1这里的0.1四舍五入掉(你应该没有见过什么时候段地址带小数点的吧!其实我也没见过!~:lol)所以最小应该是1000 但是 , 1000*10H+FFFFh又不等于20000h 所以 最小应该是1001 而且引出的一个问题:这个偏移地址最大是多少?
当然是FFF0h咯!~:D:D
非同凡想 发表于 2012-2-21 19:51 static/image/common/back.gif
我非常理解楼主的苦衷,想弄懂一个问题,但又寻不到自己可以理解的答案,我也是0基础初学者,让我们共同努力 ...
这样说就理解了, 非常非常感谢 莫名其妙 发表于 2012-2-22 15:20 static/image/common/back.gif
10进制是遇10向前进一位
16进制是遇16向前进一位
20000h
谢谢 你们的帮助 楼主,你的想法是对的,不过你的算法就不敢苟同了,
偏移最小值为0000,也就是代表段地址*16=物理地址,正确算法应该是段地址=2000,这是最大值
当偏移最大值为FFFF时,那么段地址应该是段地址*16+FFFF=20000,可我们知道FFFF还要加一个1才能等于10000,而段地址等于1000时左移了就成了10000了,和FFFF就没办法等于物理地址了,所以只能让段地址成为1001,而偏移最大值也只有FFF0了,建议楼主计算这些时用计算器吧,就不会出错了,还有这些数后面的H是代表十六进制的意思,我不知道你有没有拿来一块算了,:dizzy: 午夜℃朦胧 发表于 2012-2-25 17:46 static/image/common/back.gif
楼主,你的想法是对的,不过你的算法就不敢苟同了,
偏移最小值为0000,也就是代表段地址*16=物理地址,正 ...
我前面的段地址*16+偏移地址 那个16我当做16H来乘了 应该是10H sa*16+0=20000 > 范围 > sa*16+ffff=20000,你算一下就ok了,16位机器最大寻址64K也就是ffff,2^16次方 {:1_1:} 果断学习 莫名其妙 发表于 2012-2-22 15:20 static/image/common/back.gif
10进制是遇10向前进一位
16进制是遇16向前进一位
20000h
小白表示感谢,不然还不知道这个fff0H是谁生的 非常感谢但是还是不太明白、看来我还要再认真的回去复习一下啊。在这个论坛里转悠发现每个角落都是知识。还要感谢楼主能提出问题从而让我这样的初学者得到进一步的学习 氵冗黙┡浚ご 发表于 2012-2-21 13:16 static/image/common/back.gif
根据题意列出两个不等式 SAx16+0000H20000H各得到SAx16>20000H和SAx1620000H和SA
真是难得给力的帖子啊。那 二进制八进制 也是向前取一点 取整数吗? 非同凡想 发表于 2012-2-21 19:51 static/image/common/back.gif
我非常理解楼主的苦衷,想弄懂一个问题,但又寻不到自己可以理解的答案,我也是0基础初学者,让我们共同努力 ...
这位朋友讲的详细 我只是路过打酱油的。 我只是路过打酱油的。
页:
[1]
2