《Freescale汇编指令.ppt》由会员分享,可在线阅读,更多相关《Freescale汇编指令.ppt(27页珍藏版)》请在三一办公上搜索。
1、基于HCS12的嵌入式系统设计,第3章 CPU12指令系统,3.1概述3.2 CPU12汇编指令的格式和符号说明3.2.1 操作码和操作数3.2.2 数据类型数据表示方法寄存器和存储器表示法3.3 寻址方式(Addressing Mode)隐含/固有寻址(Inherent Addressing,INH)立即寻址(Immediate Addressing,IMM)直接寻址(Direct Addressing,DIR)扩展寻址(Extended Addressing,EXT)相对寻址(Relative Addressing,REL)变址寻址(Indexed Addressing,IDX)3.4 S
2、12汇编指令系统数据传送指令算术运算指令逻辑运算指令高级函数指令3.4.5 程序控制指令3.4.6 CPU控制指令,基于HCS12的嵌入式系统设计,第3章 CPU12指令系统,3.1概述基本概念回顾指令:计算机能直接识别和执行的命令,即每个有效的编码组。指令系统:一种计算机CPU所能执行的全部指令的集合。指令助记符(instruction mnemonic symbol):用一组有一定含义的字符表示的指令,一般采用相关的英文单词缩写。汇编语言源程序:利用指令助记符编写的程序。操作码(Opcode):规定一条指令完成何种操作。操作数(Operand):指令所完成操作的对象。3.2 CPU12汇编
3、指令的格式和符号说明3.2.1 操作码和操作数CPU12指令组成:(前导字节)+操作码(+后随字节+扩展字节)后置字节提供了一定形式的变址寻址、传送、交换和循环的基址寄存器和偏移量的符号等信息。扩展字节包含有附加的程序信息,例如地址、偏移量和立即数等。,基于HCS12的嵌入式系统设计,3.2 CPU12汇编指令的格式和符号说明(2),3.2.2 数据类型CPU12支持8种数据类型:位数据(1位);5位带符号整数;8位带/无符号整数;字节型组合BCD数(8位);9位带符号整数;16位带/无符号整数;16位有效地址;32位带/无符号整数。数据表示方法十进制整数可直接使用;16进制数在数字前面加“$
4、”;二进制数前加“%”;立即数应在数据前加“#”。寄存器和存储器表示法寄存器用名称表示,不分大小写;M(Memory location)表示由指令有效地址指向的8位存储单元;R(Result)表示算术或逻辑运算结果;I(Intermediate result)表示算术或逻辑运算的中间结果。寄存器和存储器符号加下标“n”时,表示是它的第n位;16位寄存器符号后加下标“H”或“L”时,表示其高位字节或低位字节。M:M+1表示16位存储器,由M和M+1相邻两个存储单元组成。MM+3表示32位存储器,由4个相邻的存储单元M、M+1、M+2、M+3组成;(M:M+1)表示两个相邻存储单元的内容组成的1个
5、字,(M)为高位字节,(M+1)为低位字节;符号()表示内容,如M(X)、M(SP)分别是由变址寄存器X和堆栈指针SP所指向的存储单元,M(y+3)是由变址寄存器Y加3后指向的存储单元。,基于HCS12的嵌入式系统设计,3.3 寻址方式(1),寻址:寻找操作数地址的过程。有效地址(effective address):操作数所在的地址。寻址方式(Addressing Mode):通过确定操作数所在的位置(地址),提取操作数的方法。CPU12共有6类寻址方式,即固有寻址、立即寻址、直接寻址、扩展寻址、相对寻址和变址寻址。3.3.1 隐含/固有寻址(Inherent Addressing,INH)
6、固有寻址:有效地址包含在操作码中,也称为隐含寻址(Implied addressing),又因为操作数总是处于CPU的寄存器之中,还称为寄存器寻址(Register addressing)。特征:在指令助记符中会出现寄存器的名称,有时在助记符中甚至连寄存器的名称都不出现。3.3.2 立即寻址(Immediate Addressing,IMM)立即寻址:指令的操作数是一个8位或16位二进制数。指令中出现的操作数称为立即数,为了与直接地址相区别,立即数前必须加“#”号。立即寻址常用来给寄存器赋值。3.3.3 直接寻址(Direct Addressing,DIR)直接寻址:指令中直接给出操作数地址的
7、寻址方式。3.3.4 扩展寻址(Extended Addressing,EXT)扩展寻址:指令中直接给出操作数完整16位地址的寻址方式。,基于HCS12的嵌入式系统设计,3.3 寻址方式(2),3.3.5 相对寻址(Relative Addressing,REL)相对寻址只出现在相对转移指令(relative branch instruction)中。相对寻址:当前的PC值加上指令中规定的地址偏移量relx,构成操作数的实际地址的寻址方式。目的地址=源地址+转移指令字节数+relx偏移量为8位、9位和16位带符号二进制补码。短转移的偏移量为$80$7F(-128+127);循环控制指令支持9位
8、偏移量,其数值为$100$0FF(-256+255);长转移的偏移量为$8000$7FFF(-3276832767)。如果偏移量为0,则CPU立即执行紧接着转移指令的下一条指令。程序利用转移指令返回到指令首址,所以程序就在该行落入陷阱,称为“原地踏步”。这是一种终止程序的普通方法,广泛用于程序调试。3.3.6 变址寻址(Indexed Addressing,IDX)变址寻址是CPU12的主要寻址方式,也是本节的重点和难点。变址寻址是以某个寄存器的内容为基本地址,然后在这个基本地址上加上地址偏移量,形成操作数地址或存放操作数地址的地址,并将这个地址单元的内容作为指令的操作数。CPU12 共有4类
9、不同的变址寻址方式,这4类又可进一步分解成12种不同的变址寻址方式。3.3.6.1 常数偏移变址寻址(Constant Offset Indexed Addressing)常数偏移变址寻址:将变址寄存器的内容加上一个常数形成操作数地址。有三种不同的偏移量:5位、9位和16位。,基于HCS12的嵌入式系统设计,3.3 寻址方式(3),A、5位常数偏移变址寻址IDX(5-Bit Constant Offset Indexed Addressing)偏移量为5位带符号数,偏移量大小为:-16+15,5位偏移量隐含在后随字节中,有效地址为变址寄存器内容+5位地址偏移量。B、9位常数偏移变址寻址IDX1
10、(9-Bit Constant Offset Indexed Addressing)9位带符号偏移量的地址偏移范围:-256+255,偏移量的符号位在后随字节中,偏移量大小在扩展字节中,变址寄存器内容加上9位带符号常数偏移量作为操作数地址。C、16 位常数偏移变址寻址IDX2(16-Bit Constant Offset Indexed Addressing)有效地址由变址寄存器内容加上两个偏移量扩展字节形成,可以访问64KB地址空间中的任何单元。3.3.6.2 自动递增/递减变址寻址IDX(Autoincrement/Autodecrement Indexed Addressing)在CPU
11、12的变址寻址方式中,提供了4种方法自动改变基址寄存器的内容,并作为指令执行的一部分。变址寻址前或变址寻址后,变址寄存器中的数值可以加上或减去一个整数值,增加值的范围是00000111(+1+8),减少值范围是11111000(-1-8)。对于先递增或先递减的指令,变址寄存器内容在访问内存单元之前变化,相当于前面常数偏移变址寻址。而对于后递增或后递减指令,则是用变址寄存器中的初值访问内存单元,然后才改变变址寄存器中的内容。3.3.6.3 累加器偏移变址寻址IDX(Accumulator Offset Indexed Addressing)累加器偏移变址寻址:将变址寄存器中的内容与累加器中的无符
12、号偏移量相加,构成有效地址。为了使用这种寻址方式,偏移量必须先置于累加器中,累加器可以是A、B、D。,基于HCS12的嵌入式系统设计,3.3 寻址方式(4),间接变址寻址(Indirect Indexed Addressing)寄存器间接寻址:操作数地址是以寄存器名称的形式间接给出。间接变址寻址:变址寄存器中的内容与一个16位偏移量相加形成一个地址,但该地址并不是操作数的地址,它所指向的地址单元中的内容才是操作数的有效地址。偏移量既可以是一个16位的常数偏移量,也可以是累加器中的内容。A、16位常数偏移间接变址寻址IDX2(16-Bit Constant Indirect Indexed Ad
13、dressing)将由指令提供的16位偏移量与基址变址寄存器(base indexing register)的内容相加,形成一个地址(指针),指向一个存放操作数地址的单元。指令执行时,根据由基址和偏移量所形成的地址指针,首先到指定的地址单元中取得操作数地址,然后再根据操作数地址提取操作数。其有效地址为:effective address=(two offset extension bytes)+(X、Y、SP or PC)为了将这种寻址方式与16位常数偏移变址寻址方式加以区别,在指令助记符的操作数部分,用一个方括号括起来。B、累加器D间接变址寻址D,IDX)(Accumulator D Ind
14、exed-Indirect Addressing)将累加器D中的内容+基址寄存器的内容,形成一个地址指针,指向存放操作数地址的存储单元。指令执行时,根据基址寄存器和偏移寄存器D中的内容形成一个地址,到该地址单元中找到操作数地址,再由操作数地址取得操作数。其有效地址为:effective address=(D)+(X,Y,SP or PC)为了把这种寻址方式与累加器D偏移变址寻址方式区别开来,用一个方括号将指令助记符的操作数部分括起来。,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(1),按指令助记符分类,S12共有169种不同的汇编指令。考虑到不同类型的寻址方式,指令数量达594
15、种。按照指令功能,可将指令分为以下几大类:数据传送指令、算术运算指令、逻辑运算指令、转移与子程序调用指令、中断指令、MCU控制指令、高级函数指令、模糊运算指令等。3.4.1 数据传送指令数据传送指令将数据从一处复制到另一处,包括:立即加载、寄存器之间的传送与交换、内存传送到寄存器、寄存器传送到内存、内存之间的传送和堆栈操作指令等。3.4.1.1 寄存器加载指令寄存器加载指令用于将立即数或内存中的操作数传送给寄存器,共6条指令,如表3.1所示。每条指令支持8种源操作数寻址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2,派生出48条指令。,表3.2 有效地址加载指令
16、,表3.1 寄存器加载指令,3.4.1.2 有效地址加载指令有效地址加载指令可以用来将操作数地址分别传送到寄存器SP、X和Y中。共3条指令,如表3.2所示。采用3种变址寻址:IDX、IDX1、IDX2。指令可将SP、PC、X或Y的值加/减5位、9位或16位常数,或者加上A、B或D的内容,传送到寄存器SP、X和Y中。,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(2),3.6.1.3 寄存器存储指令寄存器存储指令仅限于将寄存器内容送入内存单元,共6条指令,如表3.3所示。每条指令支持7种源操作数寻址方式:DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。3.4.1.
17、4 寄存器数据传送指令将源寄存器的内容传送到目的寄存器,共9条指令,如表3.4所示,均为固有寻址方式。实际上该组指令只有3条,其余指令是为兼容68HC11而保留的伪指令,由汇编程序自动汇编成对应的TFR指令,如表3.4中阴影部分所示。源寄存器和目的寄存器可以在9个寄存器中任意选择,包括MCU内部的两个暂存器TMP2和TMP3。其中涉及到TMP2和TMP3的指令是为了以前产品保留的指令,有些汇编程序可能视其为无效指令,但可以通过DC.B和DC.W在程序中直接嵌入这样的指令。,表3.3 寄存器存储指令,表3.4寄存器数据传送指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(3),注
18、:R1和R2分别是寄存器A、B、CCR、D、X、Y、SP、TMP2、TMP3之一。但TMP3只能作为源寄存器,TMP2只能作为目的寄存器。TFR指令的数据传送规则是:(1)8位到8位或16位到16位,直接传送;(2)8位到16位,通过符号扩展变成16位后传送;TFR A,X等同于SEX A,X(3)16位到8位,舍弃高位,只传送低位。需要说明的是,数据从8位寄存器传送到16位寄存器,8位寄存器的内容传送到16位寄存器的低8位,S12自动在目的寄存器的最高有效字节中执行一次符号扩展。符号扩展的原则是,如果8位寄存器的最高位是0,则16位寄存器的高8位为$00;如果8位寄存器的最高位是1,则16位
19、寄存器的高8位为$FF。,3.4.1.5 寄存器数据交换指令将源寄存器内容与目的寄存器内容进行交换,共3条指令,如表3.5所示,均为固有寻址方式。实际上该组指令只有1条EXG指令,XGDX和XGDY指令是为兼容68HC11而保留的伪指令,由汇编程序自动汇编成对应的EXG指令,如表3.5中阴影部分所示。注:R1和R2分别是寄存器A、B、CCR、D、X、Y、SP、TMP2、TMP3之一。但TMP3只能作为第1操作数寄存器,TMP2只能作为第2操作数寄存器。,表3.5寄存器数据交换指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(4),该指令可以在任意16位或8位寄存器之间交换数据,
20、规则是:(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。,表3.8 内存数据移动指令,3.4.1.6 内存数据移动指令可以将源操作数(一个字或字节)送到目地地址,源操作数不变。这是S12仅有的两条不涉及内部寄存器而直接进行内存单元之间数据传送的指令,支持6种寻址方式:IMM-EXT、IMM-IDX、
21、EXT-EXT、EXT-IDX、IDX-EXT、IDX-IDX,如表3.8所示。,3.4.1.7 堆栈操作指令 S12堆栈操作仅限于寄存器与堆栈之间的数据传送,使用堆栈指针进行间接寻址。堆栈操作分为进栈和出栈两种,操作循序正好相反,即指针先递减,后压栈;先弹出,指针后递增。指令共计12条,入栈和出栈各6条,均为固有寻址方式。指令如表3.9所示。,表3.9 堆栈操作指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(5),加法指令S12加法运算分为两类,一类是两个寄存器内容的加法,另一类是寄存器内容与立即数或内存单元内容的加法,运算结果保存在寄存器中,所有加法指令都影响标志位。两个
22、寄存器的加法指令如表3.10所示,共有3条指令,但ABX和ABY指令是为兼容68HC11而保留,由汇编程序自动汇编成对应的LEAX指令,如表3.10中阴影部分所示。寄存器与立即数或内存单元的加法如表3.11所示,共有5条指令,支持8种寻址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2,由此派生出40条指令。其中2条为带进位的加法指令,3条为不带进位的加法指令。,表3.10 加法指令1,表3.11 加法指令2,表3.12 减法指令,减法指令S12减法运算也分为两类,一类是两个寄存器内容的减法,另一类是寄存器内容与立即数或内存单元内容的减法,运算结果保存在寄存器中,
23、所有减法指令都影响标志位。两个寄存器内容的减法指令为SBA,计算A-B,结果存放在A中。寄存器与立即数或内存单元的减法如表3.12所示,共有5条指令,支持8种寻址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。其中2条为带借位的减法指令,3条为不带借位的减法指令。,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(6),3.4.2.3 加1和减1指令S12分别具有一组用于指针调整或循环控制的加1和减1指令,每组有6条指令,操作对象是寄存器A、B、X、Y、SP或内存单元,如表3.13和表3.14所示。其中,寄存器A、B、X、Y加1或减1指令为固有寻址,对
24、内存单元的操作则支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。其中,INS和DES指令是为兼容68HC11而保留,由汇编程序自动汇编成对应的LEAS指令,为变址寻址IDX方式,如表3.13和表3.14中阴影部分所示。,3.4.2.4 十进制调整指令S12只有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。,表3.13 加1指令,表3.14 减1指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系
25、统(7),3.4.2.5 清零指令清零指令用来向寄存器或内存单元中写入$00,功能上与加载立即数$00的指令相同,共有3条指令,如表3.15所示。寄存器清零只针对A和B,为固有寻址方式。内存单元清零指令支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。3.4.2.6 符号扩展指令单字节无符号数通过高位补0可以扩展成任意宽度,而对于有符号数,由于采用补码表示,高位可能需要补0或补1,因此,S12设置了符号扩展指令SEX,为固有寻址方式。符号扩展过程是,将原数据符号位复制到已扩展数据的所有高位。指令要求源操作数是A、B或CCR中的内容,扩展后的结果存放在D、X、Y或SP中
26、。指令格式为:SEX R1,R2;R1=A、B或CCR,R2=D、X、Y或SP,相当于TFR R1,R23.4.2.7 乘法指令S12乘法全部在寄存器内完成,可以实现两个8位或16位的硬件乘法运算,共有3条指令,均为固有寻址方式,如3.16所示。,表3.15 清零指令,表3.16乘法指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(8),3.4.2.8 除法指令S12除法全部在寄存器内完成,可以实现16/16位或32/16位的硬件除法运算,共有5条指令,均为固有寻址方式,如3.17所示。EDIV和EDIVS为常规32/16除法指令,分别按无符号数和有符号数相除;FDIV是小数除
27、法指令,即求真分数D/X的值;IDIV和IDIVS分别是无符号和有符号整数16/16除法指令,区别在于IDIVS指令的商和余数用补码表示。3.4.2.9 比较指令比较指令用于将寄存器的内容与立即数或内存单元的内容进行比较,实际上进行的是两个操作数的减法运算,并不回送运算结果,只是根据差值设置相应的状态位,作为跳转、循环等的判断条件。这类指令影响标志位N、Z、V、C。比较指令共有7条,除了CBA为固有寻址方式外,其余6条指令允许使用8种寻址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2,如表3.18所示。,表3.18 比较指令,表3.17 除法指令,基于HCS12
28、的嵌入式系统设计,3.4 S12汇编指令系统(9),3.4.2.10 测试指令测试指令用于检测累加器A、B或内存单元的内容是否0,相当于一次减0操作。操作后,源操作数不变,也不保存结果,只是根据结果设置标志位。该类指令有3条,如表3.19所示。其中,TSTA和TSTB为固有寻址,TST允许使用6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。,表3.19测试指令,3.4.3 逻辑运算指令S12的逻辑运算指令包括基本逻辑运算、取反和求补、移位、位操作、位逻辑运算和位测试等指令。3.4.3.1 基本逻辑运算指令基本逻辑运算指令按字节进行“与”、“或”、“异或”逻辑运算,用于将
29、寄存器中的某些位清0或置1,共有8条指令,如表3.20所示。其中,针对CCR的操作只允许立即寻址,针对累加器A、B的操作支持8种寻址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。3.4.3.2 取反、求补指令取反、求补指令将累加器A、B或内存单元内容取反和求补,结果放回原处,共有6条指令,如表3.21所示。其中,针对累加器A、B的操作为固有寻址,针对内存单元的操作支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。取反指令相当于执行一次$FF-(r)或$FF-(M)操作;求补指令实际上进行一次$00-(r)或$00-(M)的减法操作。,
30、基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(10),3.4.3.3 位操作与位测试指令位操作与位测试指令如表3.22所示,共有7条指令。位操作指令5条,用于将内存单元中的某1位或某几位清0或置1。其中,CCR特征位操作指令CLC、CLI、CLV是为了兼容68HC11而保留,汇编程序自动汇编成ANDCC指令,为立即寻址方式。内存单元清0、置1指令BCLR和BSET支持5种寻址方式:DIR、EXT、IDX、IDX1、IDX2。BCLR指令将一个8位屏蔽字节取反后,与内存单元中的内容作“逻辑与”运算,结果送回原处,8位屏蔽字节被用于指定内存单元的哪些位为0,即若8位屏蔽数的某位为1,
31、则内存单元的对应位被清0。BSET指令将一个8位屏蔽字节与内存单元中的内容作“逻辑或”运算,结果送回原处,相当于将8位屏蔽字节中的1送到内存单元的对应位。位测试指令有2条,即BITA、BITB,支持8种寻址方式:IMM、DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2。位测试指令将累加器A、B内容与立即数或内存单元内容进行“逻辑与”运算,但结果并不回送,仅仅根据运算结果设置标志位N、Z、V。,表3.21 取反、求补指令,表3.20逻辑运算指令,表3.22位操作与位测试指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(11),3.4.3.4 逻辑移位指令逻辑移位指
32、令如表3.23所示,共有8条指令,分为逻辑左移LSL和逻辑右移LSR两种。其中,针对累加器A、B、D的操作为固有寻址,针对内存单元的操作支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。3.4.3.5 算术移位指令算术移位指令如表3.24所示,共有7条指令,分为算术左移ASL和算术右移ASR两种。其中,针对累加器A、B、D的操作为固有寻址,针对内存单元的操作支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。3.4.3.6 循环移位指令循环移位指令如表3.25所示,共有6条指令,分为循环左移ROL和循环右移ROR两种。其中,针对累加器A、B的操
33、作为固有寻址,针对内存单元的操作支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。,表3.23 逻辑移位指令表 3.24 算术移位指令表 3.25 循环移位指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(12),3.4.4 高级函数指令S12的高级函数指令具有高级语言中某些函数的功能,如求最大值、最小值,乘积累加,内插值运算等。3.4.4.1 求最大值、最小值指令求最大值、最小值指令如表3.26所示,用于在累加器A、D与内存操作数之间取最大或最小的一个,共有8条指令,求最大值和最小值各有4条指令,支持5种寻址方式。其中,以字母M开头的4条为8位指令,
34、以字母E开头的4条为16位指令。虽然这些指令自动完成数据的比较和传送,但标志位显示了比较的结果和是否发生了数据传送。,表3.26 求最大值、最小值指令,3.4.4.2 乘积累加指令乘积累加指令只有1条EMACS,采用特殊寻址方式。可实现带符号数的16位乘法和32位累加运算,隐含使用寄存器X和Y,指令功能为:EMACS opr16a;(M(X):M(X+1)(M(Y):M(Y+1)+(MM+3)MM+3 操作过程是:先将X和Y所指向的两个16位内存操作数相乘,然后将32位乘积与一个扩展寻址的32位内存操作数相加,结果仍然保存在该地址。指令要求两个乘数及32位内存被加数均为有符号数。,基于HCS1
35、2的嵌入式系统设计,3.4 S12汇编指令系统(13),3.4.4.3 查表与插值指令查表与插值指令有2条,采用变址寻址IDX方式。其中,TBL为8位内插值操作,结果保存在累加器A中;ETBL为16位内插值操作,结果保存在累加器D中。指令功能为:TBL oprx0_xysppc;(M)+(B)(M+1)-(M)AETBL oprx0_xysppc;(M:M+1)+(B)(M+2:M+3)-(M:M+1)D3.4.5 程序控制指令程序控制指令通过改变程序计数器PC的内容,使MCU从正常的执行顺序改变到不同的程序流程。分为转移和调用两大类,前者为永久转移,不再返回;后者执行完新的任务后,返回原地继
36、续执行。其中,转移指令又分为无条件转移和有条件转移两种。3.4.5.1 无条件转移指令无条件转移指令如表3.27所示,共有5条指令,前4条(两对)指令采用相对寻址方式,指令中需给出地址偏移量。其中,BRA为无条件固定短转移,使用8位地址偏移量;BRN为不转移,相当于空操作指令。无条件固定长转移,也配套有相应的LBRA、LBRN指令,采用16位地址偏移量。,两条不转移指令BRN和LBRN主要用于程序的调试。JMP指令支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2,允许直接或间接给定目标地址,然后将目标地址直接赋给PC。JMP指令的转移范围是64KB空间,执行时不影响标
37、志位,但将清除指令队列。,表3.27 无条件转移指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(14),3.4.5.2 条件短转移指令条件短转移指令分为两类。一类是根据标志位的状态决定是否转移,但指令只检查有关标志位状态,而不管这些状态如何生成,也不影响任何标志位。该类指令共有16条,采用相对寻址方式,地址偏移量为8位带符号数,最大转移范围是-128+127,如表3.28所示。另一类指令包含产生转移条件的操作,且并不影响标志,也不依赖标志,而是根据操作结果决定是否转移,虽然指令中也出现了8位地址偏移量,但却并不单纯为相对寻址,而是包含多种寻址方式,按对源操作数的寻址,有5种寻
38、址方式:DIR、EXT、IDX、IDX1、IDX2,该类指令只有2条,如表3.29所示。,表3.28 条件短转移指令1,表3.29 条件短转移指令2,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(15),3.4.5.3 条件长转移指令条件长转移指令如表3.30所示,共有16条指令,采用相对寻址方式,与表3.28条件短转移指令相对应,区别在于转移距离可达-32768+32767,即可转移到64KB空间的任意位置。,表3.30 条件长转移指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(16),3.4.5.4 循环控制指令S12具有6条循环控制指令,均为相对寻址,如表
39、3.31所示。其中4条自动调整循环计数器,可实现类似高级语言中的for循环;另外2条为条件转移,可以实现while循环。6条指令均不影响标志位,即使存在调整计数器的操作也不例外。,表3.31 循环控制指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(17),3.4.5.5 子程序调用与返回指令S12设置了两套子程序调用与返回指令,如表3.32所示。BSR/JSR用于64KB空间以内的调用,对应的返回指令为RTS;CALL用于64KB以外的扩展空间,对应的返回指令为RTC。BSR与JSR的主要区别是目标地址的确定方式与调用范围不同,BSR采用相对寻址方式,调用范围为-128+12
40、7;而JSR支持7种寻址方式:DIR、EXT、IDX、IDX1、IDX2、D,IDX、IDX2,除了直接寻址的子程序入口地址必须在$00$FF范围内以外,其它寻址方式的调用范围是整个64KB地址空间。对于超过64KB地址空间的寻址,S12只提供了一种访问手段,即通过CALL指令调用其中的子程序,然后用RTC指令返回。CALL指令支持6种寻址方式:EXT、IDX、IDX1、IDX2、D,IDX、IDX2。,表3.32 子程序调用与返回指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(18),3.4.6 S12控制指令S12控制指令主要负责MCU的软件中断管理和工作状态的改变。3.
41、4.6.1 中断指令与中断相关的指令有3条,均为固有寻址方式,如表3.33所示。SWI是软件中断指令,在程序中设置SWI指令,通过中断响应方式进入服务程序,利用RTI指令返回。TRAP是指令陷阱,如果MCU读到非法指令,就会落入指令陷阱,产生一个中断。只要MCU取指遇到$18$30$18$39、$18$40$18$FF之间的双字节机器码,即认定是非法指令,自动进入TRAP中断响应过程。用户设计的TRAP服务程序可以根据具体情况确定处理方案。,表3.33 中断指令,基于HCS12的嵌入式系统设计,3.4 S12汇编指令系统(19),3.4.6.2 S12控制指令S12控制指令有3条,均为固有寻址方式,如表3.34所示。STOP、WAI和BGND指令用于改变MCU的状态。STOP指令使MCU进入待机状态,整个MCU停止运行,功耗最低。但当S=1时,STOP被禁止,这时STOP指令相当于2个周期的空操作指令。WAI指令使MCU进入中断等待状态。注意到STOP指令和WAI指令都关闭MCU时钟,使MCU停止运行,进入节电状态,区别是STOP指令关闭MCU所有时钟,而WAI指令仅仅关闭MCU时钟,复位和中断将重新恢复MCU时钟。,表3.34 S12控制指令,基于HCS12的嵌入式系统设计,The End,
链接地址:https://www.31ppt.com/p-6505989.html