ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

对汇编程序中分段的理解

2022-06-21 12:01:51  阅读:214  来源: 互联网

标签:分段 RAM 程序 汇编程序 理解 内存 寄存器 堆栈 数据


在8086处理器中包含各种段寄存器,如程序段寄存器cs、数据段寄存器ds、堆栈段寄存器ss等,这些寄存器分别存放着程序、数据和堆栈所在段的段地址,当取指令时,采用cs:ip进行寻址;当访问内存时,采用ds:[?]寻址;当进行堆栈操作时,采用ss:sp寻址,三者的实质都是指针。那为什么用3个而不是1个呢?答案当然是为了方便操作,虽然用一个也可以实现。

那么,为什么将一段程序的内容分为数据段、代码段和堆栈段呢?可不可以不分开而是放在一起?——在PC上可以,嵌入式系统上一般不行!原因如下:

PC中程序、数据和堆栈都存放在内存(RAM)中,即使三者混在一起也没关系,甚至相互穿插都行(当然堆栈不能被穿插),因为只要地址没错,程序流就不会乱序,同样,数据可以正确访问,堆栈可以正常使用。但嵌入式系统中,程序可以放在内存中也可以放在ROM中,但数据(全局变量)和堆栈必须放在内存(RAM)中才能正确进行访问(这里主要指能否正确执行对内存的修改)。当程序全部或部分存放在ROM中时,就必须将数据和堆栈挑出来放在内存中,因此通常将程序、数据和堆栈分成不同的段,以便于正确进行地址空间的安排。上面说到嵌入式系统“一般”不行,那什么时候“行”呢?——当全部程序都存放到RAM中运行的时候。

另外,即使是在PC上执行的程序,也最好进行分段而不要混在一起,这样便于在编写程序时定位数据所在的地址。

标签:分段,RAM,程序,汇编程序,理解,内存,寄存器,堆栈,数据
来源: https://www.cnblogs.com/uestcliming666/p/16396350.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有