鱼C论坛

 找回密码
 立即注册
查看: 3241|回复: 8

段地址、偏移地址跟物理地址的问题,本人已经入死区,求助

[复制链接]
发表于 2012-12-18 21:46:42 | 显示全部楼层 |阅读模式

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

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

x
我们都知道段地址x16+偏移地址=物理地址,那么“段地址:偏移地址” 这样的表达法,如 0 :200 这个表达法中在一个寄存器的存储空间(如ax寄存器)中指的是哪一段?如上面的 0 :200 可以以20 :0 这样表达的物理地址,那么这个物理地址最大是多少?如0:200 物理地址在储存数据时是不是以偏移地址200存储单元开始存储?那它什么时候结束,是不是偏移地址到ffff就结束了?如果是20:0这样的偏移地址,在存储数据时是以偏移地址o 开始,它到最大的时候是ffff,那么假若把段地址与偏移地址当成数据来看,段地址比偏移地址大的存储方式与段地址比偏移地址小的方式存储有什么区别?还是它们没有区别!如果把他们换成物理地址(如00200)这样的话,在我看来没有区别!我越来越矛盾了!:'(:'(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-19 10:04:33 | 显示全部楼层
楼上可以参考一下中山大学的视频教程,里面关于寻址方式的内容讲的不错,你看看估计就能解除你的疑惑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-19 19:04:40 | 显示全部楼层
        怎么说呢,8086地址线有20根,所以可访问的地址是2^20也就是1M,但是寄存器却只有16位,可访问的地址2^16也就是64k。一个16位的地址是访问不到所有空间的。所以呢,我们将20位的地址分成两份,也就是所谓的 段地址:偏移地址。
        按照上述方式如何得到20位的地址呢?我们所采取的方法是:计算的时候先把段地址(16位)左移4位(这样就有了20位),然后加上偏移地址。
         比如说:0x0010 : 0x0200 所访问的地址为0x00100+0x0200也就是0x00300。
         你也许会想,若以 段地址: 偏移地址的形式访问空间,有的地址岂不是会超出1M的空间?
         比如0xffff:0xffff = 0xffff0+0xffff = 0x10ffef这就超出1M范围了。
实际上当程序员给出超过1M(100000H-10FFEFH)的地址时,使用8086cpu的系统并不认为其访问越界而产生异常,而是自动从0开始计算,也就是说系统计算实际地址的时候是按照对1M求模的方式进行的,比如地址0x10ffef会转化为0xffef。
       好好学习吧,学好汇编好处很多的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-19 19:15:18 | 显示全部楼层
0:200与20:0所指的存储单元确实是一个,不要太纠结了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-20 20:46:05 | 显示全部楼层
这其实就像那个图。。。学校。图书馆。便利店。小明家。。你在学校要到 小明家。。可以说是:先到便利店。在到小明家。。也可以说是先到图书馆。经过便利店在到小明家。。。目的地是一样的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-24 18:05:22 | 显示全部楼层
路过看看呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-25 01:10:31 | 显示全部楼层
{:1_1:}看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-25 08:49:06 | 显示全部楼层
当你用DEBUG 查看内存的时候  0000:0000  这个段中  从地一个00  开始  从左向右  数

0000:0000   00 00 00 00 00 00 00 ~~00 00
所对应的位号   0   1   2  3   4   5   6  ~~  E   F

当进入下一段的时候

0000:0010   00 00 00 00 00 00 00 ~~ 00 00
                       10  11

当你取值的时候  你想去  4位的值   你可也   0000:0004(0000段 偏移地址为4)

当你想取 10位的值的时候              你可以  0000:0010(0000段 偏移地址为10)  

但是 他同时  又可以理解为      0010:0000  (0010段 偏移地址为0)

我建议你去DEBUG上  好好体会一下

我开始的时候和你一样   但反复实践几次   就懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-25 10:08:35 | 显示全部楼层
地址对于cpu来说,如何表达都无所谓,结果是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 16:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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