第5章汇编语言程序设计_第1页
第5章汇编语言程序设计_第2页
第5章汇编语言程序设计_第3页
第5章汇编语言程序设计_第4页
第5章汇编语言程序设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、 S12X汇编程序设计与实例汇编程序设计与实例3.4.0 汇编语言程序基础汇编语言程序基础特点:与硬件相关不易移植,高效、直接面对硬件、代码量小;特点:与硬件相关不易移植,高效、直接面对硬件、代码量小;程序:完成特定任务的指令的集合,程序:完成特定任务的指令的集合,程序设计语言:机器语言(二进制指令代码,可直接执行)程序设计语言:机器语言(二进制指令代码,可直接执行) 汇编语言(特定助记符指令语句,须汇编)汇编语言(特定助记符指令语句,须汇编) 高级语言(通用高级语句,须编译)高级语言(通用高级语句,须编译)单片机应用系统的程序,多用汇编语言编制(单片机应用系统的程序,多用汇编语言编制(*.a

2、sm文件)或文件)或C 一个汇编程序语句一个汇编程序语句一条单片机指令一条单片机指令 多个汇编语言语句多个汇编语言语句汇编语言程序(源代码)汇编语言程序(源代码)注:程序需要特定的编译程序进行编译,生成二进制机器码注:程序需要特定的编译程序进行编译,生成二进制机器码 3.4.1汇编语言指令格式与伪指令汇编语言指令格式与伪指令1.汇编指令格式汇编指令格式 标号:标号: 操作码操作码 操作数操作数1 ,操作数,操作数2 ;注释;注释标号标号-该指令的符号地址,标定程序入口或转移位置该指令的符号地址,标定程序入口或转移位置 注:标号必须以字母开始,注:标号必须以字母开始,分大小写。分大小写。 用途:

3、数据定义、子程序、中断、循环、跳转。用途:数据定义、子程序、中断、循环、跳转。操作码操作码-助记符,指令所实现的操作功能助记符,指令所实现的操作功能 注:不分大小写;前面无标号时,注:不分大小写;前面无标号时,至少应保留一个空格至少应保留一个空格操作数操作数-参加操作的数据对象,常数、符号或表达式参加操作的数据对象,常数、符号或表达式 注:寄存器寻址已归纳到隐含寻址中,当操作数部分注:寄存器寻址已归纳到隐含寻址中,当操作数部分出现寄存器时,一定是寄存器间址;出现寄存器时,一定是寄存器间址;分大小写;分大小写;注释注释-为方便阅读、修改而加的注释,可有可无为方便阅读、修改而加的注释,可有可无 注

4、:以注:以“;”开始,本行之后的内容不再编译开始,本行之后的内容不再编译2.数据的表示方法数据的表示方法 Freescale规定,加前缀规定,加前缀$ 十六进制十六进制% 二进制二进制 八进制八进制 ASCII无无 十进制十进制# 立即数的标记立即数的标记如:如:LDAA #$32 ;立即数立即数 LDAA $32 ;地址地址3. 汇编程序伪指令汇编程序伪指令 汇编程序使用的辅助性语句,不生成机器码汇编程序使用的辅助性语句,不生成机器码.1、起始地址伪指令、起始地址伪指令 ORG ORG $2000H START: LDAA #$FF2、赋值伪指令、赋值伪指令 EQU PORTB EQU $0

5、001 BIT0 EQU %00000001 BSET PORTB, BIT0 ;等价于;等价于 BSET $0001, %00000001Vtimovf: equ $0000FFDEVtimch7: equ $0000FFE0Vtimch6: equ $0000FFE2Vtimch5: equ $0000FFE4Vtimch4: equ $0000FFE6Vtimch3: equ $0000FFE8Vtimch2: equ $0000FFEAVtimch1: equ $0000FFECVtimch0: equ $0000FFEEVrti: equ $0000FFF0Virq: equ $00

6、00FFF2Vxirq: equ $0000FFF4Vswi: equ $0000FFF6Vtrap: equ $0000FFF8Vcop: equ $0000FFFAVclkmon: equ $0000FFFCVreset: equ $0000FFFE;* PORTB - Port B Register; 0 x00000001 *PORTB: equ $00000001 ;* PORTB - Port B Register; 0 x00000001 *; bit numbers for usage in BCLR, BSET, BRCLR and BRSETPORTB_PB0: equ 0

7、 ; Port B Bit 0PORTB_PB1: equ 1 ; Port B Bit 1PORTB_PB2: equ 2 ; Port B Bit 2PORTB_PB3: equ 3 ; Port B Bit 3PORTB_PB4: equ 4 ; Port B Bit 4PORTB_PB5: equ 5 ; Port B Bit 5PORTB_PB6: equ 6 ; Port B Bit 6PORTB_PB7: equ 7 ; Port B Bit 7; bit position masksmPORTB_PB0: equ %00000001mPORTB_PB1: equ %000000

8、10mPORTB_PB2: equ %00000100mPORTB_PB3: equ %00001000mPORTB_PB4: equ %00010000mPORTB_PB5: equ %00100000mPORTB_PB6: equ %01000000mPORTB_PB7: equ %100000004.常量存储常量存储 (1)字节常量伪指令)字节常量伪指令 FCB ( DC.B ) ORG $0200 TABLE: FCB $13,18,N1+6,21 (2)双字节常量伪指令)双字节常量伪指令 FDB ( DC.W ) ORG $1000 LIST: FDB $0519, $2000 (3

9、)字符量伪指令)字符量伪指令 FCC ORG $2000 STAR: FCC ABCD注:定界符可以是()、(/)、(”),建议使用()5.关于数据变量伪指令使用需要注意的问题关于数据变量伪指令使用需要注意的问题 FLASH 常数可以读,不能修改;常数可以读,不能修改; RAM 常数可以读写;常数可以读写;n 绝对地址方式编译的程序绝对地址方式编译的程序, 可以将数据定义在可以将数据定义在RAMRAM区域,区域, 即即$0000-$4000;$0000-$4000;n 以可以重定位的方式编译以可以重定位的方式编译,需要建立不同的数据段。,需要建立不同的数据段。 常量段定义在常量段定义在FLAS

10、HFLASH中;中; 数据段定义在数据段定义在RAM RAM 中中 ; 不能用不能用ORGORG伪指令将伪指令将FLASHFLASH中的变量强制定义到中的变量强制定义到RAM;RAM;n 数据段数据段 仅使用仅使用DSDS伪指令的数据段;伪指令的数据段;可重定位方式的实例可重定位方式的实例-C1内容方式变化内容方式变化FG 内容没有变化不是内容没有变化不是18仍然是初始的仍然是初始的1伪指令伪指令ORG不能将不能将FLASH段段数据定位到数据定位到RAM绝对地址方式实例绝对地址方式实例Freescale MCU编程几个提示编程几个提示-1、程序是被编译成二进制码放在程序存储器、程序是被编译成二

11、进制码放在程序存储器(FLASH)的,通过的,通过PC递加,自动逐条执行;递加,自动逐条执行;PC值指向的下一条将要执行的指令。值指向的下一条将要执行的指令。2、程序处理主要是通过访问寄存器、数据存储器、程序处理主要是通过访问寄存器、数据存储器(RAM)的各单的各单元实现所需功能要求的,而元实现所需功能要求的,而CPU寄存器寄存器(A,B,X,Y,CCR)是经常是经常要用到的工作寄存器。要用到的工作寄存器。3、理解、理解MCU的存储器空间分配图,寄存器、的存储器空间分配图,寄存器、RAM、FLASH是是统一编址在统一编址在64K地址空间的,每单元地址空间的,每单元8位;访问寄存器使用其位;访问

12、寄存器使用其功能符号形式,访问功能符号形式,访问RAM区可用区可用16位地址形式位地址形式($xxxx)。5、适当伪指令:辅助编程,便于修改、理解等。、适当伪指令:辅助编程,便于修改、理解等。6、注意格式:大写、缩进、对齐、注释。、注意格式:大写、缩进、对齐、注释。7、编程方法:、编程方法: 熟悉指令,理解范例,套用实践,举一反三熟悉指令,理解范例,套用实践,举一反三 由小到大,优化整理,结合硬件,完备应用由小到大,优化整理,结合硬件,完备应用4、主程序通常是:初始化以后,循环等待或原地等待。、主程序通常是:初始化以后,循环等待或原地等待。 子程序用标号定义开始,用子程序用标号定义开始,用RT

13、S结束;结束; 主程序用主程序用BSR或或JSR调用之;调用之; 中断服务子程序也用标号定义开始,结束则用中断服务子程序也用标号定义开始,结束则用RTI;需;需要声明中断向量对应的程序入口,其执行是当中断发生时要声明中断向量对应的程序入口,其执行是当中断发生时自动被执行的。自动被执行的。3.4.2 汇编语言程序设计实例汇编语言程序设计实例【例】【例】2个个8字节数求和,字节数求和,结果保存在被加数所在地址中。结果保存在被加数所在地址中。 ;*ADD8: LDX #$0B01 LEAY 8,X LDAB #8 CLC LOOP: LDAA X ADCA 1,Y+ STAA 1,X+ DBNE B

14、,LOOP $0B01.$0B09被加数被加数0字节字节被加数被加数1字节字节 加数加数0字节字节加数加数1字节字节RAM区区n计数器控制次数计数器控制次数n16位加法指令没有带位加法指令没有带Cn加法指令没有加法指令没有M+MnLDAA 不影响不影响C位位n自动加减寻址方便自动加减寻址方便nX,Y作为指针使用作为指针使用【例】将【例】将A中的两个中的两个4位十六进制数转换为位十六进制数转换为ASCII码,分别存入码,分别存入$1080、$1081中。中。(09的的ASCII码码:$30$39,AF:$41$46);*;子程序子程序TRANS:十六进制数转换为:十六进制数转换为ASCII码码;

15、入口参数:入口参数:(A)=十六进制数,十六进制数,高高4位为位为0;出口参数:出口参数:(B)=ASCII码码;*TRANS: PSHX ;压栈压栈 LDX #TABLE ;置表地址置表地址 LDAB A,X ;查表查表,(X+A)B PULX ; 出栈出栈 RTS ; 返回返回TABLE: FCC 0123456789ABCDEF;主程序段主程序段* ORG $8000HEXA: TFR A,X ANDA #$0F JSR TRANS STAB $1080 TFR X,A LSRA LSRA LSRA LSRA JSR TRANS STAB $1081 讨论:讨论:1.子程序压栈,保存数据

16、子程序压栈,保存数据 2.子程序定义入口出口参数子程序定义入口出口参数 3.TABLE 是是ASCII码码【例】比较【例】比较RAM区内两相邻单元中无符号数的大小,按小数在区内两相邻单元中无符号数的大小,按小数在前、大数在后重新存放前、大数在后重新存放(首址在首址在$2000)。若等则。若等则Y寄存器加寄存器加1。 LDX #$2000 ;首地址首地址 CLC ;C清零清零 LDY #0 ;Y清零清零BEGIN: LDAA 0,X ;(0+X)A LDAB 1,X ;(1+X)B CBA ;(A)-(B) BCS DONE ;减有借位减有借位(前小后大前小后大),无需调整,跳转无需调整,跳转

17、BEQ FLAG ;相等,跳转相等,跳转 STAA 1,X ;A(1+X) STAB 0,X ;B(0+X) BRA DONE ;调整完毕,跳转调整完毕,跳转FLAG: INY ;Y+1Y DONE: BRA * ;结束结束 EXTERN CHAR YEAR , MONTHCHAR M-LENGTH() IF (MONTH = 2 ) IF ( YEAR%4) RETURN (28); ELSE RETURN (29) ELSE IF( MONTH=4| MONTH=6|MONTH=9|MONTH=11) RETURN(30); ELSE (RETURN (31); 汇编语言编程技巧汇编语言编

18、程技巧- 计算年月对应的天数计算年月对应的天数月月对对应应bit01112203314405516607718919100101111112012131n变换后:变换后: 大月是奇数,大月是奇数, 小月是偶数;小月是偶数;n方法:方法: 大于等于大于等于8月加月加1;n算法:算法:30+bit0;n特殊:特殊: 2月是奇点,月是奇点, 需要特殊需要特殊处理;处理; 算法分析算法分析入口:入口: MONTH , YEAR ;出口:出口:A寄存器返回天数。寄存器返回天数。M_LENGTH: LDAA #30 ; A寄存器存放天数,初始寄存器存放天数,初始30天天 LDAB #2 CMPB MONT

19、H ;是二月特殊月份?;是二月特殊月份? BEQ FEBRARY ;是,;是, 转到二月处理转到二月处理 LDAB MONTH ;进入非二月份;进入非二月份 CMPB #8 ;变换,使得大月始终为奇数;变换,使得大月始终为奇数 BLT ODDBIG INCBODDBIG: ANDB #1 ;寄存器;寄存器B 大月为大月为1, 小月为小月为0 ABA ; A寄存器为返回的天数寄存器为返回的天数30 或或31天天 RTSFEBRARY: DECA ;二月最大;二月最大29天天 LDAB YEAR ;取年;取年 ANDB %00000011 ;被;被4整除后的余数整除后的余数 BEQ FINI ;闰

20、年?;闰年? 是返回是返回29天天 DECA ;否;否 返回返回28天天FINI: RTS ENDEND 汇编特点:汇编特点:nAND 实现取余数效率高;实现取余数效率高;n变换用变换用INC指令快、短指令快、短n操作在寄存器进行操作在寄存器进行3. 数据查表程序数据查表程序【例】数码管显示按键数值。【例】数码管显示按键数值。;*COUNT1 EQU $2000 DELAY: CLC LDAA #$00 STAA COUNTER1 LDY #TABLE2LP3: LDAB Y INY LDAA PORTA SBA BEQ DISPLAY1 INC COUNTER1 BRA LP3DISPLAY

21、1: LDAA #$00 STAA PTT LDAB COUNTER1;相对量相对量COUNTER1: LDY #TABLE3 LDAA B,Y STAA PTP RTS TABLE2: FCB $ee,$de,$be,$7e,$ed,$dd,$bd,$7d,$eb,$db,$bb,$7b,$e7,$d7,$b7,$77 ;4x4行列键值,预定义的,行列键值,预定义的,16个可能的读回值个可能的读回值TABLE3: FCB $f9,$a4,$b0,$99,$92,$82,$f8,$80,$90,$c0,$88,$83,$c6,$a1,$86,$8e;共阳字符编码共阳字符编码: 1, 2, 3,

22、 4, 5, 6, 7, 8, 9, 0, A, B, C, D, E, F 讨论:讨论:1.假设假设A口输入一定是规定范围口输入一定是规定范围 2.变量变量COUNTER1可以不用;可以不用; 3. #TABLE2 4.BEQ DISPLAY1? CPU执行时间:执行时间: T = N x TB T-总执行时间总执行时间 , N-总时钟周期数,总时钟周期数, TB-总线时钟周期总线时钟周期(例如:晶振频率为(例如:晶振频率为16MHz,则总线时钟频率为则总线时钟频率为8MHz,TB = 1/8M=125ns )【例】【例】2ms延时。延时。(晶振频率为晶振频率为16MHz) 则需则需N=T / TB = 2ms / 125ns = 16000程序运行:程序运行:N=4+2+3+(1+3)(TCOUNT-1)+(1)+3+5 故:故:TCOUNT=3996.2539962. 延时

温馨提示

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

评论

0/150

提交评论