《第3 指令系统与汇编语言程序设计讲解学习》由会员分享,可在线阅读,更多相关《第3 指令系统与汇编语言程序设计讲解学习(42页珍藏版)》请在金锄头文库上搜索。
1、重庆大学通信工程学院 任勇、王永东,第3 指令系统与汇编语言程序设计,兼容以前的S12 CPU 丰富、强大、灵活,高速16位处理,共400多条 按功能:数据传送、算术运算、逻辑运算、位操作、移位、控制、特殊等, 寻址方式多。,3.1 CPU内部寄存器 区别于I/O寄存器; 6个16bit: D(A+B), X, Y, SP, PC, CCR,重庆大学通信工程学院 任勇、王永东,3.2 寻址方式 概念-CPU执行指令时确定操作数所在单元地址的方式。 操作数来自:寄存器、指令代码、存储单元(都有地址) S12(X)有9大种寻址方式: (1)隐含寻址(INH) 如 ROLA (循环左移,操作数A隐含
2、在指令中) (2)立即数寻址(IMM) 如 LDAA #$FF (将十六进制数FF调入A中,#表示) (3)直接寻址(DIR) 如 LDAA $55 (8位地址) (4)扩展寻址(EXT) 如 LDAA $200A (16位地址) (5)相对寻址(REL) SHIFT: LDAA #$55 BRA SHIFT (相对地址跳转),重庆大学通信工程学院 任勇、王永东,(6)变址寻址(IDX) 特征:以变址寄存器X、Y、SP、PC的内容为基址,再加或减个值,构成最终的地址 5位/9位/16位常数偏移量的变址寻址 如 LDD 6,X ;(6+X)D(A), (6+X+1)D(B) LDAB $FF,Y
3、 ;($FF+Y)B LDAA $7200,PC ;($7200+PC)A (7)累加器变址寻址(IDX) 累加器内容做偏移量的变址寻址 如 LDAA B,X ;(B+X)A LDAA D,Y ;(D+Y)A (8)自加自减的变址寻址(IDX) 自动加减(18),先加、先减、后加、后减 如 STAA 1,-X ;X-1X,A(X) STAA 1,-SP ;SP-1SP, A(SP) (等效PSHA) LDX 2,SP+ ;(SP)X, SP+2SP (等效PULX) (9)间接变址寻址(IDX) 16位常数/累加器D偏移量的间接变址寻址 (内存中再取新地址) 如 LDAA 1000,X ;(1
4、000+X)A JMP D,PC ;(D+PC)PC,变址寻址-重要而常用,表象:指令操作码后的操作数是X,Y,SP,PC (指针),重庆大学通信工程学院 任勇、王永东,3.3 指令概览 分类(表3-1): 数据传送指令 算数运算指令 逻辑指令 程序控制指令 中断指令 CPU控制指令 其它指令 注: 1、浏览书中指令内容 2、以后编程时再查阅、体会,助记方法:英语含义,如: CLR = CleaR LDAA = LoaD Accumulator A STAB = STore Accumulator B TAB = Transfer A to B MOVB =Move Byte BEQ =Bra
5、nch EQual zero ,重庆大学通信工程学院 任勇、王永东,2、寄存器存储指令:STore(影响标志位),STAA $3F STD -$2000,PC STY 2,+SP,重庆大学通信工程学院 任勇、王永东,3、寄存器传送指令: Transfer,注意:TAB、TBA影响标志位,TFR不影响标志位; 实际只有上述3条指令,其余写法是为了兼容老版本MCU 8位到16位:通过符号位扩展后传送 16位到8位:舍弃高8位,只传送低8位,例: TAB TFR A, Y TAP ( 相当于 TFR A, CCR),重庆大学通信工程学院 任勇、王永东,4、寄存器交换指令: Exchange,建议:平
6、常使用时,不应使用位数不匹配的方式进行数据交换。,重庆大学通信工程学院 任勇、王永东,5、内存数据传送指令:Move,特点: 1、不影响标志位 2、允许地址与地址间传送 3、传送方向是 (例 MOVB $1000, $2000 ) 4、16位数据结构是高位在前,低位在后 ( 例: MOVW #$100A, $1100 ) MOVB 1,X,2,Y,重庆大学通信工程学院 任勇、王永东,6、堆栈操作指令:PuSH、PULl,特点: 1、各寄存器都可以入栈、出栈 2、可以做8位、16位操作 3、入栈时SP-1(2),出栈时SP+1(2),重庆大学通信工程学院 任勇、王永东,7、有效地址加载指令:LE
7、A (Load Effective Address),LEAX $100A, Y 注:不影响标志位,重庆大学通信工程学院 任勇、王永东,3.3.2 算术运算类指令,1、加、减法指令:ADD、SUBtract 说明:ABA Add B to A ( A + B ) SBA Subtract B from A ( A B ),重庆大学通信工程学院 任勇、王永东,2、增量、减量指令: INCrement 、DECrement,重庆大学通信工程学院 任勇、王永东,3、比较、检测指令:CoMPara、TeST,特点: 1、CMP 作减法,结果不回传,只影响标志位 2、TST 固定减0,结果不回传,只影响
8、标志位,重庆大学通信工程学院 任勇、王永东,4、求补运算指令:,特点: 1、用0去减该值 2、不对符号位进行判断,重庆大学通信工程学院 任勇、王永东,5、十进制调整指令:DAA (Decimal Adjust A),特点: 1、是在加法操作之后进行 2、是对A进行压缩BCD码加法调整 3、只有这一条调整指令,例: LDD #$3275 ADDB #$69 EXG A,B DAA EXG A,B ADCA #$26 DAA 结果:D = ?,$5944,重庆大学通信工程学院 任勇、王永东,6、符号扩展指令: SEX,说明:1、根据最高位的值将8位扩展为16位 2、源:A,B,CCR 目的:D,X
9、,Y,SP 例:SEX A, X,7、乘、除法指令:MULtiply、DIVide,重庆大学通信工程学院 任勇、王永东,3.3.3 逻辑指令,1、基本逻辑运算指令,2、清零和取反指令: CLear、COMplement,重庆大学通信工程学院 任勇、王永东,3、位操作和位检测指令,BCLR相当与0的位与操作 ( BCLR $20, #$0F ) BSET相当与1的位或操作 ( BSET $20, #$0F ) 注意该类指令与TST、AND的区别- 指定的1位或几位,非整体;BIT影响标志位,但不修改操作数,重庆大学通信工程学院 任勇、王永东,4、移位指令,LSL Logic Shift Left
10、 ASR Arithmetic Shift Right ROR ROtate Right,重庆大学通信工程学院 任勇、王永东,特点:1、ASR补最高位,其余补0 2、移出去的进C标志,重庆大学通信工程学院 任勇、王永东,3.3.4 程序控制类指令,1、无条件转移指令 JMP (Jump),可以在64K范围内跳转 2、短分支跳转指令 是在当前PC的值加上一个8位带符号数的偏移量,即跳转范围:128127 BRA BRanch Always BRN BRanch Never BCC Branch if Carry Clear BCS Branch if Carry Set BEQ Branch i
11、f EQual BMI Branch if Minus BPL Branch if Plus BHI Branch if Higher BHS Branch if Higher or Same BLO Branch if Lower BGT Branch if Greater Than,重庆大学通信工程学院 任勇、王永东,注意: 1、只作检测,满足条件转移,不影响标志位 2、结果不回传 例:BRCLR $20, #$81, LP1 BRSET $20, #$80, LP2,重庆大学通信工程学院 任勇、王永东,3、长分支跳转指令,特点:1、是在当前PC的值加上一个16位带符号数的偏移量,即跳转范
12、围:32768 32767 2、与JMP指令实现的方法稍有不同,只能跳转32K距离。 3、与短跳转指令完全类似,重庆大学通信工程学院 任勇、王永东,4、循环控制指令,特点:1、不影响、不依赖标志位 2、转移范围是 256 255,ADD: LDX #$0B00 LEAY 4, X LDAB #4 CLC LOOP: LDAA X ADCA 1,Y+ STAA 1,X+ DBNE B, LOOP,重庆大学通信工程学院 任勇、王永东,5、子程序调用与返回指令,特点: 1、BSR 调用范围为128127,子程序以RTS指令返回 2、JSR调用范围为3276832767,支持多种寻址方式,直接寻址方式
13、必须在$0000$00FF内 (例: JSR $50 ),子程序以RTS指令返回 3、CALL 用于调用64K以外的子程序,子程序以RTC指令返回,重庆大学通信工程学院 任勇、王永东,3.3.5 中断指令,特点: 1、进入中断时,硬件自动保护现场,RTI指令将恢复现场及断点 2、SWI指令不受I、X的限制,且执行时会自动将I置1(即自动关闭可屏蔽中断),中断向量表入口地址$FFF6-$FFF7 3、各硬件中断有固定的入口地址表,中断服务程序需用RTI指令返回,重庆大学通信工程学院 任勇、王永东,3.3.6 S12CPU控制类指令,特点: 1、STOP进入伪停机模式,时钟被关闭,功耗最低;当有中
14、断或复位时被唤醒 2、WAI 进入等待模式,时钟仍在工作,当有中断或复位时被唤醒,唤醒速度快,重庆大学通信工程学院 任勇、王永东,3.3.7 其它指令 S12X还提供了高级函数指令和模糊运算指令,主要有:小值、大值、插值、乘积累加等 重要的其它指令-程序状态寄存器指令 特殊的数据访问指令,通常被用来改变程序状态寄存器CCR,重庆大学通信工程学院 任勇、王永东,S12X指令系统提供了全局23位地址访问的指令,包括: GLDAA、GLDAB、GLDD、GLDS、GLDX、GLDY、GSTAA、GSTAB、GSTD、GSTS、GSTX、GSTY等, S12X总共新增了84条这类全局寻址指令。 全局地
15、址22:0由CPU本地地址15:0和GPAGE寄存器22:16联合组成。,重庆大学通信工程学院 任勇、王永东,3.4 使用汇编语言的程序设计 程序:完成特定任务的指令的集合 程序设计语言:机器语言(二进制指令代码,可直接执行) 汇编语言(特定助记符指令语句,须编译) 高级语言(通用高级语句,须编译) 单片机应用系统的程序,多用汇编语言编制(*.asm文件)或C 一个汇编程序语句一条单片机指令 多个汇编语言语句汇编语言程序(源代码) 注:程序需要特定的编译程序进行编译,生成二进制机器码 汇编语言: 面向MCU硬件,不易移植,但高效、代码量小,是学习基础,重庆大学通信工程学院 任勇、王永东,汇编语言指令格式 标号: 操作码 操作数1 ,操作数2 ;注释 标号-该指令的符号地址,标定程序入口或转移位置 注:标号必须以字母开始,分大小写 操作码-助记符,指令所实现的操作功能 注:不分大小写;前面无标号时,至少应保留一个空格;必有 操作数-参加操作的数据对象,地址、常数或表达式 注:寄存器寻址已归纳到隐含寻址中,当操作数部分出现寄存器时,通常是寄存器变址寻址;分大小写 注释-为方便阅读、修改而加的注释;可有可无 注:以“;”开始,本行其后的内容不再编译 注意:必须在英文输入法或中文半角字符模式下书写指令,全角字