EM78P4475单片机指令系统
扫描二维码
随时随地手机看文章
一、EM78P447S指令的执行时序
作为时基的时钟振荡器,产生的时钟脉冲信号经内部分频电路分频后形成“指令周期(Tins)”。作为EM78P447S单片机的重要特色之一,一个指令周期既可以占用2个时钟周期,也可以占用4个时钟周期,可以由用户自主选定。因此,一个“指令周期”可以由2个时钟周期(即2个节拍Q1和Q2)或4个时钟周期(即4个节拍Q1、Q2、Q3和Q4)构成。每当Q1节拍的上升沿出现时,程序计数器PC自动加1。
由于EM78单片机内部采用双总线结构,使得它在执行一条指令的同时,就可以提取下一条指令,从而实现“流水作业”。就是说,在同一个指令周期之内,执行指令和提取指令两种活动在同时进行。这就使每一条指令的平均执行时间为一个指令周期,、因此,就可以所成,EM78单片机指令的执行时问“单周期化”了。绝大多数指令的运行时间都仅占用一个指令周期,只有极个别的指令(即对程序计数器PC做“写”操作的指令,比如MOV PC,A)才占用两个指令周期,这一点应该引起注意。
二、EM78P447S指令概述
不同CPU内核的单片机,具有不同的指令系统。指令系统中的每一条指令都完成一种特定功能的简单操作,比如数据传送操作、加法操作等。将若干条实现简单操作的指令语句,按照一定的规则排列组合起来,就构成了一个可以完成复杂功能的程序。 为了便于学习和掌握,通常每一条指令都用表意性很强的英文单词或语句缩写来代表。例如,NOP指令,就是由“No Operation.”一句英文缩略而成,中文含义是“空操作” 所以,通常人们将代表一条指令的一个字符串称为“助记符”。假如按指令被使用的频繁程度划分整个指令系统,其实只有一部分指令在编写程序时经常用到,而另一部分指令却较少使用,还有一部分指令极少用到。每条指令一般都由操作码和操作数组成,也有个别指令不带操作数。操作码是指令操作功能的记述,而操作数则描述操作的对象和操作的范围。
1.指令结构
一条指令的指令码一般都可分解成两部分:第一部分为操作码(OPCODE),代表指令功能;第二部分为操作数(OPERAND),表示指令操作的对象,或运算时所需要的参数。操作数又可以细分为两部分:第一操作数和第二操作数。第一操作数就是目标操作数,第二操作数就是源操作数。以一条传送指令为例,源操作数就是数据的发源地,而目标操作数就是数据的目的地。 EM78P447S单片机,共有指令58条,其编码长度均为13比特(bit)其一般指令格式为:操作码第一操作数,第二操作数或操作码 目标操作数,源操作数 这种书写格式与流行的MCS-51单片机的指令系统,以及许多微机原理教科书中介绍的80X86指令系统相一致,也比较符合人们的记忆习惯。对于EM78P447S指令系统中的一条指令,操作数可以是两个、一个或一个也没有。
2 指令描述方法
对后面描述过程中所采用的一些符号或表示方法需作说明,见下表。
3.EM78P447S指令说明
以下对于EM78P447S单片机整个指令系统中的每条指令,以“指令的字母为序”进行全面介绍,包括语法规则、指令编码、操作内容、影响标志和功能说明等。其中语法规则就是汇编格式,也就是汇编器工具软件认可的格式。
4.操作数的寻址方式
操作数指定参与运算的数据或者数据所在的存放地址。所谓“寻址”就是寻找操作数的存放地址,也就是给操作数定位的过程。所谓寻址方式,就是寻找操作数或操作数所在地址的方法和形式。
在EM78P447S的指令系统中,根据操作数的来源不同,设计了5种寻址方式:立即寻址、直接寻址、隐含寻址、间接寻址和比特寻址。
(1)立即寻址
在这种寻址方式中,操作数在指令码中直接获取(这种在指令码中直接携带的操作数就称为立即数)。
[例]ADD A,@16H;
实现的功能是,将立即数16H(前面需要带有一个标识符@)与累加器A的内容(假设为99H)相加,结果(AFH)送到A。其指令码的二进制形式为:1,1111,0001,0110;其中前5位是操作码,后8位就是立即数。指令执行过程如上所示。算术逻辑单元ALU的两个入口,送入的分别是加数16H(来自指令码)和被加数99H(来自累加器A),在ALU中完成加法操作,从ALU的唯一出口把结果AFH送回A中。
(2)直接寻址
采用直接寻址方式的指令,可以在指令码中直接获取一个存放着操作数的存储地址,即指令码中包含着被访问(即读写)寄存器的单元地址。
[例]OR A,15H;
实现的功能是,将地址为15H的RAM单元的内容(假设是16H)与累加器A的内容(假设是99H)进行逻辑“或”之后,结果(9FH)送入A中。参加逻辑“或”运算的一个数据(16H)所在的单元地址(15H)可以从指令中直接得到。操作过程如上所示。(3)间接寻址在采用寄存器间接寻址方式的指令码中,6位寄存器地址必为“全0”。利用rrrrrr=000000这个“专用地址”,特指RSR (RAM选择寄存器),并且是以RSR寄存器内容为地址,所指定的工作寄存器单元中存放着被访问的数据。从表面上看,指令码中的6位0指定的是IAR(间接寻址寄存器),其实IAR仅仅是一个有名无实的寄存器单元,只不过是将它的地址编码给专用化了。这样做可大大简化指令系统。
为了便于理解,我们不妨换一个角度来分析,把RSR看成一个具有双地址(分别为00H和04H)的特殊的寄存器单元,而可以不再提及IAR寄存器。当用地址04H访问RSR时,就像访问普通寄存器一样,可以直接对RSR的内容进行读或写;而用地址00H访问RSR时,而它就是一个间接寻址寄存器,不是对RSR的内容进行读或写,而是把它的内容作为地址使用。假如用户所需要访问的一组寄存器有地址相邻的特点,使用间接寻址是很方便的。
[例]XOR A,0;
实现的功能是,将15H号RAM单元的内容(假设为16H)与A内容(假设为99H)相“异或”,运算结果(8FH)送回A。参加“异或”运算的一个操作数(16H)可以从指令码中间接得到。RSR、A和15H号RAM单元的内容都是预先存入的。其操作过程如下图所示。
在下页的下中描述了直接寻址方式和间接寻址方式,这两种寻址过程中RAM工作寄存器地址的形成。对于直接寻址方式,体选码来自RAM选择寄存器RSR的最高2位,体内地址直接来自指令码;对于间接寻址方式,体选码也来自RAM选择寄存器RSR的最高2位,但是体内地址却来自RSR的低6位。
对于RAM的特殊功能寄存器空间中的各寄存器只能进行直接寻址,不能进行间接寻址。
(4)隐含寻址
采用隐含寻址方式的指令,在指令码中不必指明存放着操作数的存储地址,即指令码中并非包含着被访问(即读写)寄存器的单元地址,就可以自动地访问一个默认的寄存器。
[例]CONTR;
实现的功能是,将控制寄存器CONT的内容读取之后,经过ALU送到累加器A中(CONT寄存器没有统一的地址编码,这一点与众不同)。其操作过程如下图所示。
(5)比特寻址
可以对任一寄存器中的任一比特位直接寻址访问,也就是指令码中既包含着被访问寄存器的地址,又包含着该寄存器中的某一比特的地址。如果将RAM存储器看成一个阵列的话,那么在这个阵列中寻找某一个比特,就需要一个纵坐标和一个横坐标纵坐标就相当于单元地址,横坐标就相当于比特地址。
[例]BS 15H,4;
实现的功能是把地址为15H的寄存器单元内的比特4置为1。
5.以累加器A为中枢的数据传递方式 数据的逻辑运算和算术运算过程,以及控制信号的输入和输出过程,在单片机内部都可以看成是“数据传递”的过程。根据EM78P447S的硬件系统和软件系统(即指令系统和寻址方式)的规划特点,我们可以总结出在单片机内部,在各个寄存器之间进行数据传递,能够实现的几种途径和方式。不妨可以用上进行形象化地描述。该图中的每一条带箭头的线条都代表一种传递方式,在每一条带箭头的线条旁边,还同时分别给出了实现相应的那一种数据传递所用指令的一个实例。其中有一点值得注意的是,“MOV R,R”指令中的“R”实际指的是同一个工作寄存器单元,该指令的目的是影响标志位“Z” 事实上,就不存在不同工作寄存器单元之间直接传递的指令,只能以A作中转实现间接传递。
6.“CPU内核一专用寄存器一模块或部件”三者相互关系
对于单片机的开发和应用,其主要任务有两项:一是软件设计,二是硬件设计。硬件没计我们暂且不提,在此只想用软件设计的观点,从不同角度剖析和理解单片机内部的组织关系。
软件设计实际上就是运用指令编制程序,而EM78P447S单片机的每条指令的作用范围非常集中,