进程控制块,数据段,程序段各自在内存的什么地方

进程控制块,数据段,程序段各自在内存的什么地方,第1张

进程控制块(PCB)在系统内存中,可以和其他进程同步执行

数据段存在静态内存,用于保存程序已经初始化的变量

代码段紧接着数据段,也在静态内存中

另外还有保存局部变量的栈和保存动态分配空间的堆

在内存中它们如下关系:

========高地址   =======

程序栈        堆栈段

向下增长

空内存

向上增长

------          数据段

BSS

------

非零数据

=========       =======

代码           代码段

=========       =======

=========低地址   =======

栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行)

堆(给动态分配内存是使用),向上生长                    (可读可写可执行)

数据段(保存全局数据和静态数据)                                 (可读可写不可执行)

代码段(保存代码)                                                   (可读可执行不可写)

DOS的EXE文件加载时,对CS的初始化处理是将它指向入口语句对应的那个代码段段地址,而DS,ES,SS是相同的,它们都指向加载这个程序时的程序段前缀(PSP)的段地址,而不是你程序中定义的数据、堆栈等各个段的段地址。用户必须自己编写代码,在程序运行时将相应的段地址传送到DS等。

从你的程序可以看到,你程序里用DATA SEGMENT 定义的这个DATA段,加载后的段地址是071A。但DS并不是在程序加载时就直接指向它。你的程序开始运行以后,要用两条指令,将076A传送到DS。

只有在这两条指令执行过以后,DS才会变成076A。

你刚加载了程序、尚未运行时查看,DS还没有改成076A。这时的075A实际是PSP的段地址。

以上就是关于进程控制块,数据段,程序段各自在内存的什么地方全部的内容,包括:进程控制块,数据段,程序段各自在内存的什么地方、汇编数据段地址问题 看我的源代码,从反汇编的代码中可以看到段地址DS应该为075A 但是D命令查看的结果不是、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9280941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存