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

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

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

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

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

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

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

数据区域包含了已初始化和未初始化的数据. 静态变量储存在这个区域中. 数据区域对应可执行文件中的data-bss段. 它的大小可以用系统调用来改变.如果bss数据的扩展或用户栈把可用内存消耗光了, 进程就会被阻塞住, 等待有了一块更大的内存空间之后再运行. 新内存加入到数据和栈段的中间.

栈是一个在计算机科学中经常使用的抽象数据类型. 栈中的物体具有一个特性:最后一个放入栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列.调用一个C函数就在这里发生一大堆的操作,如传递参数。。。。

这些和单片机有区别,很难简单说清楚,可以写一本书的了。

你学了<<操作系统原理>>,同时学习一下windows的编程就懂了。

注意了,程序在很多现代操作系统里都只能操作逻辑地址,不能操作物理地址,如A程序的0xFF地址和B程序的0xFF地址是不同的,大家都影射到不同的物理地址。这是为了防止程序错误地影响其他程序。

也就是将数据错误地写入其他程序的重要区域,从而使其他程序结束在现在的多数操作系统是不会发生。

要资料就给我发邮件,我给你发一份。Fixend@163.com
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-11-13
=======既然内存分配是操作系统完成的,那么汇编时还要分什么数据段,代码段什么的干嘛,还要cs,ds干嘛??==========

内存中可存放数值的储存位置为地址。8086地址总线有20位,所以CPU拥有达1M的寻址空间,这也是DOS的有效控制范围,早期CPU的寄存器都是16位的,仅限于处理16位数据,即只有0到64K,如果内存不大于64K, 问题就简单了。但是计算机的发展很快就突破了64K内存。为了访问大于64K的内存,出现了段的概念,即将内存分为大小为64K的段。所以,必须用分段寻址才能控制整个内存地址。完整的20位地址可分成两部份:1.段基址(Segment):16位二进制数后面加上四个二进制0,即一个16进制0,变成20位二进制数,可设定1M中任何一个64K段,通常记做16位二进制数;2.偏移量(Offset):直接使用16位二进制数,指向段基址中的任何一个地址。如:2222(段基址):3333(偏移量),其实际的20位地址值为:25553。
在16位编程中,段是必不可少的。幸运的是,这个问题已经在32位Windows(95及以上)中得到解决。32位编程可以不用考虑段的概念了,可以直接寻址4GB。
第2个回答  2006-11-21
问题没那么复杂,楼主是希望得到原理层次上的回答吧。

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

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

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

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

5、你用C/C++等语言的话,则是由编译器来把它们转换成汇编程序。本回答被提问者采纳
第3个回答  2006-11-13
可能是存储管理中有用
1.早期的操作系统只支持单进程 所以几乎所有的内存都分配给这个进程.
2.操作系统支持多道程序设计时,最先的存储管理方法是静态地将内存分割成几块.例如1000K的内存
分为 100K 200K 300K 400K
当一个进程需要250K的内寸时,分配300K的给它
这种管理方法不是很有效,因为不能刚刚好,会有浪费
3.动态分配
事先并不分割,操作系统只是维护一张表,用于标记未用的区域
(起始地址,长度)
当分配或释放时,修改这张表的内容
4.分页系统,操作系统将内存分为大小相同的若干块(比如4K),是否已用只需用一个BitSet就能记录.注意到123的管理,进程内存空间是连续的,而这里,可以不连续,将进程的需要的空间划分成几页,就向操作系统申请多少.再完成映射(应该是在载入的时候).
5.分段系统, 同样将一个进程需要的内存空间划分,不同的是,大小不一定相同,分段系统能更好地支持进程间的存储空间共享和动态申请.

还有内存的分配并不是直接由CPU决定的,主要是操作系统,当然CPU中的某些寄存器用来辅助进行存储管理.就象楼上说的逻辑地址而不是实际地址的方法,来避免进程之间的干扰(同一内存地址被两个进程访问).

还忘记说了分段系统能更好的支持虚拟存储,将暂时不用的内存中的数据复制到硬盘,需要的时候再复制回来.段就是这样的复制的最小单位.

把存储在硬盘上的程序传送到指定的内存区域
1. 程序的加载过程:假设我们在Windows操作系统中双击一个图标来启动一个应用程序。Windows操作系统首先会查看硬盘上该应用程序的位置,然后读取应用程序的代码和数据。2. 加载器的作用:操作系统的加载器负责将读取到的代码和数据放入内存中。这个过程涉及到内存管理,包括分配内存空间,设置内存权限等。加载...

计算机要运行存放在磁盘上的程序时,应先把程序文件调入到
计算机要运行存放磁盘程序,应先程序文件调入RAM ,也就是内存。程序:程序是为求解某个特定问题而设计的指令序列。程序中的每条指令规定机器完成一组基本操作。如果把计算机完成一次任务的过程比作乐队的一次演奏。那么控制器就好比是一位指挥,计算机的其它功能部件就好比是各种乐器与演员,而程序就好像是乐...

电脑运行一个程序时是把程序所有的数据都从硬盘调到内存中吗?
不是都放在内存里,只是把主程序运行所需要的数据放入内存,在他需要其他数据的时候,它会从硬盘 或者硬盘缓存 或者内存缓冲区读取数据,以供程序运行。

为什么编好的程序和原始数据得事先存到存储器中,cpu才能够从地址当中加...
2、然后你执行这个可执行文件,这个可执行文件里面的代码段、数据段和BSS段会被加载到PC或者某设备的内存中。代码段里放的就是指令,所以内存里的指令是通过执行某可执行文件加载到内存里的。 3、CPU会从代码段的起始地址,调用第一条指令,开始执行。如果没有遇到跳转指令就顺序执行:假设代码段起始地...

运行一个程序文件时,它被装入到什么中?
运行一个程序文件时,它被装入到随机存取存储器(英语:Random Access Memory,缩写:RAM)中。RAM是与CPU直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(...

电脑运行一个程序时是把程序所有的数据都从硬盘调到内存中吗?
不是都放在内存里,只是把主程序运行所需要的数据放入内存,在他需要其他数据的时候,它会从硬盘 或者硬盘缓存 或者内存缓冲区读取数据,以供程序运行。

电脑的运行内存是什么决定的,可以换吗?
内存条决定的,可以更换。内存是电脑中的主要部件。计算机使用的程序一般都是安装在硬盘,但仅此是不能使用其功能的,必须把它们调入内存中运行,才能真正使用其功能,计算机输入一段文字,或玩一个游戏,其实都是在内存中进行的。通常计算机把要永久保存的、大量的数据存储在外存上,而把一些临时的或少量...

计算机操作系统知识点
内存用于容纳操作系统和各种用户进程,是可以被CPU和I\/O设备所共同访问的数据仓库。计算机的所有程序运行时都要调入内存。 内存管理的主要工作是:为每个用户进程合理地分配内存,以保证各个进程之间在存储区不发生冲突;当内存不足时,如何把内存和外存结合起来,给用户提供一个比实际内存大得多的虚拟内存,使得程序能顺利...

如果要编辑硬盘上的文件,数据首先要加载到哪里
电脑主板上也改用内存插槽。这样,把内存难以安装和更换的问题彻底解决了。在80286主板发布之前,内存没有被世人重视。这个时候的内存直接固化在主板上,容量只有64~256KB。对于当时PC所运行的工作程序来说,这种内存的性能以及容量足以满足当时软件程序的处理需要。

求高手,电脑程序运行是是先从硬盘加读取到内存吗?
是的,打开文件的过程要先从硬盘加载数据到内存,再供程序调用.固态硬盘固然快\/但是也要4KB对齐.内存的大小速度也会影响载入的速度.大内存在大也不可能放下整个游戏,何况游戏也要内存来运行.定期整理一下硬盘也许会好一之.

相似回答