设计与开发

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

小编 2024-10-06 设计与开发 23 0

单片机执行指令过程详解

单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

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

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

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

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

下面我们将举个实例来说明指令的执行过程:

开机时,程序计算器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单元取出。

因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC=0002H,PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。

对于一款MCU来说,在性能描述的时候都会告诉sram,flash的容量大小,对于初学者来说,也不会去考虑和理会这些东西,拿到东西就只用。其实不然,这些量都是十分重要的,仔细想想,代码为什么可以运行,代码量是多少,定义的int、short等等类型的变量究竟是怎么分配和存储的,这些问题都和内寸有关系。

首先单片机的内存可以大小分为ram和rom,这里就不再解释ram和rom的区别了,我们可以将其等效为flash和sram,其中根据flash和sram的定义可得,flash里面的数据掉电可保存,sram中的并不可以,但是sram的执行速度要快于flash,可以将单片机的程序分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区)和ZI-data(零初始化数据区)。在MDK编译器下可以观察到在代码中这4个量的值,如下图1所示:

其中code和RO-data存储在flash中,所以两者之和为单片机中flash需要分配给它们的空间大小(并且等于代码所生成的.bin文件大小),另外RW-data和ZI-data存储在sram中,同样两者之和为单片机中sram需要分配给它们的空间大小。

另外,我们必然会想到栈区(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中。

单片机指令系统介绍

一、指令与指令系统

指令:控制计算机完成某种操作的命令。

指令系统:处理器所能识别的所有指令的集合。

指令的兼容性:同一系列机的指令都是兼容的。

二、指令的格式

指令中包含的信息:运算数据的来源,运算结果的去向,执行的操作。

指令格式:

零操作数指令:操作码

单操作数指令:操作码,操作数

双操作数指令:操作码,操作数,操作数

多操作数指令:三操作数以上

三、指令的操作数

立即操作数:本身是参加操作的数据,可以是8位或16位,只能作为源操作数。

寄存器操作数:参加运算的数存放在指令给出的寄存器中,可以是16位或6位

存储器操作数:参加运算的数存放在存储器某一个或某两个单元中

存储器操作数列

四、指令字长

指令字长:操作码的长度,操作数地址长度,操作数的个数决定

五、指令的执行速度

①指令的字长影响指令的执行速度

②对不同的操作数,指令的执行时间不同

六、CISC和RISC指令系统

CISC:(complex instruction set computer)

①指令的功能强,种类多,常用于指令用硬件实现

②指令系统复杂难使用

RISC:

①指令功能较弱,种类少,格式简单

②多数指令在一个计算机周期完成

③对存储器的结构和存取速度要求较高

寻址方式

操作数可能的来源或存放处

①指令直接给出

②寄存器

③内存单元

寻找操作数所在地址的方法可分为三大类型:指令直接给出,存放于寄存器中的寻址方式,存放于存储器的寻址方式。

一、立即寻址

立即寻址仅适合于源操作数

二、寄存器寻址

参加操作的操作数在CPU的通用寄存器中

三、直接寻址

指令中直接给出操作数的的偏移地址

直接寻址方式下,操作数的段地址默认为数据段,单允许段重设,即由指令定义段。

四、寄存器间接寻址

参与操作的操作数存放于内存中,其偏移地址为指令中的寄存器内容

①由寄存器给出操作数的偏移地址

②存放偏移地址的寄存器称为间址寄存器,它们是BX,BP,SI,DI

③操作数的段地址(数据存放于哪个段)取决于存放哪一个间址寄存器:

五、寄存器的相对寻址

操作数的偏移地址为寄存器的内容加上一个位移量

六、基址,变址寻址

①操作数的偏移地址为:一个基址寄存器的内容+一个变址寄存器的内容

②操作数的段地址由选择的基址寄存器决定:基址寄存器为BX,则默认在数据段;基址寄存器为BP,则默认在堆栈段

③基址变址寻址方式与相对寻址方式一样,主要用于一维数组的操作

例如:

⑦、基址、变址、相对寻址

①操作数的偏移地址:基址寄存器内容+变址寄存器内容+位移量

②操作数的段地址由选择的基址寄存器决定

③机制编制相对寻址方式主要用于二维表格操作

八、隐含寻址

指令中隐含了一个或两个操作的地址,即操作数在默认的地址中

相关问答

单片机 c语言指令详解?

单片机C语言指令详解如下:1.voidinit()-初始化函数,用于初始化整个单片机。2.voidloop()-循环函数,用于主循环。3.voidmain()-主函数,程序从这里开....

单片机 指令JNB字母各代表什么意思?

1.这是51单片机的一条汇编语言指令,其中J代表"跳转JUMP",N代表"非NO",B代表"位BIT";2.如果TF0为0,那就跳转到...

单片机 指令@符号代表什么?

@代表间接寻址例子:MOVA,@R0R0里面存的是地址,假设R0里存的数是30H,那么这条指令的意思是:把地址为30H的存储单元里存的数传,送给累加器A;假设R0里存的...@...

8051 单片机 共有多少条指令?这些指令按照功能分可分为几类?分别为多少条?这些指令寻址方式有哪几种?

果然这年头懂汇编的人不多了啊。8051单片机共有111条指令,按指令功能分,可分为数据传送类29条,算术运算类24条,逻辑运算类24条,位操作类12条,控制转移类2...

单片机 中,指令通道包含?

1.指令通道包含多个部分。2.首先,指令寄存器(IR)是指令通道的一部分,用于存储当前执行的指令。其次,指令译码器(ID)也是指令通道的一部分,负责将指令从IR中...

什么叫 单片机 ? 单片机 与一般微型计算机相比,具有哪些特点?

1、单片机是在一块集成电路上把CPU、存储器、定时器/计数器及多种形式的I/O接口集成在一起而构成的微型计算机。2、单片机就一个集成芯片,外加辅助电路构成一...

单片机 指令的字节数和周期数分别是什么?

字节数就是指该指令的长度,毕竟指令从本质上来说也是由最小单位bit构成的。单片机中的指令字节一般有单字节(8bit)、双字节(16bit)。指令周期就是指执行该...

单片机 的R和M指令是什么?

单片机中没有单独这两个字母的指令,只有mov之类的指令单片机中没有单独这两个字母的指令,只有mov之类的指令

单片机 orl指令是什么?

单片机orl指令是指ORL能将某些位置一,对于想置一的位与1进行“或”逻辑,对于想保持原来的位与0进行“或”逻辑。例如:(A)=10011100B=9CH,(E1)=DFH,(DF.....

单片机命令 MOV、MOVX、MOVC有什么区别?

汇编语言指令,MOV用于对单片机内部数据存储器寻址,MOVC用于对单片机内部程序存储器区进行寻址,MOVX用于对外部数据存储器区进行寻址,各种单片机的说明书中指...

猜你喜欢