资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东第第3 指令系统与汇编语言程序设计指令系统与汇编语言程序设计兼容以前的兼容以前的S12 CPU 丰富、强大、灵活,高速丰富、强大、灵活,高速丰富、强大、灵活,高速丰富、强大、灵活,高速1616位处理,共位处理,共位处理,共位处理,共400400多条多条多条多条按功能:数据传送、算术运算、逻辑运算、位操作、移位、控制、特殊等按功能:数据传送、算术运算、逻辑运算、位操作、移位、控制、特殊等按功能:数据传送、算术运算、逻辑运算、位操作、移位、控制、特殊等按功能:数据传送、算术运算、逻辑运算、位操作、移位、控制、特殊等, ,寻址方式多。寻址方式多。寻址方式多。寻址方式多。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)立即数寻址)立即数寻址(IMM) 如如 LDAA #$FF (将十六进制数(将十六进制数FF调入调入A中,中,#表示)表示) (3)直接寻址)直接寻址(DIR) 如如 LDAA $55 (8位地址)位地址)(4)扩展寻址)扩展寻址(EXT) 如如 LDAA $200A (16位地址)位地址)(5)相对寻址)相对寻址(REL) SHIFT: LDAA #$55 BRA SHIFT (相对地址跳转)(相对地址跳转) 重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东(6 6)变址寻址)变址寻址)变址寻址)变址寻址(IDX)(IDX) 特征:以变址寄存器特征:以变址寄存器特征:以变址寄存器特征:以变址寄存器X X、Y Y、SPSP、PCPC的内容为基址,再加或减个值,构的内容为基址,再加或减个值,构的内容为基址,再加或减个值,构的内容为基址,再加或减个值,构成最终的地址成最终的地址成最终的地址成最终的地址 5 5位位位位/9/9位位位位/16/16位常数偏移量的变址寻址位常数偏移量的变址寻址位常数偏移量的变址寻址位常数偏移量的变址寻址 如如如如 LDD 6,X ;(6+X)LDD 6,X ;(6+X)D(A), D(A), (6+X+1)(6+X+1)D(B)D(B) LDAB $FF,Y ;($FF+Y) LDAB $FF,Y ;($FF+Y)B B LDAA $7200,PC ;($7200+PC) LDAA $7200,PC ;($7200+PC)A A (7 7)累加器变址寻址)累加器变址寻址)累加器变址寻址)累加器变址寻址(IDX)(IDX)累加器内容做偏移量的变址寻址累加器内容做偏移量的变址寻址累加器内容做偏移量的变址寻址累加器内容做偏移量的变址寻址 如如如如 LDAA B,X ;(B+X)LDAA B,X ;(B+X)A A LDAA D,Y ;(D+Y) LDAA D,Y ;(D+Y)A A(8 8)自加自减的变址寻址)自加自减的变址寻址)自加自减的变址寻址)自加自减的变址寻址(IDX)(IDX)自动加减(自动加减(自动加减(自动加减(1818),先加、先减、后加、后减),先加、先减、后加、后减),先加、先减、后加、后减),先加、先减、后加、后减 如如如如 STAA 1,-X ;X-1STAA 1,-X ;X-1X,AX,A(X)(X) STAA 1,-SP ;SP-1 STAA 1,-SP ;SP-1SP, ASP, A(SP) (SP) (等效等效等效等效PSHA)PSHA) LDX 2,SP+ ;(SP) LDX 2,SP+ ;(SP)X, SP+2X, SP+2SP (SP (等效等效等效等效PULX)PULX)(9 9)间接变址寻址)间接变址寻址)间接变址寻址)间接变址寻址(IDX)(IDX)1616位常数位常数位常数位常数/ /累加器累加器累加器累加器D D偏移量的间接变址寻址偏移量的间接变址寻址偏移量的间接变址寻址偏移量的间接变址寻址 (内存中再取新地址)(内存中再取新地址)(内存中再取新地址)(内存中再取新地址) 如如如如 LDAA 1000,X ;(1000+X)LDAA 1000,X ;(1000+X)A A JMP D,PC ;(D+PC) JMP D,PC ;(D+PC)PCPC 变址寻址变址寻址变址寻址变址寻址-重要而常用,表象:指令操作码后的操作数是重要而常用,表象:指令操作码后的操作数是重要而常用,表象:指令操作码后的操作数是重要而常用,表象:指令操作码后的操作数是X,Y,SP,PC (X,Y,SP,PC (指针指针指针指针) )重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3 指令概览指令概览 分类分类(表表3-1):数据传送指令数据传送指令算数运算指令算数运算指令逻辑指令逻辑指令程序控制指令程序控制指令中断指令中断指令CPU控制指令控制指令其它指令其它指令注:注:1、浏览书中指令内容、浏览书中指令内容2、以后编程时再查阅、体会、以后编程时再查阅、体会助记方法:英语含义,如:助记方法:英语含义,如:CLR = CleaRLDAA = LoaD Accumulator ASTAB = STore Accumulator BTAB = Transfer A to B MOVB =Move Byte BEQ =Branch EQual zero 重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3.1 数据传送类指令数据传送类指令1、寄存器加载指令、寄存器加载指令: LoaD (注:影响标志位)(注:影响标志位) LDAA #$1F LDAB $40B0 LDD 2,X LDY 2,SP+助记符功能操作LDAA将数据载入寄存器A(M)ALDAB将数据载入寄存器B(M)BLDD将数据载入寄存器D(M:M1)(A:B)LDS将数据载入寄存器SP(M:M1)SPH:SPLLDX将数据载入变址寄存器X(M:M1)XH:XLLDY将数据载入变址寄存器Y(M:M1)YH:YL重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东2 2、寄存器存储指令:、寄存器存储指令:、寄存器存储指令:、寄存器存储指令:SToreSTore(影响标志位)(影响标志位)(影响标志位)(影响标志位)STAA $3FSTD -$2000,PCSTY 2,+SP助记符功能操作STAA将寄存器A中内容送入内存单元(A)MSTAB将寄存器B中内容送人内存单元(B)MSTD将寄存器D中内容送入内存单元(A)M, (B)M1STS将堆栈SP中内容送入内存单元(SPH:SPL)M:M1STX将变址寄存器x中内容送人内存单元(XH:XL)M:M1STY将变址寄存器Y中内容送入内存单元(YH:YL)M:M1重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3 3、寄存器传送指令、寄存器传送指令、寄存器传送指令、寄存器传送指令: Transfer: Transfer注意:注意:TAB、TBA影响标志位,影响标志位,TFR不不影响标志位;影响标志位;实际只有上述实际只有上述3条指令,其余写法是为条指令,其余写法是为了兼容老版本了兼容老版本MCU8位到位到16位:通过符号位扩展后传送位:通过符号位扩展后传送16位到位到8位:舍弃高位:舍弃高8位,只传送低位,只传送低8位位例:TAB TFR A, Y TAP ( 相当于 TFR A, CCR)助记符功能操作TAB将寄存器A中内容送入寄存器B(A)BTBA将寄存器B中内容送人寄存器A(B)ATFR寄存器之间的数据传送(A、B、CCR、D、X、Y、SP)A、B、CCR、D、X、Y、SPTSX将寄存器SP中内容送入寄存器X(SP)XTSY将寄存器SP中内容送入寄存器Y(SP)YTXS 将寄存器X中内容送入寄存器SP(X)SPTYS将寄存器Y中内容送入寄存器SP(Y)SPTPA将寄存器CCR中内容送人寄存器A(CCR)ATAP将寄存器A中内容送人寄存器CCR(A)CCR重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东4 4、寄存器交换指令、寄存器交换指令、寄存器交换指令、寄存器交换指令: Exchange: Exchange建议:平常使用时,不应使用位数不匹配的方式进行数据交换。建议:平常使用时,不应使用位数不匹配的方式进行数据交换。重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东5 5、内存数据传送指令:、内存数据传送指令:、内存数据传送指令:、内存数据传送指令:MoveMove特点:特点:1、不影响标志位、不影响标志位2、允许地址与地址间传送、允许地址与地址间传送3、传送方向是、传送方向是 (例(例 MOVB $1000, $2000 )4、16位数据结构是高位在前,低位在后位数据结构是高位在前,低位在后 ( 例:例: MOVW #$100A, $1100 ) MOVB 1,X,2,Y重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东6 6、堆栈操作指令:、堆栈操作指令:、堆栈操作指令:、堆栈操作指令:PuSHPuSH、PULlPULl特点:特点:1、各寄存器都可以入栈、出栈、各寄存器都可以入栈、出栈2、可以做、可以做8位、位、16位操作位操作3、入栈时、入栈时SP-1(2),出栈时,出栈时SP+1(2)重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东7 7、有效地址加载指令:、有效地址加载指令:、有效地址加载指令:、有效地址加载指令:LEA (Load Effective Address)LEA (Load Effective Address)LEAX $100A, Y注:不影响标志位注:不影响标志位重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3.2 3.3.2 算术运算类指令算术运算类指令算术运算类指令算术运算类指令1、加、减法指令:、加、减法指令:ADD、SUBtract说明:说明:ABA Add B to A ( A + B ) SBA Subtract B from A ( A B )重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东2 2、增量、减量指令:、增量、减量指令:、增量、减量指令:、增量、减量指令: INCrement INCrement 、DECrementDECrement重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3 3、比较、检测指令:、比较、检测指令:、比较、检测指令:、比较、检测指令:CoMParaCoMPara、TeSTTeST特点:特点:1、CMP 作减法,结果不回传,只影响标志位作减法,结果不回传,只影响标志位2、TST 固定减固定减0,结果不回传,只影响标志位,结果不回传,只影响标志位重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东4 4、求补运算指令、求补运算指令、求补运算指令、求补运算指令: :特点:特点:1、用、用0去减该值去减该值2、不对符号位进行判断、不对符号位进行判断重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东5 5、十进制调整指令:、十进制调整指令:、十进制调整指令:、十进制调整指令:DAA (Decimal Adjust A)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 6、符号扩展指令、符号扩展指令、符号扩展指令、符号扩展指令: SEX: SEX说明:说明:1、根据最高位的值将、根据最高位的值将8位扩展为位扩展为16位位 2、源:、源:A,B,CCR 目的:目的:D,X,Y,SP例:例:SEX A, X 7 7、乘、除法指令、乘、除法指令、乘、除法指令、乘、除法指令:MULtiply:MULtiply、DIVideDIVide重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3.3 3.3.3 逻辑指令逻辑指令逻辑指令逻辑指令1、基本逻辑运算指令、基本逻辑运算指令2 2、清零和取反指令、清零和取反指令、清零和取反指令、清零和取反指令: CLear: CLear、COMplementCOMplement重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3 3、位操作和位检测指令、位操作和位检测指令、位操作和位检测指令、位操作和位检测指令BCLR相当与相当与0的位与操作的位与操作 ( BCLR $20, #$0F )BSET相当与相当与1的位或操作的位或操作 ( BSET $20, #$0F )注意该类指令与注意该类指令与TST、AND的区别的区别- 指定的指定的1位或几位,非整体;位或几位,非整体;BIT影响标志位,但不修改操作数影响标志位,但不修改操作数重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东4 4、移位指令、移位指令、移位指令、移位指令LSL Logic Shift LeftASR Arithmetic Shift RightROR ROtate Right重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东特点:特点:1、ASR补最高位,其余补补最高位,其余补0 2、移出去的进、移出去的进C标志标志重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3.4 3.3.4 程序控制类指令程序控制类指令程序控制类指令程序控制类指令1、无条件转移指令、无条件转移指令 JMP (Jump),可以在,可以在64K范围内跳转范围内跳转2、短分支跳转指令、短分支跳转指令 是在当前是在当前PC的值加上一个的值加上一个8位带符号数的偏移量,即位带符号数的偏移量,即跳转范围:跳转范围:128127BRA BRanch AlwaysBRN BRanch NeverBCC Branch if Carry ClearBCS Branch if Carry SetBEQ Branch if EQual BMI Branch if MinusBPL Branch if PlusBHI Branch if HigherBHS Branch if Higher or SameBLO Branch if LowerBGT Branch if Greater Than重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东 注意:注意:1、只作检测,满足条件转移,不影响标志位、只作检测,满足条件转移,不影响标志位2、结果不回传、结果不回传例:例:BRCLR $20, #$81, LP1 BRSET $20, #$80, LP2重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3 3、长分支跳转指令、长分支跳转指令、长分支跳转指令、长分支跳转指令特点:特点:1、是在、是在当前当前PCPC的值加上一个的值加上一个1616位带符号数的偏移量,即跳转范围:位带符号数的偏移量,即跳转范围:32768 32767 2 2、与、与JMPJMP指令实现的方法稍有不同,只能跳转指令实现的方法稍有不同,只能跳转32K32K距离。距离。 3 3、与短跳转指令完全类似、与短跳转指令完全类似重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东4 4、循环控制指令、循环控制指令、循环控制指令、循环控制指令特点:特点:1、不影响、不依赖标志位、不影响、不依赖标志位 2、转移范围是、转移范围是 256 255ADD: LDX #$0B00 LEAY 4, X LDAB #4 CLCLOOP: LDAA X ADCA 1,Y+ STAA 1,X+ DBNE B, LOOP重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东5 5、子程序调用与返回指令、子程序调用与返回指令、子程序调用与返回指令、子程序调用与返回指令特点:特点: 1、BSR 调用范围为调用范围为128127,子程序以,子程序以RTS指令返回指令返回 2、JSR调用范围为调用范围为3276832767,支持多种寻址方式,直接寻址方式必,支持多种寻址方式,直接寻址方式必须在须在$0000$00FF内内 (例例: JSR $50 ),子程序以,子程序以RTS指令返回指令返回 3、CALL 用于调用用于调用64K以外的子程序,子程序以以外的子程序,子程序以RTC指令返回指令返回重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3.5 3.3.5 中断指令中断指令中断指令中断指令特点:特点:1、进入中断时,硬件自动保护现场,、进入中断时,硬件自动保护现场,RTI指指令将恢复现场及断点令将恢复现场及断点2、SWI指令不受指令不受I、X的限制,且执行时会自的限制,且执行时会自动将动将I置置1(即自动关闭可屏蔽中断),中(即自动关闭可屏蔽中断),中断向量表入口地址断向量表入口地址$FFF6-$FFF73、各硬件中断有固定的入口地址表,中断、各硬件中断有固定的入口地址表,中断服务程序需用服务程序需用RTI指令返回指令返回重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3.6 S12CPU3.3.6 S12CPU控制类指令控制类指令控制类指令控制类指令特点:特点:1、STOP进入伪停机模式,时钟被关闭,功耗最低;当有中进入伪停机模式,时钟被关闭,功耗最低;当有中断或复位时被唤醒断或复位时被唤醒2、WAI 进入等待模式,时钟仍在工作,当有中断或复位时进入等待模式,时钟仍在工作,当有中断或复位时被唤醒,唤醒速度快被唤醒,唤醒速度快重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.3.7 其它指令其它指令 S12X还提供了高级函数指令和模糊运算指令,主要有:小值、还提供了高级函数指令和模糊运算指令,主要有:小值、大值、插值、乘积累加等大值、插值、乘积累加等重要的其它指令重要的其它指令-程序状态寄存器程序状态寄存器指令指令 特殊的数据访问指令,通常被用来改变程序状态寄存器特殊的数据访问指令,通常被用来改变程序状态寄存器CCR 指令指令操作操作寻址方式址方式ANDCCCLCCLICLVORCCPSHCPULCSECSEISEV(CCR)(M)= CCRC=0I=0V=0(CCR)(M) CCR(SP)1=SP; (CCR) M(SP)M(SP) =CCR; (SP)+1SPC=1I=1V=1IMMIMMIMMIMMIMMINHINHIMMIMMIMM重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东S12X指令系统提供了全局指令系统提供了全局23位地址访问的指令,位地址访问的指令,包括:包括: GLDAA、GLDAB、GLDD、GLDS、GLDX、GLDY、GSTAA、GSTAB、GSTD、GSTS、GSTX、GSTY等,等, S12X总共新增了总共新增了84条这类全局寻址指令。条这类全局寻址指令。全局地址全局地址22:0由由CPU本地地址本地地址15:0和和GPAGE寄寄存器存器22:16联合组成。联合组成。重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.4 使用汇编语言的程序设计使用汇编语言的程序设计程序:完成特定任务的指令的集合程序:完成特定任务的指令的集合程序设计语言:机器语言(二进制指令代码,可直接执行)程序设计语言:机器语言(二进制指令代码,可直接执行) 汇编语言(特定助记符指令语句,须编译)汇编语言(特定助记符指令语句,须编译) 高级语言(通用高级语句,须编译)高级语言(通用高级语句,须编译)单片机应用系统的程序,多用汇编语言编制(单片机应用系统的程序,多用汇编语言编制(*.asm文件)或文件)或C 一个汇编程序语句一个汇编程序语句一条单片机指令一条单片机指令 多个汇编语言语句多个汇编语言语句汇编语言程序(源代码)汇编语言程序(源代码)注:程序需要特定的编译程序进行编译,生成二进制机器码注:程序需要特定的编译程序进行编译,生成二进制机器码 汇编语言:汇编语言: 面向面向MCU硬件,不易移植,但高效、代码量小,是学习基础硬件,不易移植,但高效、代码量小,是学习基础 重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东l汇编语言指令格式汇编语言指令格式 标号标号: 操作码操作码 操作数操作数1 ,操作数操作数2 ;注释注释标号标号-该指令的符号地址,标定程序入口或转移位置该指令的符号地址,标定程序入口或转移位置 注:标号必须以字母开始,分大小写注:标号必须以字母开始,分大小写操作码操作码-助记符,指令所实现的操作功能助记符,指令所实现的操作功能 注:不分大小写;前面无标号时,至少应保留一个空格;必有注:不分大小写;前面无标号时,至少应保留一个空格;必有操作数操作数-参加操作的数据对象,地址、常数或表达式参加操作的数据对象,地址、常数或表达式 注:寄存器寻址已归纳到隐含寻址中,当操作数部分出现寄注:寄存器寻址已归纳到隐含寻址中,当操作数部分出现寄存器时,通常是寄存器变址寻址;分大小写存器时,通常是寄存器变址寻址;分大小写注释注释-为方便阅读、修改而加的注释;可有可无为方便阅读、修改而加的注释;可有可无 注:以注:以“;”开始,本行其后的内容不再编译开始,本行其后的内容不再编译注意:必须在英文输入法或中文半角字符模式下书写指令,全角字符注意:必须在英文输入法或中文半角字符模式下书写指令,全角字符 错错重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东注意:指令必须在半角字符模式下书写,全角字符不能被汇编语言程序识别。还要注意程序书写的规范和风格,如各部分最好按列对齐、统一用大写字母等,以便阅读和维护。下面为一个飞思卡尔汇编语言程序实例:L1: LDAA #$FF ;赋初值 STAA DDRB ;设置B口方向为输出 LDAA #$FE ;赋初值SHIFT:STAA PORTB ;B口循环输出;前面须有标号,表示循环入口地址 BSR DELAY ;调用延时子程序 ROLA ;隐含寻址,不需要操作数 BRA SHIFT ;循环;- ;该行仅有注释,可以是下面子程序的说明DELAY: ;DELAY子程序重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东l常数数据的表示方法常数数据的表示方法 Freescale规定,加前缀规定,加前缀$ 十六进制十六进制% 二进制二进制 八进制八进制 ASCII无无 十进制十进制# 立即数的标记立即数的标记如:如:LDAA #$32 ;立即数立即数 LDAA $32 ;地址地址重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东l汇编程序伪指令汇编程序伪指令 汇编程序使用的辅助性语句,并不生成机器码汇编程序使用的辅助性语句,并不生成机器码起始地址伪指令起始地址伪指令 ORG赋值伪指令赋值伪指令 EQU字节常量伪指令字节常量伪指令 FCB (DC.B)双字节常量伪指令双字节常量伪指令 FDB (DC.W)字符量伪指令字符量伪指令 FCC 例:例:注:定界符可以是注:定界符可以是 、/、”,建议用,建议用 ORG $0008HSTART: LDAA #$FF PORTB EQU $0001BIT0 EQU %0000001 BSET PORTB,BIT0 ;等价于等价于 BSET $0001,%00000001 ORG $0200 TABLE: FCB $13,18,N1+6,21 ORG $1000 LIST: FDB $0519,$2000 ORG $2000 STAR: FCC ABCD重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3.4.2 汇编语言编程实例汇编语言编程实例1. 基本数据传递与算术运算程序基本数据传递与算术运算程序【例例3-1】BCD加法,见书加法,见书【例例3-2】大小排序,见书大小排序,见书2.循环控制程序循环控制程序【例例3-3】2个个8字节数求和字节数求和;*ADD8: LDX #$0B01 LEAY 8,X LDAB #8 CLC LOOP: LDAA X ADCA 1,Y+ STAA 1,X+ DBNE B,LOOP $0B01.$0B09被加数被加数0字节字节被加数被加数1字节字节 加数加数0字节字节加数加数1字节字节RAM区区重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东3. 延时子程序延时子程序硬件延时硬件延时-内部定时器实现,精确,不占内部定时器实现,精确,不占CPU软件延时软件延时-循环执行指令,粗略,占用循环执行指令,粗略,占用CPU【例例3-4】2ms延时。延时。 CPU执行时间:执行时间: T = N x TB T-总执行时间,此总执行时间,此2ms N-总时钟周期数总时钟周期数TB-总线时钟周期总线时钟周期(如如1/8M=125ns) 则需则需N=T/TB=2ms/125ns=16000程序运行:程序运行:N=4+2+3+(1+3)(TCOUNT-1)+(1+1)+3+5 故:故:TCOUNT=3996.253996 注:其它时间可套用此,如注:其它时间可套用此,如20ms改改TCOUNT为为39996(或(或40000) ;* JSR DELAY1 ;4;* TCOUNT EQU 3996 ;无无 DELAY1: PSHX ;2 LDX #TCOUNT;3DLOOP: DEX ;1 BNE DLOOP ;3/1 PULX ;3 RTS ;5 重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东又又【例例3-5】双重循环的双重循环的100ms延时。延时。忽略配合指令的执行时间,粗忽略配合指令的执行时间,粗略估算:略估算:内循环内循环=200 x (1+1+3)T =1000T总时间总时间=100x1000T =100000T2MHz晶振时,总线频率晶振时,总线频率=1MHz T=1us 子程序延时时间即子程序延时时间即100ms;/;子程序子程序DELAY:利用寄存器利用寄存器X、Y,; 执行两重循环实现延时。执行两重循环实现延时。;/DELAY: PSHX PSHY LDX #100DELAY1: LDY #200DELAY2: NOP ;1T NOP ;1T DBNE Y,DELAY2 ;3T DBNE X,DELAY1 PULY PULX RTS 注:其它延时时间套此;但注:其它延时时间套此;但注:其它延时时间套此;但注:其它延时时间套此;但MCUMCU总线频率不同总线频率不同总线频率不同总线频率不同-延时不同延时不同延时不同延时不同重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东4. 4. 数据查表程序数据查表程序数据查表程序数据查表程序【例例例例3-63-6】将将将将A A中的两个中的两个中的两个中的两个4 4位十六进制数转换为位十六进制数转换为位十六进制数转换为位十六进制数转换为ASCIIASCII码,分别存入码,分别存入码,分别存入码,分别存入$2080$2080、$2081$2081中。中。中。中。(09(09的的的的ASCIIASCII码码码码:$30$39,AF:$41$46:$30$39,AF:$41$46);*;子程序子程序TRANS:十六进制数:十六进制数转换为转换为ASCII码码;入口参数:入口参数:(A)=十六进制数,高十六进制数,高4位为位为0;出口参数:出口参数:(B)=ASCII码码;*TRANS: PSHX ;X压栈压栈 LDX #TABLE ;置表地址置表地址 LDAB A,X ;查表查表,(X+A)B PULX ;X出栈出栈 RTS ; 返回返回TABLE: FCC 0123456789ABCDEF;主程序段主程序段* ORG $8000HEXA: TFR A,X ANDA #$0F JSR TRANS STAB $2080 TFR X,A LSRA LSRA LSRA LSRA JSR TRANS STAB $2081 重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东5. 多分支结构程序(类似查表)多分支结构程序(类似查表); 根据根据4x4键盘的键号执行相应子程序。键盘的键号执行相应子程序。 KeyMain: JSR Key16 ;KeyMain: JSR Key16 ;调用键号获取子程序调用键号获取子程序调用键号获取子程序调用键号获取子程序( (键号:键号:键号:键号:0 01515,1616无键按下无键按下无键按下无键按下) ) LDAA Key_Numb ; LDAA Key_Numb ; 加载键号到加载键号到加载键号到加载键号到A A,Key_NumbKey_Numb地址预先有定义地址预先有定义地址预先有定义地址预先有定义 LSLA ; A = A 2LSLA ; A = A 2(分支编号)(分支编号)(分支编号)(分支编号) LDX #Jmp_Table ;LDX #Jmp_Table ;给给给给X X赋表首地址赋表首地址赋表首地址赋表首地址 LDY A, X ;LDY A, X ;给给给给Y Y赋为赋为赋为赋为(X(XA)A),即加偏移,即加偏移,即加偏移,即加偏移A A后查得分支地址后查得分支地址后查得分支地址后查得分支地址 JSR Y ;JSR Y ;跳转到跳转到跳转到跳转到Y Y指的分支地址指的分支地址指的分支地址指的分支地址Jmp_Table: FDB Key0Sub ;Jmp_Table: FDB Key0Sub ;各个分支入口地址列表,双字节!各个分支入口地址列表,双字节!各个分支入口地址列表,双字节!各个分支入口地址列表,双字节! FDB Key1SubFDB Key1Sub FDB Key15Sub FDB Key15Sub FDB KeyNo FDB KeyNoKey0Sub: ;Key0Sub: ;键号键号键号键号0 0功能功能功能功能 RTS RTS Key1Sub: ;Key1Sub: ;键号键号键号键号1 1功能功能功能功能 RTSRTS Key15Sub: ; Key15Sub: ; 键号键号键号键号1515功能功能功能功能 RTSRTSKeyNo: RTS ; KeyNo: RTS ; 无键按下,直接返回无键按下,直接返回无键按下,直接返回无键按下,直接返回重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东Freescale MCU汇编编程几个提示汇编编程几个提示-1、程序是被编译成二进制码放在程序存储器、程序是被编译成二进制码放在程序存储器(FLASH)的,通过的,通过PC递加,自动递加,自动逐条执行;逐条执行;PC值指向的下一条将要执行的指令。值指向的下一条将要执行的指令。2、程序处理主要是通过访问寄存器、数据存储器、程序处理主要是通过访问寄存器、数据存储器(RAM)的各单元实现所需功能的各单元实现所需功能要求的,而要求的,而CPU寄存器寄存器(A,B,X,Y,CCR)是经常要用到的工作寄存器。是经常要用到的工作寄存器。3、理解、理解MCU的存储器空间分配图,寄存器、的存储器空间分配图,寄存器、RAM、FLASH是统一编址在是统一编址在64K地址空间的,每单元地址空间的,每单元8位位(1 Byte);访问寄存器使用其功能符号形式,访问;访问寄存器使用其功能符号形式,访问RAM区可用区可用16位地址形式位地址形式($xxxx)。4、主程序通常是:初始化以后,循环等待或原地等待、主程序通常是:初始化以后,循环等待或原地等待-是个无限循环。是个无限循环。 子程序用标号定义开始,用子程序用标号定义开始,用RTS结束;主程序用结束;主程序用BSR或或JSR调用之;调用之; 中断服务子程序也用标号定义开始,结束则用中断服务子程序也用标号定义开始,结束则用RTI;需要声明中断向量;需要声明中断向量对应的程序入口,其执行是当中断发生时自动被执行的。对应的程序入口,其执行是当中断发生时自动被执行的。5、适当伪指令:辅助编程,便于修改、理解等。、适当伪指令:辅助编程,便于修改、理解等。6、规范与格式:大写、缩进、对齐、注释。文件名、子程序名、标号名自明。、规范与格式:大写、缩进、对齐、注释。文件名、子程序名、标号名自明。7、编程方法:、编程方法: 熟悉指令,理解范例,套用实践,举一反三熟悉指令,理解范例,套用实践,举一反三 由小到大,优化整理,结合硬件,完备应用由小到大,优化整理,结合硬件,完备应用重庆大学通信工程学院重庆大学通信工程学院 任勇、王永东任勇、王永东本章习题:本章习题:1.S12X指令系统的分类?指令系统的分类?2.S12X指令系统有几种寻址方式?指令系统有几种寻址方式?3.变址寻址方式的指令中,作为基址的可以是哪些寄存器?变址寻址方式的指令中,作为基址的可以是哪些寄存器?4.数据载入寄存器、寄存器数据存入内存、寄存器数据传入寄存器、数据载入寄存器、寄存器数据存入内存、寄存器数据传入寄存器、内存数据移入内存这内存数据移入内存这4类指令对应的助记符的关键字的英文含义是类指令对应的助记符的关键字的英文含义是什么?什么?5.理解理解S12XCPU的各条指令格式和功能。的各条指令格式和功能。6.列出列出S12X汇编程序设计中的常数表示方法?汇编程序设计中的常数表示方法?7.什么是伪指令?常用伪指令的功能有哪些?什么是伪指令?常用伪指令的功能有哪些?8.读懂各个程序实例。读懂各个程序实例。9.编写汇编程序:延时编写汇编程序:延时500ms的子程序。的子程序。(两重循环,两重循环,16MHz晶振晶振)10.编写汇编程序:编写汇编程序:10个整数的冒泡法排序程序。个整数的冒泡法排序程序。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号