单片机执行指令过程详解:

单片机执行程序的过程,实际上就是执行我们所编制程序的过程,即逐条指令的过程。

计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

(1)取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器

(2)分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。

计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在 片内或片外程序存储器 中。因而一开机即可执行指令。

例如:

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令 (取出存储器中事先存放的指令阶段)执行指令 (分析和执行指令) 的循环过程。

执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:

  1. 程序计数器的内容(这时是0000H)送到地址寄存器;

  2. 程序计数器的内容自动加1(变为0001H);

  3. 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

  4. CPU使读控制线有效;

  5. 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。

至此,取指阶段完成,进入译码分析和执行指令阶段。

由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。

我们必然会想到栈区(stack)、堆区(heap)、全局区(静态区)(staTIc)、文字常量区和程序代码区和上面所介绍的code、RO-data等的关系:

  1. 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 这些值是可读写的,那么stack应该被包含在RW-data(读写数据存储区),也就是单片机的sram中。

  2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。可以理解,这些也是被包含在单片机的sram中的。

  3. 全局区(静态区)(staTIc):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。这些数据也是可读可写的,和stack、heap一样,被包含在sram中。

  4. 文字常量区:常量字符串就是放在这里的。这些数据是只读的,分配在RO-data(只读数据存储区),则被包含在flash中。

  5. 程序代码区:存放函数体的二进制代码,可以想象也是被包含在flash,因为对于MCU来说,当其重新上电,代码还会继续运行,并不会消失,所以存储在flash中。

单片机执行指令过程详解相关推荐

  1. STM32单片机启动过程详解

    本文详细介绍STM32单片机启动的过程,既从上电Reset_Handle跳转到main()函数的过程.其中,会着重解释__main的汇编代码 STM32启动过程 1. 从Reset_Handler开始 ...

  2. CPU执行指令过程详解

    在进入正题之前,先介绍几个名词 基础概念 1.操作数:操作数并不是什么高深的意思,就是我们执行指令时需要用到的真实的数据,比如1+1中的1(当时这个概念一直模糊了好久--) 2. 几种常见寻址方式: ...

  3. 51单片机步进电机角度控制详解(免费提供代码+仿真)

    51单片机步进电机控制详解 目录 51单片机步进电机控制详解 一.步进电机基本介绍 1. 步进电机结构 2. 步进电机驱动 二.硬件&仿真设计 0.设计要求 1. 硬件设计 显示模块 输入模块 ...

  4. 朱老师ARM裸机学习笔记(四):S5PV210启动过程详解

    常用器件特性 内存: SRAM 静态内存 特点就是容量小.价格高,优点是不需要软件初始化直接上电就能用 DRAM 动态内存 特点就是容量大.价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使 ...

  5. 英飞凌 AURIX 系列单片机的HSM详解(4)——Tricore核与HSM核之间的通信方法

    本系列的其它几篇文章: <英飞凌 AURIX 系列单片机的HSM详解(1)--何为HSM> <英飞凌 AURIX 系列单片机的HSM详解(2)--与HSM相关的UCB和寄存器> ...

  6. 家用计算机启动过程 装载主引导记录,计算机启动过程详解

    综述: 计算机启动时经过了哪些过程: 计算机接通电源后,第一步要进行加电自检,也就是POST(Power On Self Test),检查RAM.驱动器等:第二步BIOS会读取活动分区主引导记录的启动 ...

  7. hadoop作业初始化过程详解(源码分析第三篇)

    (一)概述 我们在上一篇blog已经详细的分析了一个作业从用户输入提交命令到到达JobTracker之前的各个过程.在作业到达JobTracker之后初始化之前,JobTracker会通过submit ...

  8. Hadoop学习之Mapreduce执行过程详解

    一.MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: ...

  9. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

最新文章

  1. Leetcode: Spiral Matrix
  2. 随笔-tomcat的日志文件按日期每天生成
  3. 开源绘画应用 Pinta 已移植到GTK 3和.NET 6
  4. 每日一笑 | 终于知道为什么胖了之后气质会垮了
  5. java ndc_通过slf4j/log4j的MDC/NDC 实现日志追踪
  6. 小白 LeetCode 5605 检查两个字符串数据是否相等
  7. Java中常用的类,包,接口
  8. python逐行打印_如何用Python逐行打印字典?
  9. 2018年AI和ML(NLP,计算机视觉,强化学习)技术概述和2019年趋势
  10. ubuntu安装rubyOnRails
  11. adb命令检测手机bl有无上锁_用adb命令解bl锁
  12. 计算机设计大赛答辩ppt
  13. 【小家Spring】注意BeanPostProcessor启动时对依赖Bean的“误伤”陷阱(is not eligible for getting processed by all...)
  14. 旅行社旅游APP开发维护经验
  15. python调整图片大小reshape_scipy.misc.imresize改变图像的大小
  16. 手机linux系统介绍,Ubuntu手机系统介绍及Ubuntu刷机教程分享
  17. 二分法查找Unicode To GB2312转码表
  18. 团子杂记:SAP可持续化发展解决方案之产品碳足迹管理(PFM)简介
  19. 基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(一)
  20. 换标是起点,金蝶新一轮变革的引擎强劲开启?

热门文章

  1. B树(BTree)与B+树(B+Tree)
  2. NI无线通信与射频技术学习资源汇总
  3. 【LOJ #6617】「THUPC 2019」摆家具 / furniture(DP / BSGS / 矩阵快速幂)
  4. CRC循环冗余码及其详细计算
  5. 【畅购商城】用户登录
  6. docker安装mysql(PXC)集群
  7. 毕业一年,程序猿工作一年总结,有收获,有失去,有遗憾,但仍一往无前
  8. 银河麒麟、中标麒麟 root权限登录
  9. 地图与定位(一)定位服务
  10. TI的CC2530单片机检测不同类型的方波