单片机原理与应用凌阳SPCE061A(电子教案)第3章 指 令 系 统_第1页
单片机原理与应用凌阳SPCE061A(电子教案)第3章 指 令 系 统_第2页
单片机原理与应用凌阳SPCE061A(电子教案)第3章 指 令 系 统_第3页
单片机原理与应用凌阳SPCE061A(电子教案)第3章 指 令 系 统_第4页
单片机原理与应用凌阳SPCE061A(电子教案)第3章 指 令 系 统_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理与应用凌阳SPCE061A(电子教案)第3章 指 令 系 统 第33章指令系统SPCE061A指令系统3.2指令系统概述3.13.1指令系统概述指令是CPU执行某种操作的命令。 微处理器(MPU)或微控制器(MCU)所能识别的全部指令的集合称为指令系统。 本章详细介绍SPCE061A单片机的寻址方式和指令系统。 以nSP TM为内核的单片机系列指令按功能可划分为以下几种。 ( (1)数据传送指令立即数到寄存器、寄存器到寄存器、寄存器到存储器、存储器到存储器的数据传送操作。 ( (2)算术运算指令加、减、乘等运算。 ( (3)逻辑运算指令与、或、异或、测试、移位等指令。 ( (4)转移指令条件转移、无条件转移、中断返回、子程序调用等操作。 ( (5)控制指令开中断、关中断、有限冲击响应FIR(Finite ImpulseResponse)滤波器的数据自由移动等操作。 寻址方式是指指令中寻找操作数所在地址的方法,nSP TM的的CPU支持5种寻址方式,下面分别加以介绍。 ( (1)立即寻址操作数直接包含在指令中,以以6位或16位常数的形式出现,也可以说是以立即数的形式出现。 ( (2)直接寻址在指令格式中直接给出操作数的存储器地址,通过存储器的地址来访问存储器中的数据。 直接寻址方式中的地址需要用“”括起,表明是存储器操作数。 直接寻址方式又分3种1)6位地址直接寻址。 2)16位地址直接寻址。 3)22位地址直接寻址。 ( (3)寄存器寻址操作数包含在寄存器中,由指令指定寄存器的名称。 ( (4)寄存器间接寻址寄存器中存储的是操作数的地址,书写指令时,寄存器需要用“”括起来。 ( (5)变址寻址操作数的地址由基址和偏移量共同提供。 指令执行时,先对基址指针寄存器BP和6位立即数求和,算出有效地址,然后从该地址中读取操作数。 书写指令时,需要用“”将BP和IM6括起来,即即BP+IM6。 为了描述方便,统一约定指令系统叙述过程中用到的符号,如表3-1所示。 符号功能说明R1,R2,R3,R4,R5(BP)通用寄存器PC程序计数器CS,DS段寄存器中的代码段选择字段和数据段选择字段N N,Z Z,S S,C C寄存器中的44个标志位SR段寄存器IM666位立即数IM1616位立即数A666位地址码表33-11符号约定A1616位地址码Rd目的(destination)寄存器或存储器指针Rs源寄存器或存储器指针数据传送符号符号功能说明符号功能说明MR由R4和R3组成的32位结果寄存器,R4为高16位,R3为低16位&,|,逻辑与、逻辑或、逻辑异或符号可选项寄存器间接寻址标志+,指针单位字增量、字减量ss,us两个有符号数之间的操作,无符号数与有符号数之间的操作Label程序标号FIR有限冲击响应FIR(Finite ImpulseResponse),数字信号处理中的一种具有线性相位及任意幅度特性的数字滤波算法N N负标志,N=0表示运算结果最高有效位为00;N=1表示最高有效位为11Z Z零标志,Z=0表示运算结果不为00;Z=1表示运算结果为00S S符号标志,S=0表示结果不为负;S=1表示结果为负数(22的补数)C C进位标志,C=0表示运算过程中无进位或有借位产生;C=1表示运算过程中有进位或无借位产生/注释符3.2SPCE061A指令系统3.2.1数据传送指令数据传送指令是把源操作数传送到指令所指定的目标地址中,是一种复制操作,指令执行后,源操作数不变,目的操作数被源操作数代替。 数据传送指令的通用格式如下=下面按寻址方式介绍SPCE061A的数据传送指令,表3-2给出了所有的数据传送指令以及各个指令的格式、执行周期数、指令长度及对标志位状态的影响。 语法指令长度/W影响标志周期数Rd=IM16225544Rd=IM61122Rd=BP+IM6Rd=A6Rd=A162277Rd=Rs1144表33-22数据传送类指令语法指令长度/W影响标志周期数Rd=Rs11N N,Z Z44Rd=Rs+Rd=+RsRd=Rs?BP+IM6=Rs66A6=Rs55A16=Rs2277Rd=Rs1166+Rd=RsRd?=RsRd+=Rs下面根据寻址方式的不同来介绍各条指令。 1立即寻址立即寻址分16位立即数寻址和6位立即数寻址。 指令的长度和执行周期不同,其格式分别为格式1Rd=IM16说明16位立即数送入目标寄存器Rd。 格式2Rd=IM6说明6位立即数扩展为16位送入目标寄存器器Rd。 例如R1=0xF001/R1的值变为0xF0012寄存器寻址格式1Rd=Rs说明将源寄存器Rs的数据送到目标寄存器器Rd。 例如R2=0xF001/R2的值为0xF001R1=R2/R1的值变为0xF0013直接寻址格式1Rd=A6说明把A6指定的存储单元中的数据读到Rd寄存器。 格式2Rd=A16说明把A16指定的存储单元中的数据读到到Rd寄存器。 格式3A6=Rs说明把源寄存器Rs中的数据送到A6为地址的存储单元。 格式4A16=Rs说明把源寄存器Rs中的数据存储到A16为地址的存储单元。 例如R1=0x0011/R1的值为0x00110x0011=R1/0x0011单元的值变为0x00114变址寻址格式1Rd=BP+IM6说明以基址指针BP与6位立即数的和为地址,将该存储单元的数据读到Rd寄存器。 格式2BP+IM6=Rs说明把Rs的值存储到基址指针BP与6位立即数之和为地址的存储单元。 例如R1=0x0011BP+0x0002=R1/假设执行前BP=0x1000,执行该指令后为0x1002/(0x1000+0x0002)的存储单元内容置为0x00115寄存器间接寻址格式1Rd=Rs说明把Rs的数据存储到Rd的值所指的存储单元(Rd中存放的是操作数的地址)。 格式2+Rd=Rs说明首先将Rd的值加1,再将Rs的数据存储到Rd所指的存储单元中。 格式3Rd=Rs+说明读取Rs所指的存储单元的值存入Rd中,而后Rs的值加1。 例如+R1=R2该指令先把R1加1,然后将R2的数据存储到以R1中的值为地址的存储单元中。 假设指令执行前R1=0x1000,R2=0x10,执行后R1=0x1001,且地址为0x1001的存储单元值为0x10。 6堆栈操作除以上介绍的传送指令外,堆栈(stack)操作属于一种特殊的数据传送指令,堆栈操作如图3-1所示。 图33-1堆栈操作SPCE061A的堆栈是由高地址向低地址生长的,堆栈指针SP总是指向栈顶的第一个空项,压入一个字后SP减1,将多个寄存器同时压栈,总是序号最高的寄存器先入栈,然后依次压入序号较低的寄存器,序号最低的寄存器最后入栈。 所以,执行指令PUSH R1,R4TOSP与与PUSH R4,R1TOSP是等效的,即将R4,R3,R2,R1压栈,在数据出栈前SP+1,总是先弹出入栈指令中序号最低的寄存器,而后依次弹出序号较高的寄存器,即先进后出,后进先出。 堆栈操作的指令格式PUSH Rx,Ry TOSPPOP Rx,Ry FROMSP说明Rx,Ry可以是R1R 4、BP、SP或或PC中的任意两个或一个,执行后将Rx、Ry的序列寄存器压栈,或将堆栈中的数据弹入Rx、Ry序列寄存器中。 压栈操作不影响标志位,出栈操作影响N和Z标志。 当Rx、Ry中含有SR时,所有的标志位都会改变。 压栈、出栈操作的执行周期为为3n+4,若出栈操作的目的寄存器中含有PC时,执行周期为3n+6,其中n是压栈数据的个数。 压栈和出栈的指令长度均为1字字长。 例如PUSH R1,R5TOSP/将R 5、R 4、R 3、R 2、R1压栈PUSH R2,R2TOSP/将R2压栈PUSH R3TOSP/将R3压栈POP R3FROMSP/R3出栈POP R2,R2FROMSP/R2出出栈栈POP R1,R5FROMSP/R 1、R 2、R 3、R 4、R5出栈3.2.2算术运算指令1加法运算指令加法运算指令如表3-3所示。 语法指令长度/W影响标志周期数Rd+=IM611N,Z,S,C33Rd=Rd+IM6Rd=Rs+IM16226/8Rd+=BP+IM61188Rd=Rd+BP+IM6Rd+=A66/8Rd=Rd+A6Rd=Rs+A16229/11表33-33加法运算指令Rd+=Rs11N,Z,S,C3/8Rd+=Rs7/9Rd+=+RsRd+=Rs?Rd+=Rs+语法指令长度/W影响标志周期数执行加法运算影响标志位N、Z、S和C,寻址方式有以下几种。 ( (1)立即寻址(不带进位)格式1Rd+=IM6或Rd=Rd+IM6操作Rd+IM6Rd说明Rd的数据与6位(高位扩展成16位)立即数相加,结果送Rd。 格式2Rd=Rs+IM16操作Rs+IM16Rd说明Rs的数据与16位立即数相加,结果送送Rd。 例如R1=0x0099/R1的值为0x0099,N=0,Z=0,S=0,C=1R1+=0x0001/R1的值为0x009A,N=0,Z=0,S=0,C=0R1+=0xFFFE/R1的值为0x0098,N=0,Z=0,S=0,C=1( (2)直接寻址格式1Rd+=A6或Rd=Rd+A6操作Rd+A6Rd说明Rd的数据与6位地址指定的存储单元中的数据相加,结果送Rd。 格式2Rd=Rs+A16操作Rs+A16Rd说明Rs的数据与16位地址指定的存储单元中的数据相加,结果送Rd。 例如R2=0x0010/R2的值为0x0010,N=0,Z=0,S=0,C=10x0088=R2/把0x0010送到内存单元元0x0088中,标志位不变R1=0xF099/R1的值为0xF099,N=1,Z=0,S=0,C=1R1+=0x0088/R1的值为0xF0A9,N=1,Z=0,S=1,C=0( (3)变址寻址格式Rd+=BP+IM6或Rd=Rd+BP+IM6操作Rd+BP+IM6Rd说明取基址指针BP与6位立即数的和作为存储单元的地址,存储单元中的数据与Rd相加,结果送Rd寄存器。 例如R1=0x0010/R1的值为0x0010,N=0,Z=0,S=0,C=1R2=0x0090/R2的值为0x0090,N=0,Z=0,S=0,C=10x0015=R2/R2的值送到0x0015内存单元,标志位不变R1+=BP+0x0015/R1的值为0x00A0,N=0,Z=0,S=0,C=0( (4)寄存器寻址格式Rd+=Rs操作Rd+RsRd说明Rd与Rs中的数据相加,结果送Rd。 例如R1=0x0010/R1的值为0x0010R2=0x0032/R2的值为0x0032R1+=R2/R1的值变为0x0042( (5)寄存器间接寻址格式1Rd+=Rs操作Rd+RsRd说明Rd中的数据与Rs所指定的存储单元中的数据相加,结果送Rd。 格式2Rd+=Rs+操作Rd+RsRd,Rs+1Rs说明Rd中的数据与Rs所指定的存储单元中的数据相加,结果送Rd,并且Rs=Rs+1。 格式3Rd+=Rs?操作Rd+RsRd,Rs?1Rs说明Rd中的数据与Rs所指定的存储单元中的数据相加,结果送Rd,并且Rs=Rs?1。 格式4Rd+=+Rs操作Rs+1Rs,Rd+RsRd说明首先修改Rs=Rs+1,然后Rd中的数据与Rs所指定的存储单元中的数据相加,结果送Rd。 例如R1=0x0010/R1的值为0x0010,N=0,Z=0,S=0,C=1R2=0x0020/R2的值为0x0020,N=0,Z=0,S=0,C=10x0010=R2/R2的值送到内存单元0x0010中,标志位不变R2=0x0010/R2的值为0x0010R1+=R2+/R1的值变为0x0030,N=0,Z=0,S=0,C=0/同时R2的值变为0x0011注意有符号数的溢出只需判断N和S两位,N!=S时溢出,N=S时无溢出。 2带进位的加法运算指令带进位的加法指令和不带进位的加法指令在寻址方式、周期数、指令长度和影响的标志位上均相同,在格式上也相似。 它们唯一的区别就是带进位的加法指令在执行加法时进位标志也参加加法运算。 这里不再举例,其详细的指令如表3-4所示。 语法指令长度/W影响标志周期数Rd+=IM6,Carry11N N,Z Z,S S,C33Rd=Rd+IM6,Carry Rd=Rs+IM16,Carry226/8Rd+=BP+IM6,Carry1188Rd=Rd+BP+IM6,Carry Rd+=A6,Carry6/8表33-44带进位的加法运算指令Rd=Rs+A16,Carry22N N,Z Z,S S,C9/11Rd+=Rs,Carry113/8Rd+=Rs,Carry Rd+=+Rs,Carry7/9Rd+=Rs?,Carry Rd+=Rs+,Carry语法指令长度/W影响标志周期数3减法运算指令同不带进位的加法运算一样,不带进位的减法运算同样可分为立即寻址、直接寻址、寄存器寻址和寄存器间接寻址等方式。 减法运算指令影响标志位N、Z、S、C。 减法运算指令如表3-5所示。 语法指令长度/W影响标志周期数Rd?=IM611N N,Z Z,S S,C C33Rd=Rd?IM6Rd=Rs?IM16226/8Rd?=BP+IM61188Rd=Rd?BP+IM6Rd?=A66/8Rd=Rd?A6Rd=Rs?A16229/11表33-55减法运算指令Rd?=Rs11N N,Z Z,S S,C3/8Rd?=Rs7/9Rd?=+RsRd?=Rs?Rd?=Rs+语法指令长度/W影响标志周期数( (1)立即寻址(不带进位)格式1Rd?=IM6或Rd=Rd?IM6操作Rd?IM6Rd说明Rd的数据减去6位(高位扩展成16位)立即数,结果送Rd。 格式2Rd=Rs?IM16操作Rs?IM16Rd说明Rs的数据减去16位立即数,结果送Rd。 例如R1=0x0010/R1的值为0x0010,N=0,Z=0,S=0,C=1R1?=0x0001/R1的值为0x000F,N=0,Z=0,S=0,C=1( (2)直接寻址格式1Rd?=A6或Rd=Rd?A6操作Rd?A6Rd说明Rd的数据减去A6存储单元中的数据,结果送Rd。 格式2Rd=Rs?A16操作Rs?A16Rd说明Rs的数据减去A16存储单元中的数据,结果送Rd。 例如R1=0x0002/R1的值为0x0002,N=0,Z=0,S=0,C=10x0020=R1/把R1的值送到内存单元0x0020中,标志位不变R2=0x0001/R2的值为0x0001,N=0,Z=0,S=0,C=1R2?=0x0020/R2的值变为0xFFFF,N=1,Z=0,S=1,C=0( (3)变址寻址格式Rd?=BP+IM6或Rd=Rd?BP+IM6操作Rd?BP+IM6Rd说明Rd的值减去基址加变址指定的存储单元的值,结果送Rd寄存器。 例如R1=0x8001/R1的值为0x8001,N=1,Z=0,S=0,C=1R2=0x0020/R2的值为0x0020,N=0,Z=0,S=0,C=10x0015=R2/把0x0020送到地址单元元0x0010,标志位不变R1?=BP+0x0015/R1的值变为0x7FE1(设BP=0x0000)/N=0,Z=0,S=1,C=1( (4)寄存器寻址格式Rd?=Rs操作Rd?RsRd说明寄存器Rd的数据减去Rs的数据,结果送Rd。 例如R1=0x7FFF/R1的初值为0x7FFF,N=0,Z=0,S=0,C=1R2=0x8000/R2的初值为0x8000,N=1,Z=0,S=0,C=1R1?=R2/R1的值变为0xFFFF,N=1,Z=0,S=0,C=0( (5)寄存器间接寻址格式1Rd?=Rs操作Rd?RsRd说明Rd的数据与Rs所指定的存储单元中的数据相减,结果送Rd。 格式2Rd?=Rs+操作Rd?RsRd,Rs+1Rs说明Rd的数据与Rs所指定的存储单元中的数据相减,结果送Rd,并且Rs=Rs+1。 格式3Rd?=Rs?操作Rd+RsRd,Rs?1Rs说明Rd的数据与Rs所指定的存储单元中的数据相减,结果送Rd,并且Rs=Rs?1。 格式4Rd?=+Rs操作Rs+1Rs,Rd?RsRd说明首先修改Rs=Rs+1,然后Rd中的数据与Rs所指定的存储单元中的数据相减,结果送Rd。 4带进位的减法运算指令带进位的减法指令和不带进位的减法指令的唯一区别就是执行减法时进位标志也参与了减法运算。 其详细的指令如表3-6所示。 语法指令长度/W影响标志周期数Rd?=IM6,Carry11N N,Z Z,S S,C C33Rd=Rd?IM6,Carry Rd=Rs?IM16,Carry226/8Rd?=BP+IM6,Carry1188Rd=Rd?BP+IM6,Carry Rd?=A6,Carry6/8Rd=Rd?A6,Carry Rd=Rs?A16,Carry229/11表33-66带进位的减法运算指令语法指令长度/W影响标志周期数Rd?=Rs,Carry11N N,Z Z,S S,C C3/8Rd?=Rs,Carry7/9Rd?=+Rs,Carry Rd?=Rs?,Carry Rd?=Rs+,Carry5取补运算指令取补运算用于求一个数的补码,在计算机中表示为取其反码再加1,SPACE061正是这样处理的。 取补运算指令影响标志位位N、Z,可以采用6种寻址方式中的任何一种。 表3-7列出了所有的取补运算指令。 语法指令长度/W影响标志周期数Rd=?IM611N N,Z33Rd=?IM16226/8Rd=?BP+IM61188Rd=?A66/8Rd=A16229/11表33-77取补运算指令Rd=?Rs11N N,Z Z3/8Rd=?Rs7/9Rd=?+RsRd=?Rs?Rd=?Rs+语法指令长度/W影响标志周期数例如计算数?600与0x0040单元数据的差。 R1=?600R2=0x00010x0040=R2BP=0x0040/取该单元地址R2=BP/取此数的补码,1的补码为0xFFFF R1+=R2/相加,结果送R16乘法运算指令SPCE061A提供16位乘法指令,乘法指令分为两种,一种是有符号数相乘,一种是无符号数和有符号数相乘。 乘法指令不影响标志位。 表3-8列出了乘法运算的指令格式、周期等。 语法指令长度/W影响标志周期数MR=Rd*Rs,ss11无12MR=Rd*Rs,us表33-88乘法运算指令表中,Rd和Rs可用R1R2和BP;MR由R 4、R3构成,R4为高位字,R3为低位字。 如果有符号数和无符号数相乘,则指令的第一个数据Rd是无符号数,第二个数据Rs是有符号数。 格式1MR=Rd*Rs或MR=Rd*Rs,ss功能Rd*RsMR说明表示两个有符号数相乘,结果送MR寄存器。 格式2MR=Rd*Rs,us功能Rd*RsMR说明表示无符号数与有符号数相乘,结果送MR寄存器。 例如计算一年365天共有多少小时,结果存放R4(高位)、R3(低位)。 R1=365/R1的值为0x016D R2=24/R2的值为0x0018MR=R1*R2,us/计算乘积,结果果R3的值为0x2238,R4的值为0x00007内积运算指令SPCE061A提供速度较快的n项内积指令,使其具有信号处理(DSP)的功能,在处理复杂的数字运算时能够获得较高的运算速度。 表3-9列出了内积指令格式。 语法指令长度/W影响标志周期数MR=Rd*Rs,ss,n n11无10n n+8MR=Rd*Rs,us,n n表33-99n n项内积运算指令格式MR=Rd*Rs,ss,n或MR=Rd*Rs,us,n功能Rd与Rs寄存器的内容作为地址的存储器内的有符号数与有符号数之间或无符号数与有符号数之间进行n项内积运算,结果存入由R4和R3组成的32位寄存器MR中,其中R4为乘积的高字节,R3为乘积的低字节。 符号的默认选择为ss,即有符号数之间的运算。 n的取值为116,默认值为1。 其操作过程如图3-2所示。 图33-2内积运算操作示意图注( (1)Rs和Rd中任意一个都不能为R3或R4;( (2)Rs和Rd不能为同一个寄存器。 说明当自动移动功能开放(FIR_MOV ON)时,允许运算过程中数据自由移动,为新样本取代旧样本进行数据移动准备X n?4=X n?3,X n?3=X n?2,X n?2=X n?1。 如图3-2所示,当完成一次内积运算后,X 1、X 2、X3自动右移,X4移出。 这在数字信号处理中十分有用。 比如需要计算连续4次采样值的平均值,可将采样值放到X1X4中,加权系数放到C中,然后完成Rd*Rs,ss,4运算,再求平均值。 当FIR_MOV ON时,运算完后后X 1、X 2、X3自动右移,X4移出,这样就可以把下一次的采样值X0放到原X1的位置,下一次直接完成Rd*Rs,ss,4运算,即X0X3的运算,不必手动移动X n。 如果自动移动功能关闭(FIR_MOV OFF),则求和后Rd指向的存储器中的数据内容不变。 例如首先在IRAM中定义8个变量。 在程序的第一循环阶段,计算的值为2*5+3*6,即结果为1C;第一循环结束后,由于移位的作用,N0_3的值被N0_2的值取代,为0x0002,而N0_2的值不变,再次循环后值为为2*5+3*6,即结果为0x001C。 /*定义8个变量,分别赋值,N0_7,N0_8为默认值0*/.VAR N0_1=0x0001,N0_2=0x0002,N0_3=0x0003,N0_4=0x0004.VAR N0_5=0x0005,N0_6=0x0006,N0_7,N0_8.CODE.PUBLIC_MAIN_mainFIR_MOV ON/数据自动移动允许信号R1=N0_2/定义起始位R2=N0_5MR=R1*R2,us,2/2项内积运算N0_7=R3/通过N0_7,N0_8可以读出结果N0_8=R4NOP JMP_main/跳转到主程序RETF8比较运算指令比较指令执行两数的减法操作,不存储运算结果,只影响标志位N、Z、S、C,比较指令的格式如表3-10所示。 语法指令长度/W影响标志周期数CMP Rd,IM611N N,Z Z,S S,C C33CMP Rd,IM16226/8CMP Rd,BP+IM61188CMP Rd,A66/8CMP Rd,A16229/11表33-10比较运算指令CMP Rd,Rs11N N,Z Z,S S,C3/8CMP Rd,Rs7/9CMP Rd,+RsCMP Rd,Rs?CMP Rd,Rs+语法指令长度/W影响标志周期数下面按寻址方式分别介绍比较指令。 ( (1)立即寻址格式1CMP Rd,IM6说明将Rd中的值与6位立即数相减,进行比较。 格式2CMP Rd,IM16说明将Rd中的值与16位立即数相减,进行比较。 ( (2)直接地址寻址格式1CMP Rd,A6说明将Rd的值与A6指定地址单元中的数据相减,进行比较。 格式2CMP Rd,A16说明将Rd的值与A16指定地址单元中的数据相减,进行比较。 ( (3)变址寻址格式CMP Rd,BP+IM6说明将Rd与BP+IM6指定地址单元中的数据相减,进行比较。 ( (4)寄存器寻址格式CMP Rd,Rs说明将Rd与Rs的值相减,进行比较。 ( (5)寄存器间接寻址格式1CMP Rd,Rs说明将Rd中的值与寄存器Rs指定的存储单元中的数据相减,进行比较。 格式2CMP Rd,Rs+说明将Rd中的值与寄存器Rs指定的存储单元中的数据相减,进行比较,且Rs=Rs+1。 格式3CMP Rd,Rs?说明将Rd中的值与寄存器Rs指定的存储单元中的数据相减,进行比较,且Rs=Rs?1。 格式4CMP Rd,+Rs说明Rs加1,再将Rd中的值与寄存器Rs指定的存储单元中的数据相减,进行比较。 比较指令主要用于判断,然后实现条件转移。 例如CMP R1,0x1000JE Label_1/若R1=0x1000,则跳转到Label_13.2.3逻辑运算指令SPCE061A的逻辑运算和移位指令用于对字节进行按位操作,主要包括与、或、异或、测试、移位和循环等逻辑操作指令。 其中与、或、异或这3条指令的语法格式、指令周期以及影响的标志位完全相同,仅仅是计算时有所不同,故把它们放在一起介绍。 1逻辑与、或、异或指令逻辑与、或、异或指令影响标志位N和和Z,指令如表3-11所示。 语法指令长度/W影响标志周期数Rd*=IM611N N,Z Z33Rd=Rd*IM16Rd=Rs*IM16226/8Rd*=BP+IM61188Rd=Rd*BP+IM6Rd*=A6Rd=Rd*A66/8Rd=Rd*A16229/11表33-11逻辑运算指令Rd*=Rs11N N,Z Z3/8Rd*=Rs7/9Rd*=+RsRd*=Rs?Rd*=Rs+语法指令长度/W影响标志周期数( (1)立即寻址格式1Rd&=IM6或Rd=Rd&IM6功能Rd&IM6Rd说明将Rd的数据与6位立即数进行逻辑与操作,结果送Rd寄存器。 格式2Rd=Rs&IM16功能Rs&IM16Rd说明将Rs的数据与16位立即数进行逻辑与操作,结果送Rd寄存器。 ( (2)直接寻址格式1Rd&=A6或Rd=Rd&A6功能Rd&A6Rd说明将Rd和A6指定存储单元中的数据进行逻辑与操作,结果送Rd寄存器。 格式2Rd=Rs&A6功能Rs&A16Rd说明将Rs中的数据和A16指定存储单元中的数据进行逻辑与操作,结果送Rd寄存器。 ( (3)寄存器寻址格式Rd&=Rs或Rd=Rd&Rs功能Rd&RsRd说明将Rd和Rs中的数据进行逻辑与操作,结果送Rd寄存器。 ( (4)寄存器间接寻址格式1Rd&=Rs功能Rd&RsRd说明将Rd中的数据与Rs指定的存储单元中的数据进行逻辑与操作,结果送Rd寄存器。 格式2Rd&=Rs+功能Rd&RsRd,Rs+1Rs说明将Rd中的数据与Rs指定的存储单元中的数据进行逻辑与操作,结果送Rd寄存器,并使Rs加1。 格式3Rd&=Rs?功能Rd&RsRd,Rs?1Rs说明将Rd中的数据与Rs指定的存储单元中的数据进行逻辑与操作,结果送Rd寄存器,并使Rs减1。 格式4Rd&=+Rs功能Rs+1Rs,Rd&RsRd说明Rs加1,然后将Rd中的数据与Rs指指定的存储单元中的数据进行逻辑与操作,结果送Rd寄存器。 例如假设开始时的标志位为N=0,Z=1,S=0,C=1。 R1=0x00FF/R1初值为0x00FF,Z=0,N=0R2=0xFFFF/R2初值为0xFFFF,Z=0,N=10x0001=R2R2=0x0001R1&=R2/结果为0x00FF,执行后标志位N=0,Z=0例如假设开始时的标志位为N=0,Z=1,S=0,C=1。 R1=0x00FF/R1初值为0x00FF,Z=0,N=0R2=0xFFFF/把0xFFFF送到地址单元0x00020x0002=R2R2=0x0002/R2的值为0x0002,Z=0,N=0R1|=R2/R1的值为0xFFFF,执行后标志位N=1,Z=0例如假设开始时的标志位为N=0,Z=1,S=0,C=1。 R1=0x0000/R1初值为0x0000,Z=1,N=0R2=0xFFFF/R2的值为0xFFFF,Z=0,N=10x0002=R2R2=0x0002R1=R2/R1的值为0xFFFF,执行后标志位N=1,Z=02测试指令( (1)立即寻址格式1TEST Rd,IM6说明将Rd与IM6进行逻辑与操作,不存储结果,只影响N和Z标志位。 格式2TEST Rd,IM16说明将Rd与IM16进行逻辑与操作,不存储结果,只影响N和Z标志位。 语法指令长度/W影响标志周期数TEST Rd,IM611N N,Z Z33TEST Rd,IM16226/8TEST Rd,BP+IM61188TEST Rd,A66/8TEST Rd,A16229/11表33-12测试指令TEST Rd,Rs11N N,Z Z3/8TEST Rd,Rs7/9TEST Rd,+RsTEST Rd,Rs?TEST Rd,Rs+语法指令长度/W影响标志周期数( (2)变址寻址格式TEST Rd,BP+IM6说明将Rd与BP+IM6指定的存储单元的数据进行逻辑与操作,不存储结果,只影响响N和Z标志位。 ( (3)直接寻址格式1TEST Rd,A6说明将Rd与A6指定存储单元的数据进行逻辑与操作,不存储结果,只影响N和Z标标志位。 格式2TEST Rd,A16说明将Rd与A16指定存储单元的数据进行逻辑与操作,不存储结果,只影响N和Z标志位。 ( (4)寄存器寻址格式TEST Rd,Rs说明将Rd与Rs的数据进行逻辑与操作,不存储结果,只影响N和Z标志位。 ( (5)寄存器间接寻址格式1TEST Rd,Rs说明将Rd与Rs指定存储单元中的数据进行逻辑与操作,不存储结果,只影响N和Z标志位。 格式2TEST Rd,Rs+说明将Rd与Rs指定存储单元中的数据进行逻辑与操作,不存储结果,只影响N和Z标志位,并且使Rs加1。 格式3TEST Rd,Rs?说明将Rd与Rs指定存储单元中的数据进行逻辑与操作,不存储结果,只影响N和Z标志位,并且使Rs减1。 格式4TEST Rd,+Rs说明首先将Rs加1,然后Rd与Rs指定存储单元中的数据进行逻辑与操作,不存储结果,只影响N和Z标志位。 3移位指令SPCE061A的移位运算包括逻辑左移、逻辑右移、循环左移、循环右移、算术右移等操作,移位的同时还可以进行其他运算,如加、减、比较、取负、与、或、异或、测试等。 指令长度为1,指令周期为3/8,影响N、Z标志位。 由于硬件原因,移位操作每条指令可以移14位,SB的S3S0参与移位操作。 SB是nSP TM内核中的移位缓冲器。 SPCE061的移位运算指令格式完全相同,其指令格式如表3-13所示。 语法指令长度/W影响标志周期数Rd=Rs OPn n11N N,Z Z3/8TEST Rd,Rs OPn nRd=Rs OPn nRd|=Rs OPn nRd&=Rs OPn nRd=?Rs OPn nRd+=Rs OPn n,CarryN N,Z Z,S S,C C3/8Rd=Rs OPn n,CarryCMP Rd,Rs OPs表33-13移位指令注意表3-13中的OP可以是LSL(逻辑左移),LSR(逻辑右移),ROL(循环左移)、ROR(循环右移)、ASR(算术右移)。 ( (1)逻辑左移(LSL)格式Rd=Rs LSLn说明对Rs进行n(可设为14)位逻辑左移,将Rs高n位移入SB寄存器,同时Rs的低n(14)位用0补足,结果送Rd寄存器。 假如n=3,则逻辑左移的操作过程如图3-3所示。 图33-3逻辑左移示意图从图3-3可以看出,每向左移动一次,实际上相当于Rs乘以2。 例如R1=0xF00F/R1的初值为0xF00F R1=R1LSL3/R1左移3位后的值变为0x8078( (2)逻辑右移(LSR)格式Rd=Rs LSRn说明对Rs进行n(可设为14)位逻辑右移,将Rs低n位移入SB寄存器,同时Rs的高n(14)位用0补足,结果送Rd寄存器。 假如n=3,则逻辑右移的操作过程如图3-4所示。 图33-4逻辑右移示意图例如R1=0xF00F/R1的初值为0xF00F R1=R1LSR3/R1右移3位后的值变为0x1E01( (3)循环左移格式Rd=Rs ROLn说明对Rs进行n(可设为14)位循环左移,将Rs高n位移入SB寄存器,同时将SB寄存器的高n位移入Rs的低n位,结果送Rd寄存器。 假如n=1,则循环左移的操作过程如图3-5所示。 图33-5循环左移示意图例如R1=0x0010/R1的初值为0x0010R1=R1ROL1/R1循环左移1位后的值变为为0x002

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论