首页
社区
课程
招聘
[旧帖] [求助]关于mov ax,data 0.00雪花
发表于: 2012-1-18 06:08 2070

[旧帖] [求助]关于mov ax,data 0.00雪花

2012-1-18 06:08
2070
写了这么多次的mov ax,data,今天却发现了一个让我苦恼的问题,希望有人来帮我解决一下。
mov ax,data中的data是个段地址,但在程序未执行前我们并不知道系统给我们分配的内存块在哪,data这个值是多少也不知道,我想问的是在编绎阶段mov ax,data是怎样通过编绎的,此时data不是应该是一个不存在的值吗?

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 159
活跃值: (80)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
段地址一般首先存在于段寄存器中,8086共有四个段寄存器,在编程开始阶段,数据段寄存器,代码段寄存器必须首先进行人为初始化,否则程序无法运行,堆栈寄存器可以人为或者是程序开始时系统指定,附加段寄存器其实就是个变量,贮存其它段寄存器的内容,这样看来,所有的段寄存器的值应该是很确定的
2012-1-18 08:44
0
雪    币: 34
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这需要看看编译器是如何编译的知识吧,还有编译原理的东西吧。
2012-1-18 09:11
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
按c++工程的理解,data的值是随机的,虽然值是不确定的,但是只要已经声明了这个变量,编译器应该就可以顺利进行编译,至于是否会在运行中出错,那就不是编译器的职责了。。。
2012-1-18 10:20
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
会被纳入重定位表里.
DOS会根据重定位表去修正

你可以看DOS EXE文件头相关资资讯
2012-1-18 11:09
0
雪    币: 639
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习了,4个段寄存器,必须要确定代码段和数据段地址
cs为代码段,DS为数据段,SS为堆栈段,ES为附加段
2012-1-18 14:37
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
菜鸟理解的是 四个段寄存器在指令执行前,系统都赋予初始值了,只是这个值是随机的,取决于CPU当前执行到的状态。

初学汇编,若这种思路有错,恳请高手斧正
2012-1-22 08:56
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
8
会根据PE头里定义的映像基质计算出一个地址。在加载时再根据重定位计算出加载后的地址
2012-1-22 10:05
0
游客
登录 | 注册 方可回帖
返回
//