第3章CPU12指令系统_第1页
第3章CPU12指令系统_第2页
第3章CPU12指令系统_第3页
第3章CPU12指令系统_第4页
第3章CPU12指令系统_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

基于HCS12的嵌入式系统设计合肥工业大学机械与汽车工程学院滕勤2014.4第3章CPU12指令系统本章内容

3.1概述

3.2CPU12汇编指令的格式和符号说明

3.3寻址方式(AddressingMode)

3.4S12汇编指令系统基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.1概述【基本概念回顾】【指令】计算机能直接识别和执行的命令,即每个有效的二进制编码组。【指令系统(InstructionSystem)】一种计算机CPU所能执行的全部指令的集合。【指令程序或机器语言】由指令码(机器码)组成的程序。【指令助记符(instructionmnemonicsymbol)】用一组有一定含义的字符表示的指令,一般采用相关的英文单词缩写。【汇编语言源程序】利用指令助记符编写的程序。【操作码(OperatingCode,Opcode)】规定一条指令完成何种操作。【操作数(Operand)】指令所完成操作的对象。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.2CPU12汇编指令的格式和符号说明

[标号]操作码[操作数1],[操作数2][;注释]3.2.1操作码和操作数【CPU12指令组成】(前导字节)+操作码(+后随字节+扩展字节)位于第二页的操作码之前均冠以前导字节(prebyte)$18。【后置字节作用】提供了一定形式的变址寻址、传送、交换和循环的基址寄存器和偏移量的符号等信息。【扩展字节作用】包含有附加的程序信息,例如地址、偏移量和立即数等。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.2CPU12汇编指令的格式和符号说明3.2.2数据类型CPU12支持8种数据类型:位数据(1位);5位带符号整数;8位带/无符号整数;字节型组合BCD数(8位);9位带符号整数;16位带/无符号整数;16位有效地址;32位带/无符号整数。3.2.3数据表示方法十进制整数可直接使用;16进制数在数字前面加“$”;二进制数前加“%”;立即数应在数据前加“#”。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.2CPU12汇编指令的格式和符号说明3.2.4寄存器和存储器表示法【寄存器表示法】寄存器用名称表示,不分大小写;M(Memorylocation)表示由指令有效地址指向的8位存储单元;R(Result)表示算术或逻辑运算结果;I(Intermediateresult)表示算术或逻辑运算的中间结果。寄存器和存储器符号加下标“n”时,表示是它的第n位;16位寄存器符号后加下标“H”或“L”时,表示其高位字节或低位字节。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.2.4寄存器和存储器表示法【存储器表示法】M:M+1表示16位存储器,由M和M+1相邻两个存储单元组成。M~M+3表示32位存储器,由4个相邻的存储单元M、M+1、M+2、M+3组成;(M:M+1)表示两个相邻存储单元的内容组成的1个字,(M)为高位字节,(M+1)为低位字节;符号()表示内容,如M(X)、M(SP)分别是由变址寄存器X和堆栈指针SP所指向的存储单元,M(y+3)是由变址寄存器Y+3后指向的存储单元。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3寻址方式【寻址】寻找操作数地址的过程。【有效地址】(EffectiveAddress):操作数所在的地址。【寻址方式】(AddressingMode):通过确定操作数所在的位置(地址),提取操作数的方法。CPU12共有6类寻址方式,即固有寻址、立即寻址、直接寻址、扩展寻址、相对寻址和变址寻址。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.1隐含/固有寻址(InherentAddressing,INH)【固有寻址】有效地址包含在操作码中,也称为隐含寻址(Impliedaddressing),又因为操作数总是处于CPU的寄存器之中,还称为寄存器寻址(Registeraddressing)。【特征】在指令助记符中出现寄存器的名称,有时甚至连寄存器的名称都不出现。

机器码指令操作187CLRA;$00→A251COMB;(/B)→B312MUL;(A)(B)=A:B→D41816SBA;(A)-(B)→A基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3寻址方式3.3.2立即寻址(ImmediateAddressing,IMM)【立即寻址】指令的操作数是一个8位或16位二进制数。【立即数】指令中出现的操作数。为了与直接地址相区别,立即数前必须加“#”号。立即寻址常用来给寄存器赋值。

MAXCNTequ13

INITSPequ$02FF机器码指令操作1860DLDAA #MAXCNT ;$0D→A2CF02FFLDS #INITSP ;$02FF→SP3CE1234LDX #$1234 ;$1234→X48A0BORAA #%00001011 ;(A)|$0B→A基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.3直接寻址(DirectAddressing,DIR)【直接寻址】指令中直接给出操作数地址的寻址方式。

机器码指令操作9655LDAA$55;($0055)→ADC20LDX$20;($0020:$0021)→X3.3.4扩展寻址(ExtendedAddressing,EXT)【扩展寻址】指令中直接给出操作数完整16位地址的寻址方式。STAA $3050 ;(A)→$3050

机器码指令 操作:($0040)→AB60040LDAA$0040 ;使用扩展寻址 B60040LDAA>$40 ;强制使用扩展寻址基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3寻址方式3.3.5相对寻址(RelativeAddressing,REL)相对寻址只出现在相对转移指令(relativebranchinstruction)中。【相对寻址】当前的PC值加上指令中规定的地址偏移量relx,构成操作数实际地址的寻址方式。目的地址=源地址+转移指令字节数+relx【源地址】转移指令所在的地址【目的地址】转移程序所在的首地址偏移量为8位、9位和16位带符号二进制补码。短转移的偏移量为$80~$7F(-128~+127);循环控制指令支持9位偏移量,其数值为$100~$0FF(-256~+255);长转移的偏移量为$8000~$7FFF(-32768~32767)。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3寻址方式3.3.5相对寻址(RelativeAddressing,REL)如果偏移量为0,则CPU立即执行紧接着转移指令的下一条指令。由于偏移量是在转移指令的末尾,采用负的偏移量值可以使PC指向操作码并开始循环。机器码指令 操作20FETRAPBRATRAP ;PC-2→PC TRAPLBRATRAP ;PC-3→PC程序利用转移指令返回到指令首址,程序在该行落入陷阱,称为“原地踏步”。这是一种终止程序的普通方法,广泛用于程序调试。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3寻址方式3.3.6变址寻址(IndexedAddressing,IDX)变址寻址是CPU12的主要寻址方式,也是本节的重点和难点。【变址寻址】以某个寄存器的内容为基本地址,然后在这个基本地址上加上地址偏移量,形成操作数地址或存放操作数地址的地址,并将这个地址单元的内容作为指令的操作数。CPU12共有4类不同的变址寻址方式,这4类又可进一步分解成12种不同的变址寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3寻址方式3.3.6变址寻址(IndexedAddressing,IDX)【变址寻址指令组成】1个操作码字节+1个后置(随)字节(postbyte)+0~2个扩展字节(extensionbyte)。【操作码】表明指令功能和变址寻址方式。【后置字节】(在指令代码表中用xb描述)提供变址寻址方式的具体信息,如所使用的变址寄存器、偏移量的符号、变址寄存器的自动递增/递减方式等。当偏移量大于5位二进制数时,需要采用扩展字节,用来表示偏移量的大小。所有变址寻址方式都采用一个16位寄存器和附加信息来产生一个有效地址。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.1常数偏移变址寻址(ConstantOffsetIndexedAddressing)【常数偏移变址寻址】将变址寄存器的内容加上一个常数形成操作数地址。有三种不同的偏移量:5位、9位和16位。语法:operation,r;无偏移operation0,r;无偏移operationn,r;正常数偏移量operation-n,r;负常数偏移量

r是变址寄存器(IX,IY,SP,PC),n/-n是带符号偏移量(5位、9位、16位)。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.1常数偏移变址寻址(ConstantOffsetIndexedAddressing)A、5位常数偏移变址寻址IDX(5-BitConstantOffsetIndexedAddressing)【指令组成】1个操作码字节+1个后置字节偏移量为5位带符号数,偏移量大小为:-16~+15,5位偏移量隐含在后随字节中,有效地址=变址寄存器内容+5位地址偏移量。例如:若X=$1000,Y=$2000LDAA0,X ;($1000)→ASTAB-8,Y ;(B)→$1FF8,$2000-$8=$1FF8基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.1常数偏移变址寻址(ConstantOffsetIndexedAddressing)B、9位常数偏移变址寻址IDX1(9-BitConstantOffsetIndexedAddressing)【指令组成】1个操作码字节+1个后置字节+1个扩展字节。9位带符号偏移量的地址偏移范围:-256~+255,偏移量的符号位在后随字节中,偏移量大小在扩展字节中,操作数地址=变址寄存器内容+9位带符号常数偏移量。例如:X=$1000,Y=$2000LDAA$FF,X;($10FF)→A($1000+$FF=$10FF)

LDAB-20,Y;($1FEC)→B($2000-$14=$1FEC)基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.1常数偏移变址寻址(ConstantOffsetIndexedAddressing)C、16位常数偏移变址寻址IDX2(16-BitConstantOffsetIndexedAddressing)【指令组成】1个字节操作码+1个后置字节+2个扩展字节。有效地址=变址寄存器内容+两个偏移量扩展字节。可以访问64KB地址空间中的任何单元。

LDAA$04,X ;($04+X)→ALDD$10,Y ;($10+Y):($10+Y+1)→DLDAA$1000,PC ;($1000+PC)→A基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.2自动递增/递减变址寻址IDX(Autoincrement/AutodecrementIndexedAddressing)在CPU12的变址寻址方式中,提供了4种方法自动改变基址寄存器的内容,并作为指令执行的一部分。变址寻址前或变址寻址后,变址寄存器中的数值可以加上或减去一个整数值,增加值的范围是0000~0111(+1~+8),减少值范围是1111~1000(-1~-8)。汇编指令语法:

operationn,+r;先递增operationn,r+;后递增operationn,-r;先递减operationn,r-;后递减n=调节值,1≤n≤8,r=变址寄存器(IX,IY,SP)。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.2自动递增/递减变址寻址IDX(Autoincrement/AutodecrementIndexedAddressing)先递增或先递减指令——变址寄存器内容在访问内存单元之前变化,相当于前面常数偏移变址寻址。后递增或后递减指令——用变址寄存器中的初值访问内存单元,然后才改变变址寄存器中的内容。【指令组成】(前导字符$18)+1个操作码字节+1个后置字节

后置字节基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.2自动递增/递减变址寻址IDX(Autoincrement/AutodecrementIndexedAddressing)

STAA1,-SP ;(SP)-1→SP,(A)→(SP),=PSHASTX2,-SP ;(SP)-2→SP,(XH:XL)→MSP:MSP+1,=PSHXLDX2,SP+ ;(MSP:MSP+1)→XH:XL,(SP)+2→SP,=PULXLDAA1,SP+ ;(MSP)→A,(SP)+1→SP,=PULA自动递增/自动递减变址寻址方式可以用来对存储器中的一系列数据结构进行操作。例如:将X寄存器指向的宽度为4字节的列表中数据传给Y寄存器指向的宽度为2字节的列表中。

MOVW4,X+,2,Y+;(X:X+1)→Y:Y+1,X+4→X,Y+2→Y从表元素为1个字的列表中传送1个字的数据到每个表元素为4个字节的另一个表格中:

MOVW2,X+,4,+Y基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.3累加器偏移变址寻址IDX(AccumulatorOffsetIndexedAddressing)【累加器偏移变址寻址】变址寄存器中的内容与累加器中的无符号偏移量相加,构成有效地址。偏移量必须先置于累加器中,累加器可以是A、B、D。语法:operationA,r;偏移量在A中operationB,r;偏移量在B中operationD,r;偏移量在D中A、B、D-累加器(偏移寄存器);r-变址寄存器(X、Y、SP、PC)。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.3累加器偏移变址寻址IDX(AccumulatorOffsetIndexedAddressing)【累加器偏移变址寻址指令组成】操作码+1个后置字节例:LDAAB,X ;(B+X)→A例:LDY#SEG_TBL;SEG_TBL→YLDAADisp_Var;(Disp_Var)→A

LDAAA,Y;(A+Y)→ASTAADISP_REG;A→DISP_REGSEG_TBL——显示段码表首地址Disp_Var——被转换的数字、字母DISP_REG——显示缓冲区地址基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.4间接变址寻址(IndirectIndexedAddressing)【寄存器间接寻址】操作数地址以寄存器名称的形式间接给出。【间接变址寻址】变址寄存器中的内容与一个16位偏移量相加形成一个地址,但该地址并不是操作数的地址,它所指向的地址单元中的内容才是操作数的有效地址。偏移量既可以是一个16位的常数偏移量,也可以是累加器中的内容。指令语法:

operation[D,r];偏移量在累加器D中

operation[n,r];n是16位常数偏移量

D-含有偏移量的寄存器D;n-16位常数偏移量;r-变址寄存器(X、Y、SP、PC)。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3寻址方式3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.4间接变址寻址(IndirectIndexedAddressing)指令操作码之后需要一个后置字节,用来规定偏移量的来源和变址寄存器的名称。对于常数偏移量的方式,后置字节之后还需要跟两个扩展字节,用于存放16位偏移量常数。后置字节编码:

基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.4间接变址寻址(IndirectIndexedAddressing)A、16位常数偏移间接变址寻址[IDX2](16-BitConstantIndirectIndexedAddressing)将由指令提供的16位偏移量与基址变址寄存器(baseindexingregister)的内容相加,形成一个地址(指针),指向一个存放操作数地址的单元。指令执行时,根据由基址和偏移量所形成的地址指针,首先到指定的地址单元中取得操作数地址,然后再根据操作数地址提取操作数。有效地址为:

effectiveaddress=((twooffsetextensionbytes)+(X、Y、SPorPC))为了将这种寻址方式与16位常数偏移变址寻址方式加以区别,在指令助记符的操作数部分,用一个方括号括起来。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.3.6变址寻址(IndexedAddressing,IDX)3.3.6.4间接变址寻址(IndirectIndexedAddressing)A、16位常数偏移间接变址寻址[IDX2](16-BitConstantIndirectIndexedAddressing)例:设指令执行前X=$1000,($100A)=$20,($100B)=$00,($2000)=$3A,($2001)=$1F。比较以下两条指令的执行情况:LDAA$000A,X ;((X)+$0A)→ALDAA[$000A,X];(((X)+$000A))→A基于HCS12的嵌入式系统设计》第3章CPU12指令系统A、16位常数偏移间接变址寻址[IDX2](16-BitConstantIndirectIndexedAddressing)例:读取一个转移表中的地址,并根据该地址转向相应的子程序。

JMPTBLEQU$1000CMD10FFEQU2

操作码指令操作CE1000LDX#JMPTBL;JMPTBL→X

5E7JSR[D,X] ;((D+X))→PC15E30002JSR[CMD10FF,X];((CMD10FF+X))→PC基于HCS12的嵌入式系统设计》第3章CPU12指令系统B、累加器D间接变址寻址[D,IDX](AccumulatorDIndexed-IndirectAddressing)将累加器D中的内容+基址寄存器的内容,形成一个地址指针,指向存放操作数地址的存储单元。指令执行时,根据基址寄存器和偏移寄存器D中的内容形成一个地址,到该地址单元中找到操作数地址,再由操作数地址取得操作数。有效地址:

effectiveaddress=((D)+(X,Y,SPorPC))为了把这种寻址方式与累加器D偏移变址寻址方式区别开来,用一个方括号将指令助记符的操作数部分括起来。例:设D=$0002JMP[D,PC]GO1DC.WPLACE1GO2DC.WPLACE2

GO3DC.WPLACE3基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统按指令助记符分类,S12共有169种不同的汇编指令。考虑到不同类型的寻址方式,指令数量达594种。按照指令功能,可将指令分为以下几大类:数据传送指令、算术运算指令、逻辑运算指令、转移与子程序调用指令、中断指令、MCU控制指令、高级函数指令、模糊运算指令等。3.4.1数据传送指令数据传送指令将数据从一处复制到另一处,包括:立即加载、寄存器之间的传送与交换、内存传送到寄存器、寄存器传送到内存、内存之间的传送和堆栈操作指令等。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.1寄存器加载指令寄存器加载指令用于将立即数或内存中的操作数传送给寄存器,共6条指令,每条指令支持8种源操作数寻址方式,派生出48条指令。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.1寄存器加载指令LDAA#$5A ;$5A→A,立即寻址IMMLDAB$4000 ;($4000)→B,扩展寻址EXTLDD 4,X ;((X)+4):((X)+4+1)→A:B,

5位常数偏移量变址寻址IDXLDX A,PC ;((PC)+(A)):((PC)+(A)+1)→XH:XL,累加器偏移变址寻址IDXLDS [$1238,X] ;16位常数偏移量间接变址寻址[IDX2]LDY 2,SP+ ;相当于PULY,自动递增变址寻址IDX基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.2有效地址加载指令有效地址加载指令可以用来将操作数地址分别传送到寄存器SP、X和Y中。共3条指令,采用3种变址寻址。指令可将SP、PC、X或Y的值加/减5位、9位或16位常数,或者加上A、B或D的内容,传送到寄存器SP、X和Y中。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.2有效地址加载指令例:LEAS4,SP ;(SP)+4→SP,

5位常数偏移量变址寻址IDXLEAS$0200,SP ;(SP)+$0200→SP,

16位常数偏移量变址寻址IDX2LEAXB,Y ;(Y)+(B)→X,累加器偏移变址寻址IDX注意以下两条指令LEAX4,+X ;X+4→X,(X)→X,自动递增变址寻址IDXLEAX4,X+ ;(X)→X基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.3寄存器存储指令仅限于将寄存器内容送入内存单元,共6条指令,每条指令支持7种源操作数寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.3寄存器存储指令例如:STAA $5A ;直接寻址DIRSTAB $4000,X ;16位偏移量变址寻址IDX2STX $D000 ;扩展寻址EXTSTS [D,PC] ;累加器D间接变址寻址[D,IDX]STY 2,-SP ;相当于PSHY,自动递减变址寻址IDX基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.1数据传送指令3.4.1.4寄存器数据传送指令将源寄存器的内容传送到目的寄存器,共9条指令,均为固有寻址方式。实际上该组指令只有3条,其余指令由汇编程序自动汇编成对应的TFR指令,如表中阴影部分所示。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.1数据传送指令3.4.1.4寄存器数据传送指令【TFR指令的数据传送规则】8位到8位或16位到16位,直接传送;8位到16位,通过符号扩展变成16位后传送;TFRA,X=SEXA,X16位到8位,舍弃高位,只传送低位。【说明】数据从8位寄存器传送到16位寄存器,8位寄存器的内容传送到16位寄存器的低8位,CPU12自动在目的寄存器的最高有效字节中执行一次符号扩展。【符号扩展的原则】如果8位寄存器的最高位是0,则16位寄存器的高8位为$00;如果8位寄存器的最高位是1,则16位寄存器的高8位为$FF。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.5寄存器数据交换指令将源寄存器内容与目的寄存器内容进行交换,共3条指令,均为固有寻址方式。实际上该组指令只有1条EXG指令,XGDX和XGDY指令由汇编程序自动汇编成对应的EXG指令。【注】R1和R2分别是寄存器A、B、CCR、D、X、Y、SP、TMP2、TMP3之一。但TMP3只能作为第1操作数寄存器,TMP2只能作为第2操作数寄存器。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.5寄存器数据交换指令【功能】在任意16位或8位寄存器之间交换数据规则:(1)8位8位或16位16位,直接交换;(2)8位16位,将8位寄存器内容高8位零扩展成16位后,传送到16位寄存器,16位寄存器的低8位传送到8位寄存器;(3)16位8位,16位寄存器的低8位传送到8位寄存器,8位寄存器高8位补$00或$FF后,传送到16位寄存器。其中8位寄存器是A时,高8位补$00;8位寄存器是B或CCR时,高8位补$FF。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.6内存数据移动指令【功能】将源操作数(一个字或字节)送到目地地址,源操作数不变。这是CPU12仅有的两条不涉及内部寄存器而直接进行内存单元之间数据传送的指令,支持6种寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.1数据传送指令3.4.1.7堆栈操作指令CPU12堆栈操作仅限于寄存器与堆栈之间的数据传送,使用堆栈指针SP进行间接寻址。堆栈操作分为进栈和出栈两种,操作循序正好相反,即指针先递减,后压栈;先弹出,指针后递增。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.1加法指令CPU12加法运算分为两类,一类是两个寄存器内容的加法,另一类是寄存器内容与立即数或内存单元内容的加法,运算结果保存在寄存器中。所有加法指令都影响标志位。【寄存器之间的加法】基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.1加法指令【寄存器与立即数或内存单元的加法】共有5条指令。2条带进位的加法指令,3条不带进位的加法指令。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.2.2减法指令CPU12减法运算也分为两类,一类是两个寄存器内容的减法,另一类是寄存器内容与立即数或内存单元内容的减法,运算结果保存在寄存器中,所有减法指令都影响标志位。两个寄存器内容的减法指令为SBA,结果存放在A中。寄存器与立即数或内存单元的减法共有5条指令,2条为带借位的减法指令,3条为不带借位的减法指令。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.3加1和减1指令加1和减1指令用于指针调整或循环控制,每组有6条指令,操作对象是寄存器A、B、X、Y、SP或内存单元。对内存单元的操作支持6种寻址方式,INS和DES指令由汇编程序自动汇编成对应的LEAS指令,为变址寻址IDX方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.4十进制调整指令CPU12只有1条十进制调整指令DAA,根据标志H、C和A中数值的大小做BCD调整,调整规则是:(1)如果A中的低4位>9或标志H=1,则A=A+$06;(2)如果A中的高4位>9或标志C=1,则A=A+$60,同时重置标志C。例:十进制运算7527+1075=8602基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.5清零指令【功能】向寄存器或内存单元中写入$00,与加载立即数$00的指令功能相同,共有3条指令。寄存器清零只针对A和B,为固有寻址方式。内存单元清零指令支持6种寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.6符号扩展指令单字节无符号数通过高位补0可以扩展成任意宽度,而对于有符号数,由于采用补码表示,高位可能需要补0或补1。符号扩展指令SEX为固有寻址方式。【符号扩展方法】将原数据符号位复制到已扩展数据的所有高位。指令要求源操作数是A、B或CCR中的内容,扩展后的结果存放在D、X、Y或SP中。【指令格式】SEXR1,R2;R1=A、B或CCR,R2=D、X、Y或SP,相当于TFRR1,R2基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.7乘法指令S12乘法全部在寄存器内完成,可以实现两个8位或16位的硬件乘法运算,共有3条指令,均为固有寻址方式。EMUL和EMULS指令的区别在于,EMULS指令的结果用补码表示。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.2算术运算指令3.4.2.8除法指令除法全部在寄存器内完成,可以实现16/16位或32/16位的硬件除法运算。EDIV和EDIVS为常规32/16除法指令,分别按无符号数和有符号数相除。FDIV是小数除法指令,即求真分数D/X的值。IDIV和IDIVS分别是无符号和有符号整数16/16除法指令,区别在于IDIVS指令的商和余数用补码表示。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.2算术运算指令3.4.2.9比较指令【功能】将寄存器的内容与立即数或内存单元的内容进行比较,实际上是进行两个操作数的减法运算,并不回送运算结果,只是根据差值设置相应的状态位,作为跳转、循环等的判断条件。这类指令影响标志位N、Z、V、C。比较指令共有7条,除CBA为固有寻址方式外,其余6条指令允许使用8种寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.2算术运算指令3.4.2.10测试指令【作用】检测累加器A、B或内存单元的内容是否≥0。相当于一次减0操作。操作后,源操作数不变,也不保存结果,只是根据结果设置标志位。该类指令有3条,TSTA和TSTB为固有寻址,TST允许使用6种寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.3逻辑运算指令【逻辑运算指令】包括基本逻辑运算、取反和求补、移位、位操作、位逻辑运算和位测试等指令。3.4.3.1基本逻辑运算指令按字节进行“与”、“或”、“异或”逻辑运算,用于将寄存器中的某些位清0或置1,共有8条指令。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.3逻辑运算指令3.4.3.2取反、求补指令【功能】将累加器A、B或内存单元内容取反和求补,结果放回原处。【取反指令】相当于执行一次$FF-(r)或$FF-(M)操作。【求补指令】实际上进行一次$00-(r)或$00-(M)的减法操作。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.3.3位操作与位测试指令【位操作指令】5条,用于将内存单元中的某1位或某几位清0或置1。其中,CCR特征位操作指令CLC、CLI、CLV汇编程序自动汇编成ANDCC指令,为立即寻址方式。内存单元清0、置1指令BCLR和BSET支持5种寻址方式。【位测试指令】有2条,支持8种寻址方式。位测试指令将累加器A、B内容与立即数或内存单元内容进行“逻辑与”运算,但结果并不回送,仅仅根据运算结果设置标志位N、Z、V。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.3逻辑运算指令3.4.3.4逻辑移位指令【逻辑移位指令】共有8条,分为逻辑左移LSL和逻辑右移LSR两种。其中,针对累加器A、B、D的操作为固有寻址,针对内存单元的操作支持6种寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.3逻辑运算指令3.4.3.5算术移位指令【算术移位指令】共有7条,分为算术左移ASL和算术右移ASR两种。其中,针对累加器A、B、D的操作为固有寻址,针对内存单元的操作支持6种寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.3逻辑运算指令3.4.3.6循环移位指令【循环移位指令】共有6条,分为循环左移ROL和循环右移ROR两种。其中,针对累加器A、B的操作为固有寻址,针对内存单元的操作支持6种寻址方式。基于HCS12的嵌入式系统设计》第3章CPU12指令系统【例】阅读该程序段,要求:1)说明程序的功能。2)写出程序执行后涉及到的寄存器和内存单元的最后结果。程序运行前,($3800)=$36。LDX #$3800 ;数据地址LDAB 0,X ;((X))→B,B=$36TFR B,A ;保存到A中,A=$36ANDA #$0F ;屏蔽A中高4位,A=$06STAA1,X ;(A)→(X)+1=$3801,($3801)=$06LSRB ;B内容右移4次,高位补0LSRB ;LSRB ;LSRB ;B=$03STAB 0,X ;(B)→X,($3800)=$03HERE:BRAHERE ;原地踏步【程序功能】将地址$3800存放的压缩BCD码解压缩,存放在$3800:$3801单元中,高位在低地址单元。【程序执行后】($3800)=$03,($3801)=$06,A=$06,B=$03。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.4高级函数指令CPU12的高级函数指令具有高级语言中某些函数的功能,如求最大值、最小值,乘积累加,内插值运算等。3.4.4.1求最大值、最小值指令求最大值、最小值共有8条指令,用于在累加器A、D与内存操作数之间取最大或最小的一个。求最大值和最小值分别有4条指令,支持5种寻址方式。其中,以字母M开头的4条为8位指令,以字母E开头的4条为16位指令。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4.4高级函数指令3.4.4.1求最大值、最小值指令指令自动完成数据的比较和传送,标志位显示比较的结果和是否发生了数据传送。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.4高级函数指令3.4.4.2乘积累加指令【作用】多项式运算乘积累加指令只有1条EMACS,采用特殊寻址方式。可实现带符号数的16位乘法和32位累加运算,隐含使用寄存器X和Y,指令功能为:

EMACSopr16a;(M(X):M(X+1))(M(Y)):M(Y+1))+(M~M+3)→M~M+3【操作过程】先将X和Y所指向的两个16位内存操作数相乘,然后将32位乘积与一个扩展寻址的32位内存操作数相加,结果仍然保存在该地址。【要求】两个乘数及32位内存被加数均为有符号数。基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.4高级函数指令3.4.4.3查表与插值指令【查表与插值指令】有2条,采用变址寻址IDX方式。TBL为8位内插值操作,结果保存在累加器A中;ETBL为16位内插值操作,结果保存在累加器D中。【指令功能】TBLoprx0_xysppc

;(M)+{(B)[(M+1)-(M)]}→AETBLoprx0_xysppc

;(M:M+1)+{(B)[(M+2:M+3)-(M:M+1)]}→D【计算公式】基于HCS12的嵌入式系统设计》第3章CPU12指令系统3.4S12汇编指令系统3.4.5程序控制指令【作用】通过改变程序计数器PC的内容,使CPU从正常的执行顺序改变到不同的程序流程。程序控制指令分为转移和调用两大类转移——永久转移(跳转),不再返回。调用——执行完新的任务后,返回原地继续执

温馨提示

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

评论

0/150

提交评论