永发信息网

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

答案:4  悬赏:20  手机版
解决时间 2021-03-17 12:29
  • 提问者网友:黑米和小志
  • 2021-03-17 09:21
还有,8086汇编的数据/代码段有啥用,能建立多少个,能否通俗的概述一下。学了半天汇编,到头来来怎么一回事都不懂。。。。。。
51单片机到明白,程序放在rom里,cpu从rom里读取,执行,也没啥段的概念。80x86内存到底分配使用,是在迷糊。。。。

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

谢拉!!!!

=======既然内存分配是操作系统完成的,那么汇编时还要分什么数据段,代码段什么的干嘛,还要cs,ds干嘛??==========
最佳答案
  • 五星知识达人网友:纵马山川剑自提
  • 2021-03-17 10:44
问题没那么复杂,楼主是希望得到原理层次上的回答吧。

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

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

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

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

5、你用C/C++等语言的话,则是由编译器来把它们转换成汇编程序。
全部回答
  • 1楼网友:枭雄戏美人
  • 2021-03-17 13:53
=======既然内存分配是操作系统完成的,那么汇编时还要分什么数据段,代码段什么的干嘛,还要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楼网友:妄饮晩冬酒
  • 2021-03-17 12:38
b内存
  • 3楼网友:第幾種人
  • 2021-03-17 11:24
程序代码被装入内存的什么位置,是由操作系统决定,没有操作系统的电脑是不能运行软件的。操作系统拥有管理内存的能力。 一个程序在系统内存中是这样表示的: /------------------\ 内存低地址 | | | 文本 | | | |------------------| | (已初始化) | | 数据 | | (未初始化) | |------------------| | | | 栈 | | | \------------------/ 内存高地址 文本区域是由程序确定的, 包括代码(指令)和只读数据. 该区域相当于可执行文件的文本段. 这个区域通常被标记为只读, 任何对其写入的操作都会导致段错误。 数据区域包含了已初始化和未初始化的数据. 静态变量储存在这个区域中. 数据区域对应可执行文件中的data-bss段. 它的大小可以用系统调用来改变.如果bss数据的扩展或用户栈把可用内存消耗光了, 进程就会被阻塞住, 等待有了一块更大的内存空间之后再运行. 新内存加入到数据和栈段的中间. 栈是一个在计算机科学中经常使用的抽象数据类型. 栈中的物体具有一个特性:最后一个放入栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列.调用一个C函数就在这里发生一大堆的操作,如传递参数。。。。 这些和单片机有区别,很难简单说清楚,可以写一本书的了。 你学了<<操作系统原理>>,同时学习一下windows的编程就懂了。 注意了,程序在很多现代操作系统里都只能操作逻辑地址,不能操作物理地址,如A程序的0xFF地址和B程序的0xFF地址是不同的,大家都影射到不同的物理地址。这是为了防止程序错误地影响其他程序。 也就是将数据错误地写入其他程序的重要区域,从而使其他程序结束在现在的多数操作系统是不会发生。 要资料就给我发邮件,我给你发一份。Fixend@163.com
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯