硬盘上有个程序,运行时要装进内存,但程序代码被装入内存的什么位置,是由什么决定的?

来源:百度知道 编辑:UC知道 时间:2024/06/25 04:44:49
还有,8086汇编的数据/代码段有啥用,能建立多少个,能否通俗的概述一下。学了半天汇编,到头来来怎么一回事都不懂。。。。。。
51单片机到明白,程序放在rom里,cpu从rom里读取,执行,也没啥段的概念。80x86内存到底分配使用,是在迷糊。。。。

基本咋回事不条理,具体也不大会问,就请高手看着给我概述一下吧。满意的话再加100分。

谢拉!!!!
=======既然内存分配是操作系统完成的,那么汇编时还要分什么数据段,代码段什么的干嘛,还要cs,ds干嘛??==========

问题没那么复杂,楼主是希望得到原理层次上的回答吧。

1、硬盘程序装入内存,其位置由操作系统决定,也就是写操作系统程序的人,来决定。

2、8086数据段存数据,代码段存代码,以示类型的分别。
比如,同样00010001,计算机怎么知道是数据11H,还是汇编指令的机器码呢?

3、“51单片机到明白,程序放在rom里,cpu从rom里读取,执行”。这只是程序代码的情况,其实里面也分数据段、代码段。

4、“有了操作系统,还要汇编中的数据段、代码段,CS、DS干什么?”
因为汇编是转成机器码以后直接执行的,这些是让你直接指挥机器干活的工具啊。

5、你用C/C++等语言的话,则是由编译器来把它们转换成汇编程序。

程序代码被装入内存的什么位置,是由操作系统决定,没有操作系统的电脑是不能运行软件的。操作系统拥有管理内存的能力。

一个程序在系统内存中是这样表示的:
/------------------\ 内存低地址
| |
| 文本 |
| |
|------------------|
| (已初始化) |
| 数据 |
| (未初始化) |
|------------------|
| |
| 栈 |
| |
\------------------/ 内存高地址

文本区域是由程序确定的, 包括代码(指令)和只读数据. 该区域相当于可执行文件的文本段. 这个区域通常被标记为只读, 任何对其写入的操作都会导致段错误。

数据区域包含了已初始化和未初始化的数据. 静态变量储存在这个区域中. 数据区域对应可执行文件中的data-bss段. 它的大小可以用系统调用来改变.如果bss