嗜血丨灵异狂 发表于 2011-6-13 06:13:31

物理地址的组合方法 最后一个是怎么弄的?

前4个没问题可是最后一个感觉不大对劲?既然说了物理地址是等于段地址*16+偏移地址       可是这里的段地址是1F00H如果*16就是1被进位上去了变成了F000H那么加上后边的2F60我用计算器算的是11F60   怎么最前面会少了    变成了1   求解高手答

嗜血丨灵异狂 发表于 2011-6-13 06:15:26

是不是进上去的1 是物理地址的1   所以11F60是加上进位上去的1(这个不是1其实是10000H呢?) 那么就成了21F60呢?

天下孤鹰 发表于 2011-6-13 06:51:33

如果没记错的话。。 物理地址存放的是20位。
1F00进一位 1F000
1F000+2F16=21F60
结果没错。

天下孤鹰 发表于 2011-6-13 06:55:48

另外。。 段地址 1F00H*16结果怎么是F000H?结果应该是 1F000H啊。 怎么你前面的都是算出来的结果是5位数的。 到最后这个就变成4位数的了?

zhouzz0419 发表于 2011-6-13 09:23:54

这里段地址×16是不需要进位的,对于8086CPU来说,内存地址本来就应该是20位的,就是5个16进制数,这里1F00H×16+2F60H=1F000H+2F60H=21F60H,结果没错的

再生缘 发表于 2011-6-13 12:47:13

不多说 上图
1f000是段地址1f00H*16得来的

l100615812 发表于 2011-6-13 14:58:06

我也很纳闷   用了计算器 就知道了。。。果然很强大。。!:L

开机中。。。 发表于 2011-6-13 15:05:37

照楼主这样分析,那2000H*16应该等于多少? 把第一位2舍掉?那为什么你说前4个都没问题?

张国祥 发表于 2011-6-13 18:47:50

本帖最后由 张国祥 于 2011-6-13 18:48 编辑

你理解错了吧

1F00H*16=1F000H   
1F000H+2F60H=21F60H,以上两步均在地址加法器中完成,不会有问题的,也不会舍去1F000H前面的1

嗜血丨灵异狂 发表于 2011-6-14 18:03:35

天下孤鹰 发表于 2011-6-13 06:55 static/image/common/back.gif
另外。。 段地址 1F00H*16结果怎么是F000H?结果应该是 1F000H啊。 怎么你前面的都是算出来的结果是5位数的 ...

拜托行不   物理地址是20位没错可是是段地址*16   段地址只能存放16位   所以最前面的就自动进位了    以为我没看过汇编语言视频啊

嗜血丨灵异狂 发表于 2011-6-14 18:04:08

张国祥 发表于 2011-6-13 18:47 static/image/common/back.gif
你理解错了吧

1F00H*16=1F000H   


拜托行不   物理地址是20位没错可是是段地址*16   段地址只能存放16位   所以最前面的就自动进位了    以为我没看过汇编语言视频啊

再生缘 发表于 2011-6-14 18:16:22

嗜血丨灵异狂 发表于 2011-6-14 18:04 static/image/common/back.gif
拜托行不   物理地址是20位没错可是是段地址*16   段地址只能存放16位   所以最前面的就自动进位了   ...

你把段地址*16看成 段地址*10就可以了

再生缘 发表于 2011-6-14 18:21:54

天下孤鹰 发表于 2011-6-13 06:51 static/image/common/back.gif
如果没记错的话。。 物理地址存放的是20位。
1F00进一位 1F000
1F000+2F16=21F60


老大你的偏移地址写错了 是2F60难怪我算着算着感觉不对劲

张国祥 发表于 2011-6-14 20:37:05

嗜血丨灵异狂 发表于 2011-6-14 18:04 static/image/common/back.gif
拜托行不   物理地址是20位没错可是是段地址*16   段地址只能存放16位   所以最前面的就自动进位了   ...

寄存器只能存放16位,但是地址加法器就不是了!你要理解这一点

张国祥 发表于 2011-6-14 20:40:49

嗜血丨灵异狂 发表于 2011-6-14 18:03 static/image/common/back.gif
拜托行不   物理地址是20位没错可是是段地址*16   段地址只能存放16位   所以最前面的就自动进位了   ...

另外段地址*16以后,就不能再称他为段地址了

天下孤鹰 发表于 2011-6-15 11:59:45

再生缘 发表于 2011-6-14 18:21 static/image/common/back.gif
老大你的偏移地址写错了 是2F60难怪我算着算着感觉不对劲

{:1_1:}一时大意。。

段地址没进到地址加法器的时候是只能存放16位的。。 地址加法器里面是存放20位的。。

efforts 发表于 2011-6-15 18:09:26

直接用计算器算下就出来了吧

king嗜血法师 发表于 2011-6-16 23:28:02

本帖最后由 king嗜血法师 于 2011-6-16 23:39 编辑

以前我也会犯这个错误,计算器里16进制算法*10就进位了,其实是没错的,因为这里的10就是10进制里的16,别在计算器里16进制算法*16。

king嗜血法师 发表于 2011-6-16 23:40:36

看来我答不对题,为什么你要把前面的1去掉呢?如果你要把1去掉,只想要4位数的偏移地址,那你应该也把11F60H前面的1也去掉,那就是4位数的偏移地址了,你要总地址你就不应该去掉前面的1,那就1F000H+2F60H=21F60H。这里你要想得出的1F000H的段地址是你脑海中得出来的,并不是显示在计算机中的,计算机中不会进位,只是你算的时候要进位而已。

king嗜血法师 发表于 2011-6-16 23:47:01

本帖最后由 king嗜血法师 于 2011-6-16 23:52 编辑

难道你没发现1F000H也是20位的地址吗,为什么要去掉1,段寄存器是16位的地址,但是你进行的1F00H*16是在地址加法器里进行的,这时就变成20位的了。
页: [1] 2
查看完整版本: 物理地址的组合方法 最后一个是怎么弄的?