中断指令int属于什么类指令,int指令是如何得到中断号0的

  

  今天北京雷声大雨点小,在家无事可做。下面我们来看看单片机上的一些面试问题。   

  

  1.目录,关于时钟周期,机器周期和指令周期。2.堆栈相关。3.关于临界区你应该知道的一切。1.MCU的时钟周期是多少?机器周期?指令周期?他们之间是什么关系?   

  

  2.栈的工作原理是什么,操作流程是什么?   

  

  3.什么是临界区,临界区有什么用?   

  

  解析:   

  

  

1、关于时钟周期、机器周期和指令周期

  

  

  时钟周期又称振荡周期,定义为时钟脉冲的倒数(可以理解为时钟周期是单片机外部晶振的倒数,例如12M晶振,其时间周期为1/12 us),是计算机中最基本也是最小的时间单位。   

  

  在一个时钟周期内,CPU只完成一个基本动作。对于单片机,如果使用1MHZ的时钟频率,则时钟周期为1 us如果使用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步伐)。显然,对于同型号的电脑来说,时钟频率越高,电脑的工作速度就越快。然而,因为不同的计算机硬件电路和设备不相同,所以所需的时钟周期频率范围不一定相同。我们8051单片机的时钟范围是1.2MHz-12MHz。   

  

  在8051单片机中,一个时钟周期定义为一个节拍(用P表示),两个节拍定义为一个状态周期(用S表示)。   

  

  计算周期   

  

  在计算机中,为了便于管理,一条指令的执行过程往往被分成几个阶段,每个阶段完成一项工作。例如,指令提取、存储器读取、存储器写入等。每一个都称为一个基本操作。完成一个基本操作所需的时间称为机器周期。通常,一个机器周期由几个S周期(状态周期)组成。851系列单片机的一个机器周期由六个S周期(状态周期)组成。如前所述,一个时钟周期被定义为一个节拍(由P表示),两个节拍被定义为一个状态周期(由S表示)。8051单片机的机器周期由六个状态周期组成,也就是说,一个机器周期=六个状态周期=12个时钟周期。   

  

  指令周期   

  

  一个指令周期是执行一条指令所需的时间,通常由几个机器周期组成。不同的指令需要不同的机器周期数。对于一些简单的单字节指令,在取指令周期中,指令取入指令寄存器后,立即解码执行,不需要其他机器周期。对于一些复杂的指令,如分支指令和乘法指令,需要两个或更多的机器周期。   

  

  通常,一个机器周期的指令称为单周期指令,两个机器周期的指令称为双周期指令。   

  

  

2、堆栈相关

  

  

  堆栈是内存中一个连续的存储区域,用来存储一些临时数据。比如可以存储中断指令INT中的标志寄存器值、代码段寄存器CS值、指令指针寄存器IP值;也可用于RET指令,获取返回地址;堆栈也可以保存其他数据等等。   

  

     

  

  在汇编语言中,堆栈操作是通过PUSH和POP指令来完成的。它的操作数是两个字节的操作子类型。   

  

  程序内存可以分为:堆区、栈区、全局区、程序代码区、文本常通区。程序编译后,内存空间被分配给全局变量和静态变量。因此,当函数运行时,程序内存不应该为局部变量分配堆栈空间。当中断来临时,也需要将函数指针放入栈中保护当前情况(保护场景),这样在中断处理完后就可以返回到上一个函数。   

  

  栈的分配是从高到低或者先入后出(像子弹夹),栈的分配是从低到高(即先来先买,后买)。在一般的对话中,我们所说的stack默认是stack(子弹夹)。但是,堆栈可以分为硬堆栈和软堆栈。硬堆栈是SP(堆栈指针的顶部元素的下一个位置,所以当数据进入堆栈时,SP先加1,然后推入数据。退出栈时,数据先出来,然后SP再减1),软栈是硬栈和全局变量区之间的空间。   

  

  

3、临界区你应该知道的一切

  

  

   1.临界段代码(Critical section codes)也称临界段,是指那些必须完整连续运行,不能中断的代码段。   

  

  2.读取或修改变量(尤其是用于任务间通信的全局变量)的代码,这一般是最常见的关键代码。   

  

  调用公共函数的代码,尤其是不可重入的函数。如果多个任务访问这个函数,结果可想而知。总之,临界段的执行时间越短越好,否则会影响系统的实时性能。   

  

  3.中断处理程序和任务将要访问的临界区代码需要通过关闭中断的方法来保护;只有任务访问的临界区代码可以通过锁定调度器来保护。   

  

  

下节更精彩,欢迎关注

  

  

  

相关文章