物理地址的组合方法 最后一个是怎么弄的?
前4个没问题可是最后一个感觉不大对劲?既然说了物理地址是等于段地址*16+偏移地址 可是这里的段地址是1F00H如果*16就是1被进位上去了变成了F000H那么加上后边的2F60我用计算器算的是11F60 怎么最前面会少了 变成了1 求解高手答 是不是进上去的1 是物理地址的1 所以11F60是加上进位上去的1(这个不是1其实是10000H呢?) 那么就成了21F60呢? 如果没记错的话。。 物理地址存放的是20位。1F00进一位 1F000
1F000+2F16=21F60
结果没错。 另外。。 段地址 1F00H*16结果怎么是F000H?结果应该是 1F000H啊。 怎么你前面的都是算出来的结果是5位数的。 到最后这个就变成4位数的了? 这里段地址×16是不需要进位的,对于8086CPU来说,内存地址本来就应该是20位的,就是5个16进制数,这里1F00H×16+2F60H=1F000H+2F60H=21F60H,结果没错的
不多说 上图
1f000是段地址1f00H*16得来的
我也很纳闷 用了计算器 就知道了。。。果然很强大。。!:L 照楼主这样分析,那2000H*16应该等于多少? 把第一位2舍掉?那为什么你说前4个都没问题? 本帖最后由 张国祥 于 2011-6-13 18:48 编辑
你理解错了吧
1F00H*16=1F000H
1F000H+2F60H=21F60H,以上两步均在地址加法器中完成,不会有问题的,也不会舍去1F000H前面的1
天下孤鹰 发表于 2011-6-13 06:55 static/image/common/back.gif
另外。。 段地址 1F00H*16结果怎么是F000H?结果应该是 1F000H啊。 怎么你前面的都是算出来的结果是5位数的 ...
拜托行不 物理地址是20位没错可是是段地址*16 段地址只能存放16位 所以最前面的就自动进位了 以为我没看过汇编语言视频啊
张国祥 发表于 2011-6-13 18:47 static/image/common/back.gif
你理解错了吧
1F00H*16=1F000H
拜托行不 物理地址是20位没错可是是段地址*16 段地址只能存放16位 所以最前面的就自动进位了 以为我没看过汇编语言视频啊
嗜血丨灵异狂 发表于 2011-6-14 18:04 static/image/common/back.gif
拜托行不 物理地址是20位没错可是是段地址*16 段地址只能存放16位 所以最前面的就自动进位了 ...
你把段地址*16看成 段地址*10就可以了 天下孤鹰 发表于 2011-6-13 06:51 static/image/common/back.gif
如果没记错的话。。 物理地址存放的是20位。
1F00进一位 1F000
1F000+2F16=21F60
老大你的偏移地址写错了 是2F60难怪我算着算着感觉不对劲 嗜血丨灵异狂 发表于 2011-6-14 18:04 static/image/common/back.gif
拜托行不 物理地址是20位没错可是是段地址*16 段地址只能存放16位 所以最前面的就自动进位了 ...
寄存器只能存放16位,但是地址加法器就不是了!你要理解这一点 嗜血丨灵异狂 发表于 2011-6-14 18:03 static/image/common/back.gif
拜托行不 物理地址是20位没错可是是段地址*16 段地址只能存放16位 所以最前面的就自动进位了 ...
另外段地址*16以后,就不能再称他为段地址了
再生缘 发表于 2011-6-14 18:21 static/image/common/back.gif
老大你的偏移地址写错了 是2F60难怪我算着算着感觉不对劲
{:1_1:}一时大意。。
段地址没进到地址加法器的时候是只能存放16位的。。 地址加法器里面是存放20位的。。
直接用计算器算下就出来了吧 本帖最后由 king嗜血法师 于 2011-6-16 23:39 编辑
以前我也会犯这个错误,计算器里16进制算法*10就进位了,其实是没错的,因为这里的10就是10进制里的16,别在计算器里16进制算法*16。 看来我答不对题,为什么你要把前面的1去掉呢?如果你要把1去掉,只想要4位数的偏移地址,那你应该也把11F60H前面的1也去掉,那就是4位数的偏移地址了,你要总地址你就不应该去掉前面的1,那就1F000H+2F60H=21F60H。这里你要想得出的1F000H的段地址是你脑海中得出来的,并不是显示在计算机中的,计算机中不会进位,只是你算的时候要进位而已。 本帖最后由 king嗜血法师 于 2011-6-16 23:52 编辑
难道你没发现1F000H也是20位的地址吗,为什么要去掉1,段寄存器是16位的地址,但是你进行的1F00H*16是在地址加法器里进行的,这时就变成20位的了。
页:
[1]
2