siren0413 发表于 2012-1-25 10:15:36

关于段地址大小的问题

本人初学者,对段地址的原理还不是很明白。
现在有个疑问:

像cs,ds,ss 这些段地址寄存器都是16位的 ,那么比如像CS是通过地址总线去索引机器内存中的地址的。但是cs总共就只能定位2的16次方=65536个字节的地址。 问题就是如果内存的大小超过64KB的时候怎么办?

小马过河 发表于 2012-1-25 10:15:37


超出就应该报错吧


8086 是经过 地址+偏移 生成20位地址总线内存大小可支持1MB

Push 发表于 2012-1-25 13:50:54

使用es来附加

for 发表于 2012-1-26 19:55:10

比如你只能用0--9这10个数字表示0--99,那么我可以将0--99分成10段,每段用0--9表示,分别是0段1,2,3,4,5,6,7,8,9段,那么每一段有0,1,2,3,4,5,6,7,8,9,这10个数字,共10个
空间,
那么第10号(从0表示第一个)内存可以写成1:0,也就是第1段,第0个,注意内存的编号是从0开始的,也就是第一号内存写的时候用0表示,
自己用纸划一划就清楚了

事事如意 发表于 2012-1-27 19:37:47

哈哈,不会的兄弟,你说的是如果“内存超过64KB”怎么办?有一样东西你没有注意到,像cs,ds,ss这些段寄存器课程的讲解是在原来内存为64KB的DOS系统的基础上进行讲课的,小甲鱼老师也说过,在以前的DOS系统编程时,有64KB内存的限制,但是一切事情都是在发展当中的,像你说的内存超过64kb,现在这个时代已经给解决了,比如说现在的内存为1G,真正的段存器采用ECS ,EDS,ESS,而原来的cs ,ds, ss 在现在来说已经不是原来意义上的段寄存器了,而是现在作为一个索引而已。这个问题你问的很好,你已经超前发挥了,哈哈,说真的,你挺厉害的。关于这个问题的具体内容,你可以去看看小甲鱼老师的win32编程,你就会明白了。哈哈,加油吧,你先把目前的汇编给学完,然后再看win32会简单很多,像现在这个问题,在将来的学习中,你自然就会明白了。哈哈~~

阳光ヾ… 发表于 2012-1-29 10:34:21

我个人感觉应该可能是再多定义几个段用什么指令跳过去吧比如JMP什么的,不知道对不对呀{:1_1:}

张国祥 发表于 2012-1-31 02:00:51

段地址*16+偏移地址可以利用1M左右内存。因为这个限制,8086将无法寻到更多内存

e马先森 发表于 2017-2-17 15:16:49

学习学习
页: [1]
查看完整版本: 关于段地址大小的问题