• 对汇编程序中分段的理解


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

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

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

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

  • 相关阅读:
    centos7.5搭建zabbix3.4.x以及mysql定制化监控
    dockerfile 的常用讲解
    使用nginx快速搭建文件服务器
    centos7 安装ELK
    centos7 安装Gitlab
    centos7 安装jenkins
    ansible-playbook使用详解
    DNS主从配置
    ansible 安装部署文档
    WPF Grid MouseWheel事件无法触发
  • 原文地址:https://www.cnblogs.com/uestcliming666/p/16396350.html
Copyright © 2020-2023  润新知