首页
社区
课程
招聘
[旧帖] [求助]纠结了一个月的问题,大神啊 0.00雪花
发表于: 2012-2-19 10:14 1471

[旧帖] [求助]纠结了一个月的问题,大神啊 0.00雪花

2012-2-19 10:14
1471
定义一个段时候然后要把这个段地址赋值给一个段寄存器,比如有个abc的段mov ax,abc,然后mov es,ax 可是每次运行程序abc段地址在内存位置都可能改变,那么mov ax,abc这条指令对应的机器码也会变?可是机器码应该是编译连接后就不变的啊。因为王爽那本书有说近转移用位移表示可以避免代码可能在内存中浮动而导致错误,为什么不能跟段名用法一样,比如jmp short s  s只接用偏移表示。为什么就段名可以先运行后在确定段值然后赋给其他

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
难道是因为段基址有专门的寄存器?
2012-2-19 11:35
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主你说的是实模式下的还是保护模式下的。。

保护模式下,段的基址由描述符来决定,可以动态调整。。

不知道你说的段的地址每次不同是什么情况。就我的知识来说,DOS里面应该不存在这样的机制。。

插一句,如果是实模式寻址的话,abc的地址在变是不可能的,因为abc的值是你自己赋值的。。
2012-2-19 18:17
0
雪    币: 31
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
楼主说的是实模式的,我认为这就是dos头和psp的作用了。Link3.6将obj连接成exe并加上大小为512字节的dos头,里面有个段的信息以及重定位信息。在执行时dos根据Dos头为exe创建一个256字节的Psp,Mov ax,data这里的data段就是从psp找到的。我认为是这样。
2012-2-19 20:02
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
实模式的。dos载入程序时放在内存哪里是不一定的,所以一个段的地址也是不一定的。编译时要取段值怎么办
2012-2-19 21:33
0
游客
登录 | 注册 方可回帖
返回
//