苏丛 发表于 2017-11-4 11:31:24

求教 关于8086CPU的简单问题

本帖最后由 苏丛 于 2017-11-4 13:55 编辑

8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力只有64KB。这个64KB如何算?

个人理解和困惑:
2^16种组合的单位为什么不是字(word)?16位不是说CPU一次处理16个二进制代码,而书上说字是计算机进行数据处理时,一次存取加工和传送的数据长度。

新手·ing 发表于 2017-11-4 11:35:58

http://blog.sina.com.cn/s/blog_5feb44a60102vwkx.html
http://www.so.com/link?m=aPX0LXLp0wsFdt6wHYqcr2PXDXFBe8EopSEjuz6iZNYdKcXk4JF9H%2BjLPj4TgXE8pUD%2BXxqzGyxMrDQKBs9Lix4FruHVfCF75dVf2N9zvsNQ6Xv%2F7R1h2TKHArC85TSRWJjix859jNnjG9VlPvJ%2FSfGt2iQy5Qo9A%2BldAs5%2Bg2l0Tw1mqL00rHVcdsE%2Be1TG6DSTjklPdTl8nV%2BJb8qwsiARuB%2FWzTuei8RsFSSywfU9e6DSwa%2BXds0QtBnjpxpS4ippgh5a2dVGP6LVD0qiPxe4KVk6e2RpkI%2B%2FO%2FnquUrE1q7LXGaOMs6sZC67g5aiVc2Y%2FH3b7ya2aEkvSROWYiwwW%2FDQOXyC8n2%2FjvYxGyh49XXq%2Bpq1D%2BggK0ZPgsEJenvELAklJspu2ftNfb%2BK7lzUWw5LcpqH1qkp5XVk%2FKft6xCkFQSN4Easr2dZwII6ME6IRvMkTPh8SR0KjIHqKCR869Glvybg14ljkN1G3%2F84CNQk8axu0pVOMpMylbvg3K6LcB%2FPSq9ZgJovRnMBZPM0mGAI0WFP2

兰陵月 发表于 2017-11-4 12:43:43

本帖最后由 兰陵月 于 2017-11-4 13:25 编辑

8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力只有64KB。这个64KB如何算?

个人理解和困惑:
2^16种组合的单位为什么是不是字(word)?16位不是说CPU一次处理16个二进制代码,而书上说字是计算机进行数据处理时,一次存取加工和传送的数据长度。

2^16种:是指它能够处理的最多位数,虽然8086的地址数据线是20位,但是它的寄存器只有16位,所以最多处理就是16位(当然要除开地址总线20位那个处理情况)
用十六进制来表示这2^16种数据实际就是0000~FFFF。FFFF等于十进制65535,0~65535那总共就是65536。处于1024,等于64KB。
当超过FFFF,变成10000的时候,因为寄存器只有16位,所以它只取了低16位,舍弃多余的高位,实际上寄存器的内容又变成了0000。当你学习到跳转指令的时候,你就会发现“jmp 标号”编译后的有趣现象,就会对这里进行应正。

虽然用20位地址总线寻址时,可以从00000一直寻到FFFFF,寻址能力表现为1MB。但是它并不是一个20位长度直接寻址的(这句话的意思在物理上并没有20位的地址对应,我写5个0或者5个F,那是逻辑上的表达),而是用两个寄存器以某种方式组合起来寻址的,其本质处理还是16位处理方式。

为什么是不是字(word)?:这里第一个“是”应该去掉吧。
进行数据处理时,一次存取加工和传送的数据长度。一次存取和传送的数据可以是16位,也可以是8位。比如AX、BX、CX、DX分别可以分成AH、AL、BH、BL、CH、CL、DH、DL。这是每个寄存器是8位。一次处理的数据长度就是8位。

可能说多你越看越糊涂{:10_266:} {:10_266:}

苏丛 发表于 2017-11-4 13:58:16

本帖最后由 苏丛 于 2017-11-4 14:19 编辑

新手·ing 发表于 2017-11-4 11:35
http://blog.sina.com.cn/s/blog_5feb44a60102vwkx.html
http://www.so.com/link?m=aPX0LXLp0wsFdt6wHYqcr ...

谢谢你的回答{:10_256:}

苏丛 发表于 2017-11-4 14:19:07

兰陵月 发表于 2017-11-4 12:43
8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力只有64KB。这个64KB如何算?

个人理解和 ...

2^16种组合为什么就是2^16Byte?一种组合不是有16个二进制代码吗,那一种组合不就是2Byte吗

新手·ing 发表于 2017-11-4 15:09:44

苏丛 发表于 2017-11-4 13:58
谢谢你的回答

{:10_323:}满意不

兰陵月 发表于 2017-11-4 15:24:57

苏丛 发表于 2017-11-4 14:19
2^16种组合为什么就是2^16Byte?一种组合不是有16个二进制代码吗,那一种组合不就是2Byte吗

2^16种组合为什么就是2^16Byte?一种组合不是有16个二进制代码吗,那一种组合不就是2Byte吗

关于这个问题我建议读一读这本书《编码—隐匿在计算机软硬件背后的语言》(Charles Petzold著,左飞 薛佟佟译)

我还是似是而非简单说说吧:

一种组合不是有16个二进制代码吗,那一种组合不就是2Byte吗?
应该这么理解:16位处理器一次处理16位数据,每一位数据要不是0,要不是1,以某种组合为例,不管它的值是多少,它的长度就是两个字节,因为反正它是16位的。

2^16种组合为什么就是2^16Byte?
根据数学的知识,16个位,每个位要么是0要么是1,那产生的组合数是不是就是2^16种,即65536种组合。

在这65536种组合中,值最小的是0,值最大的是1111 1111 1111 1111。

假如有65536个门牌号摆在一条直路上,由近到远从0号门牌一直到第65535号门牌。

你从第0号门牌开始往远处走,一直到第65535号门牌,你算一下,是不是走了65536个门牌号。

这就相当于计算机寻址一样,它愿意的话,它可以用这个16位数表示65536个数字。

有一天,8086处理器闲得无聊,它从0开始表示起,每次增加1,一直到65535.

而65536除以1024是不是等于64KB,这就是寻址能力64KB的意思。



兰陵月 发表于 2017-11-4 15:25:18

建议你看看这个帖子~~~~~~

http://bbs.fishc.com/thread-81399-1-1.html

兰陵月 发表于 2017-11-4 23:52:09

回答这个帖子之后,我突然的经验涨了一节,貌似对底层和汇编的理解快升级了,晕,好久没这种感觉了,豁然贯通的感觉。

苏丛 发表于 2017-11-5 09:57:00

兰陵月 发表于 2017-11-4 23:52
回答这个帖子之后,我突然的经验涨了一节,貌似对底层和汇编的理解快升级了,晕,好久没这种感觉了,豁然贯 ...

我还是没懂诶,是看《code》后才懂的吗
页: [1]
查看完整版本: 求教 关于8086CPU的简单问题