进程控制块(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命令查看的结果不是、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)