8086为什么逻辑段不能超过64k?

zhangweiJQK 2013-03-20 10:10:41
在8086中,为什么存储空间的逻辑段不能超过64k呢?
如果某段代码或者数据超过了64k该怎么办呢?
...全文
2093 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
迪加雷克斯 2014-12-23
  • 打赏
  • 举报
回复
引用 10 楼 guyouzhong 的回复:
(首先理解一下段寄存器,即存放一个段的开始地址),说明段空间的初始地址是确定的了,那么一个段的大小是由偏移地址的范围决定的,偏移地址可以从0000h~FFFFh,即64KB。
那是不是就可以这样理解,段其实就是偏移地址。
朔野西骑 2014-05-29
  • 打赏
  • 举报
回复
(首先理解一下段寄存器,即存放一个段的开始地址),说明段空间的初始地址是确定的了,那么一个段的大小是由偏移地址的范围决定的,偏移地址可以从0000h~FFFFh,即64KB。
whoozit 2013-03-22
  • 打赏
  • 举报
回复 1
8086是16位机,地址也只能用2个16位的合成:一个存放段地址,一个存放偏移地址。 偏移地址当然也只能是16位的,最多能表达2的16次方个不同值,也就是说最多能寻址2的16次方个地址,即64K。 要想寻址超过64K,就只能改变段地址了,那就不是一个段了。 这么说明白没?
Jeset 2013-03-21
  • 打赏
  • 举报
回复
8086是16位CPU,也就是说能所有寄存器都是16位,包括IP,2^16算出来就是64KB。如果超出了64KB的范围那么CPU就不能寻址到了
申祷无 2013-03-21
  • 打赏
  • 举报
回复 1
设有物理地址空间00000H~FFFFFH。若要寻址00000H~0FFFFH的地址空间,可将段地址设置为0,偏移地址在0000H~FFFFH变化。此时若段地址不变化,则在只通过变化偏移地址得到的物理地址空间可以看做一个逻辑段。 超过64K除了直接定义到不同的段中之外,也可以采取将可执行文件分成多个文件的方法,在程序运行过程中按需将不同的代码段加载到内存中,类似动态链接库,只不过很多东西都要自己实现。
zara 2013-03-20
  • 打赏
  • 举报
回复
这里完整的地址是 段址:偏址,若要表示范围尽可能地大,偏址就从 0000 开始了,这样,段址就是指定了起点位置了。
zhangweiJQK 2013-03-20
  • 打赏
  • 举报
回复
引用 3 楼 zhangweiJQK 的回复:
引用 2 楼 zara 的回复:用来寻址的 ip 和 si/di/bp/sp 之类的都是 16 位的,所以段就有 64KB 的限制了。 超过了 64KB 就要分成多个小于 64KB 的段。代码段间采用 jmp far 或 call far 来进行跳转;数据段的访问,就要先置适当的段寄存器内容以正确指向目的数据段了。 不好意思 我还是有些疑惑:“寻址的 ip 和 s……
我的意思就和指针有些类似:比方说有一个16位的指针,你并能断定这个指针指向的数据就是小于16位的吧??
zhangweiJQK 2013-03-20
  • 打赏
  • 举报
回复
引用 2 楼 zara 的回复:
用来寻址的 ip 和 si/di/bp/sp 之类的都是 16 位的,所以段就有 64KB 的限制了。 超过了 64KB 就要分成多个小于 64KB 的段。代码段间采用 jmp far 或 call far 来进行跳转;数据段的访问,就要先置适当的段寄存器内容以正确指向目的数据段了。
不好意思 我还是有些疑惑:“寻址的 ip 和 si/di/bp/sp 之类的都是 16 位的”我觉得这句话只能说明某个逻辑段的起点地址不能超过16位 并不能说明它的大小不能超过16位?换句话说:一个代表起点位置 一个代表大小 这两个应该不是一个概念吧?? LZ刚学习微机原理 请各位指导。。
zara 2013-03-20
  • 打赏
  • 举报
回复
用来寻址的 ip 和 si/di/bp/sp 之类的都是 16 位的,所以段就有 64KB 的限制了。 超过了 64KB 就要分成多个小于 64KB 的段。代码段间采用 jmp far 或 call far 来进行跳转;数据段的访问,就要先置适当的段寄存器内容以正确指向目的数据段了。
zhangweiJQK 2013-03-20
  • 打赏
  • 举报
回复
是因为数据总线只有16位的原因吗??
gsy999 2013-03-20
  • 打赏
  • 举报
回复
引用 4 楼 zhangweiJQK 的回复:
引用 3 楼 zhangweiJQK 的回复:引用 2 楼 zara 的回复:用来寻址的 ip 和 si/di/bp/sp 之类的都是 16 位的,所以段就有 64KB 的限制了。 超过了 64KB 就要分成多个小于 64KB 的段。代码段间采用 jmp far 或 call far 来进行跳转;数据段的访问,就要先置适当的段寄存器内容以正确指向目的数据段了。 不……
你要寻址,逻辑地址放在哪里?放在IP指针里,IP指针16位,超过64K的内存地址编码怎么放进去?

21,493

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧