鱼C论坛

 找回密码
 立即注册
查看: 2717|回复: 7

[已解决]代码段偏移地址的问题

[复制链接]
发表于 2017-12-7 22:49:17 | 显示全部楼层 |阅读模式

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

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

x

这么理解

这么理解

因为在代码段的最开始所以偏移地址为0,这个怎么理解?
是不是说所有的代码段开始处偏移地址都是0开始吗,物理内存的计算方式是ds*16+ip
如果说一个物理地址是11111这样的话ip不可能等于0呀,是不是说代码段不能以这个地址开始
那么是不是说系统给每个段分配内存都是从11100或11110这样的内存处开始的吗?

最佳答案
2017-12-8 09:54:20
本帖最后由 兰陵月 于 2017-12-8 09:58 编辑

实模式下(就是王爽那本书全书学习所在环境):
1、程序中的偏移地址就是编译之后的偏移地址,偏移地址只是一个相对于段首位置的偏移量,所以当它被加载到物理内存之后,该偏移量也是不会发生变化的。
2、按MASM编译器来说,比如说一个段,它叫codeseg,那它的段的形式如下:
codeseg segment
   mov ax,0  ;本段第1行
。。。。
codeseg ends
在上面的段的结构中,mov ax,0在codeseg段中的偏移地址就0x00
如果你象书上的一样,在段内的第一行,定义数据,那最开始的那个数据的偏移地址就是0x00
3、段地址都是能够被16整除的。不能被16整除的就不能作为段地址。
4、你说的代码段的开始处是不是指运行起始处。运行起始处不一定是偏移地址0x00

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

使用道具 举报

发表于 2017-12-7 23:29:34 | 显示全部楼层
有可能要不我们写些代码试试吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-7 23:52:54 From FishC Mobile | 显示全部楼层
qq1242009750 发表于 2017-12-7 23:29
有可能要不我们写些代码试试吧

所以这里不理解呀,为啥要这样做,如果段足够多是不是就没地址给它分配了。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-8 00:08:22 From FishC Mobile | 显示全部楼层
qq1242009750 发表于 2017-12-7 23:29
有可能要不我们写些代码试试吧

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

使用道具 举报

发表于 2017-12-8 09:54:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 兰陵月 于 2017-12-8 09:58 编辑

实模式下(就是王爽那本书全书学习所在环境):
1、程序中的偏移地址就是编译之后的偏移地址,偏移地址只是一个相对于段首位置的偏移量,所以当它被加载到物理内存之后,该偏移量也是不会发生变化的。
2、按MASM编译器来说,比如说一个段,它叫codeseg,那它的段的形式如下:
codeseg segment
   mov ax,0  ;本段第1行
。。。。
codeseg ends
在上面的段的结构中,mov ax,0在codeseg段中的偏移地址就0x00
如果你象书上的一样,在段内的第一行,定义数据,那最开始的那个数据的偏移地址就是0x00
3、段地址都是能够被16整除的。不能被16整除的就不能作为段地址。
4、你说的代码段的开始处是不是指运行起始处。运行起始处不一定是偏移地址0x00

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

使用道具 举报

 楼主| 发表于 2017-12-8 13:59:01 From FishC Mobile | 显示全部楼层
兰陵月 发表于 2017-12-8 09:54
实模式下(就是王爽那本书全书学习所在环境):
1、程序中的偏移地址就是编译之后的偏移地址,偏移地址只 ...

我知道偏移地址是段首位置的偏移量,我想知道的是段首位置在内存中实际的地址是怎么样的,书上说实际的物理地址=段地址*16+偏移地址得到那书上说段首位置的偏移量是0,那不是说实际的物理内存=段地址*16+0那是不是说每个段首位置的实际物理地址都能被16整除?反过来说不能被16整除的都不能当分配给段首地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-8 18:06:21 | 显示全部楼层
wjp 发表于 2017-12-8 13:59
我知道偏移地址是段首位置的偏移量,我想知道的是段首位置在内存中实际的地址是怎么样的,书上说实际的物 ...

是的,16位实模式下就是这样的,段地址必须能被16整除,否则不能做段地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-9 10:34:04 From FishC Mobile | 显示全部楼层
兰陵月 发表于 2017-12-8 18:06
是的,16位实模式下就是这样的,段地址必须能被16整除,否则不能做段地址。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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