义隆单片机课堂
EM78P447S单片机入门与实作系列讲座

🏠 首页 《无线电》杂志 2002年 🔗 第3期 🔗 第1065353216页 分类:电脑与单片机 🔗

一、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 指令描述方法

对后面描述过程中所采用的一些符号或表示方法需作说明,见表1。

图1
图1 🔍原图 (576×750)

3. EM78P447S指令说明

以下对于EM78P447S单片机整个指令系统中的每条指令,以“指令的字母为序”进行全面介绍,包括语法规则、指令编码、操作内容、影响标志和功能说明等。其中语法规则就是汇编格式,也就是 汇编器工具软件认可的格式。


(1) 加法指令(3条)

语法规则 ADD A,R

指令编码01110rrrrrr

操作内容 A+R→A

影响标志 Z,C,DC;零标志、进位标志和辅助进位标志都会受影响。

功能说明 将A寄存器的内容加上R寄存器的内容,并把结果载入A寄存器中。

语法规则 ADD R,A

指令编码01111rrrrrr

操作内容 A+R→R

影响标志 Z,C,DC;零标志、进位标志和辅助进位标志都会受影响。

功能说明 将A寄存器的内容加上R寄存器的内容,并把结果载入R寄存器中

语法规则 ADD A,K

指令编码11111kkkkkkkk

操作内容 K+A→A

影响标志 Z,C,DC;零标志、进位标志和辅助进位标志都会受影响。

功能说明 将A寄存器的内容加上立即数K,并把结果载入A寄存器中。


(2) 逻辑“与”指令(3条)

语法规则 AND A,R

指令编码01010rrrrrr

操作内容 A&R→A

影响标志 Z;零标志会受影响。

功能说明 将A寄存器和R寄存器的内容进行逻辑与,并将结果存入A寄存器。

语法规则 AND R,A

指令编码01011rrrrrr

操作内容 A&R→R

影响标志 Z;零标志会受影响。

功能说明 将A寄存器和R寄存器的内容进行逻辑与,并将结果存入R寄存器。

语法规则 AND A,K

指令编码11010kkkkkkkk

操作内容 A&K→A

影响标志 Z;零标志会受影响。

功能说明 将A寄存器的内容和立即数K进行逻辑与,并将结果存入A寄存器。


(3) 比特清零指令

语法规则 BC R,B

指令编码100bbbrrrrrr

操作内容 0 → R(B)

影响标志 无

功能说明 R寄存器的比特“B”被清为0。


(4) 比特置位指令

语法规则 BS R,B

指令编码101bbbrrrrrr

操作内容 1→ R(B)

影响标志 无

功能说明 R寄存器比特“B”被置成1。


(5) 子程序调用指令

语法规则 CALL K

指令编码10kkkkkkkkkk

操作内容 PC+1→[堆栈顶部]

K→PC(9~0)

R3(6~5)→PC(11~10)

影响标志 无

功能说明 当调用一个子程序时,首先会将下一条指令的地址存入堆栈中,接下来将子程序的入口地址载入程序计数器PC中。


(6) 累加器清零指令

语法规则 CLRA

指令编码1000

操作内容 0→A;A寄存器被清为0。

影响标志 1→Z;零标志被置成1。

功能说明 清除A寄存器,同时设定Z标志。


(7) 寄存器清零指令

语法规则 CLRR

指令编码11rrrrrr

操作内容 0→R;R寄存器清为0。

影响标志 1→Z;零标志设成1。

功能说明 清除R寄存器,并设定零标志。


(8) 寄存器求反送A指令

语法规则 COMA R

指令编码010010rrrrrr

操作内容

影响标志 Z;零标志受影响。

功能说明 将所指定寄存器的内容取反码,再放入A寄存器中。


(9) 寄存器求反指令

语法规则 COM R

指令编码010011rrrrrr

操作内容 →R

影响标志 Z;零标志受影响。

功能说明 将R寄存器的内容取反码,再存回R寄存器中。


(10) 读控制寄存器指令

语法规则 CONTR

指令编码010100

操作内容 CONT→A

影响标志 无

功能说明 将控制寄存器CONT的数据,读到A寄存器中。


(11) 写控制寄存器指令

语法规则 CONTW

指令编码010

操作内容 A→CONT

影响标志 无

功能说明 将A寄存器中的内容,写入控制寄存器CONT中。


(12) 十进制调整指令

语法规则 DAA

指令编码0101

操作内容 如果[A(3~0)>9]或[DC=1],

则A(3~0)+6→A(3~0);

如果[A(7~4)>9]或[C=1],

则A(7~4)+6→A(7~4);

影响标志 C进位标志受影响。

功能说明 DAA指令通常跟随在加运算指令之后,用来调整在累加器中的8位二进制数值,使累加器中的数值变成两位十进制数的表示法,分别用两个4比特数来表示十位及个位数。


(13) 寄存器减1送A指令

语法规则 DECA R

指令编码0110rrrrrr

操作内容 R-1→A

影响标志 Z零标志受影响。

功能说明 将R寄存器的内容减1,并且将结果存入A寄存器中。


(14) 寄存器减1指令

语法规则 DEC R

指令编码0111rrrrrr

操作内容 R-1→R

影响标志 Z;零标志受影响。

功能说明 将指定R寄存器内含值减1。


(15) 关闭中断总使能位指令

语法规则 DISI

指令编码0101

操作内容 0→

影响标志 无

功能说明 将中断总使能位(该比特在控制寄存器CONT中比特6的位置)清0,以禁止CPU响应所有的中断请求。


(16) 寄存器减1送A并跳转指令

语法规则 DJZA R

指令编码010110rrrrrr

操作内容 R-1→A,结果若为0则跳一步

影响标志 无

功能说明 将所指定R寄存器的内容减1,并将结果存于A寄存器内。如果结果为0,则下一个指令被跳过;否则继续执行下一条。


(17) 寄存器减1并跳转指令

语法规则 DJZ R

指令编码010111rrrrrr

操作内容 R-1→R,结果若为0则跳一步

影响标志 无

功能说明 将所指定R寄存器的内容减1,并将结果存回R寄存器内;如果结果为0,则下一个指令被跳过;否则继续执行下一条。


(18) 开放中断总使能位指令

语法规则 ENI

指令编码0101

操作内容 1→

影响标志 无

功能说明 将中断总使能位(该比特在控制寄存器CONT中比特6的位置)置1,以允许CPU响应所有的中断请求。


(19) 寄存器加1送A指令

语法规则 INCA R

指令编码01010rrrrrr

操作内容 R+1→A

影响标志 Z;零标志受影响。

功能说明 将被指定R寄存器的内容加1,并将结果放入A寄存器中。


(20) 寄存器加1指令

语法规则 INC R

指令编码010101rrrrrr

操作内容 R+1→R

影响标志 Z;零标志受影响。

功能说明 将被指定R寄存器的内容加1,并且将结果再存回R寄存器中。


(21) 软件中断指令

语法规则 INT

指令编码1111001

操作内容 PC+1→[堆栈顶部]

01H→PC

影响标志 无

功能说明 软件中断指令,首先将下一条指令地址存入堆栈中,然后将软件中断服务子程序入口0001H载入程序计数器PC中。


(22) 特殊功能寄存器读取指令

语法规则 IOR R

指令编码01rrrr

操作内容 IOCR→A

影响标志 无

功能说明 将特殊功能寄存器IOCR中的值读到寄存器A中。


(23) 特殊功能寄存器写入指令

语法规则 IOW R

指令编码rrrr

操作内容 A→IOCR

影响标志 无

功能说明 将A寄存器的内容载入特殊功能寄存器IOCR中。


(24) 无条件跳转指令

语法规则 JMP K

指令编码101kkkkkkkkkk

操作内容 K→PC(9~0)

R3(6~5)→PC(11~10)

影响标志 无

功能说明 当执行一个跳转指令,指令码所携带的10位地址码就会被载入程序计数器PC中。


(25) 寄存器加1送A并跳转指令

语法规则 JZA R

指令编码011110rrrrrr

操作内容 R+1→A,若结果为0就跳一步。

影响标志 无

功能说明 将所选定的寄存器R的内容加1,并将结果存于A寄存器,若结果为0,则跳过下一条指令。


(26) 寄存器加1并跳转指令

语法规则 JZ R

指令编码011111rrrrrr

操作内容 R+1→R,若结果为0就跳一步。

影响标志 无

功能说明 将所选定的寄存器R的内容加1,并将结果存于R寄存器,若结果为0,则跳过下一条指令。


(27) 比特测试并为0跳转指令

语法规则 JBC R,B

指令编码110bbbrrrrrr

操作内容 如果R(B)=0,就跳一步。

影响标志 无

功能说明 如果寄存器R的比特“B”是“0”,则跳过下一条指令。


(28) 比特测试并为1跳转指令

语法规则 JBS R,B

指令编码111bbbrrrrrr

操作内容 如果R(B)=1,就跳一步。

影响标志 无

功能说明 如果寄存器R的比特“B”是“1”,则跳过下一个指令。


(29) 数据传送指令(4条)

语法规则 MOV R,A

指令编码01rrrrrr

操作内容 A→R

影响标志 无

功能说明 将A寄存器中的值载入寄存器R中。

语法规则 MOV A,R

指令编码01000rrrrrr

操作内容 R→A

影响标志 Z;零标志受影响。

功能说明 将R寄存器中的值载入A寄存器,此后如果A寄存器中的结果为零,就会将Z标志置成1;否则将Z标志清为0。

语法规则 MOV A,K

指令编码11000kkkkkkkk

操作内容 K→A

影响标志 无

功能说明 将立即数K载入A寄存器中。

语法规则 MOV R,R

指令编码11000kkkkkkkk

操作内容 R→R

影响标志 Z;零标志受影响。

功能说明 将寄存器R的内含值传送到该寄存器本身,目的是为了影响Z标志位,以检测R的内含值是否为0。


(30) 空操作指令

语法规则 NOP

指令编码

操作内容 不做任何操作。

影响标志 无

功能说明 不做任何工作,仅仅用来做时间的延迟。

下期,我们继续为大家介绍EM78P447S指令系统的其他指令和寻址方式等内容。


本期的有奖问答题目是:

1. 指令中的操作码和操作数分别起什么作用?EM78P447S单片机的指令编码长度为多少位?

2. EM78P447S单片机没有实现不同寄存器之间直接传递的指令,假若想把寄存器R8的内容复制到R9中,想一想应该如何实现?

(大海创作室)