鱼C论坛

 找回密码
 立即注册
查看: 2953|回复: 9

[已解决]求教 关于8086CPU的简单问题

[复制链接]
发表于 2017-11-4 11:31:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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



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

使用道具 举报

发表于 2017-11-4 11:35:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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位。


可能说多你越看越糊涂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 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 ...


谢谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

个人理解和 ...

2^16种组合为什么就是2^16Byte?一种组合不是有16个二进制代码吗,那一种组合不就是2Byte吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 15:09:44 | 显示全部楼层

满意不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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的意思。



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

使用道具 举报

发表于 2017-11-4 15:25:18 | 显示全部楼层
建议你看看这个帖子~~~~~~

http://bbs.fishc.com/thread-81399-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 23:52:09 From FishC Mobile | 显示全部楼层
回答这个帖子之后,我突然的经验涨了一节,貌似对底层和汇编的理解快升级了,晕,好久没这种感觉了,豁然贯通的感觉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 09:57:00 From FishC Mobile | 显示全部楼层
兰陵月 发表于 2017-11-4 23:52
回答这个帖子之后,我突然的经验涨了一节,貌似对底层和汇编的理解快升级了,晕,好久没这种感觉了,豁然贯 ...

我还是没懂诶,是看《code》后才懂的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 23:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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