S08_03_Freescale HCS08汇编指令及程序设计

上传人:油条 文档编号:26878423 上传时间:2018-01-03 格式:PPT 页数:34 大小:626KB
返回 下载 相关 举报
S08_03_Freescale HCS08汇编指令及程序设计_第1页
第1页 / 共34页
S08_03_Freescale HCS08汇编指令及程序设计_第2页
第2页 / 共34页
S08_03_Freescale HCS08汇编指令及程序设计_第3页
第3页 / 共34页
S08_03_Freescale HCS08汇编指令及程序设计_第4页
第4页 / 共34页
S08_03_Freescale HCS08汇编指令及程序设计_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《S08_03_Freescale HCS08汇编指令及程序设计》由会员分享,可在线阅读,更多相关《S08_03_Freescale HCS08汇编指令及程序设计(34页珍藏版)》请在金锄头文库上搜索。

1、Freescale 单片机原理及应用,Freescale HCS08汇编指令及程序设计,Slide 1,Slide 1,Freescale HCS08汇编指令及程序设计,Contents and Objectives:理解汇编指令格式、机器码、操作周期含义理解汇编指令16种寻址方式的实质掌握常用汇编指令的功能和用法学会几种常用程序设计方法学会实验开发板的用法,MCU通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该MCU的指令系统;不同类型MCU的指令系统通常不一样,但是都很类似;汇编指令:用符号、指令操作符等编写的语言称为汇编语言符号约定数制表示,

2、Slide 2,2.1 汇编指令格式,符号约定 数制表示规定在数字前面加前缀#表示立即数,例如:LDA#%01011010;将二进制数%01011010送累加器ALDA#$10;将十六进制数$10送到累加器A注意指令中的数值前有、无#前缀的区别:LDA%01011010;将地址为%01011010的单元中的内容送ALDA$10;将地址为$10的单元中的内容送累加器A括号或“”表示单个ASCII码字符或字符串,例如:String FCB“MC9S08AW60”用符号*或$作为操作数时表示当前存储器地址,例如 BRA *;跳转到本身,亦即程序在原地“踏步”。BRA$;跳转到本身,亦即程序在原地“踏

3、步”。符号*处于汇编语句中的第一列时表示该行为注释语句。,Slide 3,2.1 汇编指令格式,汇编语句格式 HCS08的汇编源程序由一行行汇编语句组成,每行汇编语句的格式为:标号 操作码 操作数 注释 标号必需从一行的第一列开始书写,在一句汇编语句中,标号并不是必需的,汇编程序中的绝大多数语句都没有标号,通常只在子函数或转移目的语句处使用标号。注意,标号区分大、小写字母,AGN和Agn表示不同标号。 操作码位于标号部分之后,用至少一个空格或Tab符隔开。操作码可以是伪指令,也可以是指令助记符。对于没有标号的语句,不能从第一列开始写操作码,否则汇编程序会将指令码认作标号而编译出错,应该至少退后

4、一个空格或Tab符后再书写操作码。 操作数跟在操作码后,也需用至少一个空格或Tab符隔开。操作数可以是地址、标号、表达式或数值。对于隐含寻址方式的指令语句,则没有操作数。多个操作数之间则用逗号“,”隔开。如:INCA;操作数隐含LDA#0FFH;操作数为数值LDA$40;操作数为地址LDALabe1; 操作数为标号LDALabe1+4; 操作数为表达式,Slide 4,2.1 汇编指令格式,汇编语句格式 HCS08的汇编源程序由一行行汇编语句组成,每行汇编语句的格式为:标号 操作码 操作数 注释 操作数跟在操作码后,也需用至少一个空格或Tab符隔开。操作数可以是地址、标号、表达式或数值。对于隐

5、含寻址方式的指令语句,则没有操作数。多个操作数之间则用逗号“,”隔开。如:INCA;操作数隐含LDA#0FFH;操作数为数值LDA$40;操作数为地址LDALabe1; 操作数为标号LDALabe1+4; 操作数为表达式 为便于理解程序,可以在程序中添加注释。在一行语句中,分号“;”后面的内容为注释。注释部分经汇编后不会生成任何机器指令码。若“*”在一行语句的第一列,则表示该行为注释。 注意:汇编指令中的冒号(:)、逗号(,)、分号(;)、星号(*)等标点符号要在英文状态下输入才合法,如果在中文状态下输入,编译器会认作非法字符,在编写汇编代码时应该注意把输入法的状态切换到英文输入状态。,Sli

6、de 5,2.1 汇编指令格式,HCS08的CPU能够直接识别和执行的是机器语言,每一条汇编指令都有唯一的16进制编码机器码与之对应,最终写入MCU的程序FLASH空间(1860hffffh)的都是机器码 S08指令机器码和执行周期S08的指令机器码通常由两部分组成,前一部分为操作码,表示指令功能,后一部分为操作数,表示操作对象。 不同指令不仅占用程序FLSAH的空间大小有别(机器码1 3 字节),而且不同指令执行的速度快慢也不一样。指令执行的快慢用指令所占用的机器周期(总线周期)来衡量,执行完一条S08的指令通常需要14 个机器周期(总线周期) ,根据不同指令而异。,Slide 6,2.2

7、指令的机器码和操作周期,S08指令机器码和执行周期S08的指令机器码通常由两部分组成,前一部分为操作码,表示指令功能,后一部分为操作数,表示操作对象。 不同指令不仅占用程序FLSAH的空间大小有别(机器码1 3 字节),而且不同指令执行的速度快慢也不一样。指令执行的快慢用指令所占用的机器周期(总线周期)来衡量,执行完一条S08的指令通常需要14 个机器周期(总线周期) ,根据不同指令而异。如:LDA#$10; 机器码 A610h,2个总线周期如上述指令为2字节,表明它要占用2B的程序FLASH空间(1860h 0ffffh) 若总线时钟=4Mhz,则上述指令需要0.5us时间才能执行完。作业:

8、P73第2题;白纸作业;下周2交,Slide 7,2.2 指令的机器码和操作周期,指令到机器码由汇编软件完成,但要学会查附表A,Slide 8,2.3 S08完整汇编程序框架,完整汇编框架,Slide 9,2.4 汇编指令寻址方式,HCS08系统中有多种数据存放空间形式:CPU寄存器、I/O控制和状态寄存器、用户RAM、Flash区等。其中,除CPU寄存器外,其它空间都采用了统一编址方式,结合HCS08的16种不同寻址方式,可以快速、方便、高效地访问这些存储空间。,Slide 10,2.4 汇编指令寻址方式,通常将CPU获取操作码和操作数的各种方法称之为寻址方式。在HCS08系统中,所有的存储

9、器、状态和控制寄存器以及I/O端口共享同一个64Kbyte的线性地址空间,这样一来利用一个16位的地址就可以唯一确定存储器空间中的任何一个单元,这意味着使用同一条指令不仅可以访问Ram空间变量,也能访问I/O和控制寄存器,还能访问非易失性编程空间。,Slide 11,2.4 汇编指令寻址方式,隐含寻址方式(INHInherent addressing mode ) 操作数由指令隐含,执行指令的所有信息均在操作码中,CPU不需要从寄存器、存储器中取操作数,操作数隐含在累加器、变址寄存器或状态标志寄存器中。具有隐含寻址方式的指令多为单字节指令,汇编后生成的操作码在程序存储区只占用一个字节的空间。例

10、如:INCA;累加器A中的内容加1,指令机器码为$4CINCX;变址寄存器X中的内容加1,指令机器码为$5CDECA;累加器A中的内容减1,指令机器码为$4ASEI;中断屏蔽位I置1,指令机器码为$9BCLI;中断屏蔽位I清0,指令机器码为$9ARTS;子程序返回,指令机器码为$81RTI;中断返回,指令机器码为$80TAX;将累加器A中的值赋给变址寄存器X,指令机器码为$97TXA;将变址寄存器X中的值赋给累加器A,指令机器码为$9F,08指令系统中的寻址方式是针对整条指令而言,而不像8088系统那样分别针对源操作数、目的操作数。,Slide 12,2.4 汇编指令寻址方式,立即数寻址方式(

11、IMM Immediate addressing mode ) 操作数包含在操作码的后继字节中。具有立即寻址方式的指令主要用于访问常数,多为二字节指令,第一个字节为操作码,后面字节为立即数,立即数前面的符号前缀#说明操作码后面的是操作数值而不是操作数地址。例如:LDA#%01011010;将%01011010送到A中,指令操作码为$A65AADC#$30;将A中的内容与立即数$30进行带进位加运算,;和存至累加器A,机器指令码为$A930。AND#$FF;将累加器A中的内容与立即数$FF进行逻辑与运;算,结果存至累加器A,机器指令码为$A4FFLDHX #$2030;三字节指令,给变址寄存器H

12、:X赋值$2030,指;令操作码为$452030,Slide 13,2.4 汇编指令寻址方式,直接寻址方式( DIRDirect addressing mode ) 操作数的有效地址包含于操作码后的一个字节中。由于操作数的有效地址仅为一个字节,因此直接寻址方式只能对存储器0页的256字节空间($0000$00FF)进行操作。0页存储区含有I/O控制和状态寄存器,还有部分用户数据RAM区。一般将经常要访问的数据放在0页的用户数据RAM中,以节省程序空间,提高数据访问速度。具有直接寻址方式的指令为2字节指令,指令的第一个字节是操作码,第二个字节是操作数的有效地址。例如:LDA $00;将$0000

13、单元(即端口A的数据寄存器)中的内容送入;累加器A中,机器指令码为$B600。STA $40;将累加器A中的值送入$0040单元中,机器码为$B740ADC $50;将累加器A中的内容与存储单元$0050中的内容进行带进;位加运算,和存至累加器A,机器指令码为$B950。ASL $60;将存储单元$0060中的值算术左移一位,机器码为$3860,Slide 14,2.4 汇编指令寻址方式,扩展寻址方式( EXTExtended addressing mode ) 操作数的有效地址包含于操作码后的两个字节中。由于操作数的有效地址为两个字节,因此,采用扩展寻址方式的指令可以访问64KB内的任何存储

14、器空间。具有扩展寻址方式的指令为一般为三字节指令,指令的第一个字节是操作码,第二、三字节是操作数的有效地址。例如:LDA $0200 ;将$0200单元中的内容送入A中,机器码为$C60200STA $0240 ; 将A中的值送入$0040单元中,机器码为$C70240 ADC $0250 ;将A的内容与存储单元$0050中的内容进行带进位加 ;运算,和存至累加器A,机器为$C90250。对于既有直接寻址方式又有扩展寻址方式的指令,如ADC、ADD、AND等,它们在寻址第0页存储空间的存储单元时,是采用直接寻址还是扩展寻址方式由编译软件自动优化,通常是按照直接寻址方式寻址,因为此时采用直接寻址

15、方式的指令执行速度更快、所占用程序空间更小。,Slide 15,2.4 汇编指令寻址方式,变址寻址方式 操作数的有效地址由16位变址寄存器H:X中的内容和跟在操作码后的无符号偏移量决定。根据偏移量的多少,变址寻址又分为无偏移量变址、8位偏移量变址、16位偏移量变址三种寻址方式:无偏移量变址寻址( IXIndexed,no offset addressing mode) 操作数的有效地址在16位变址寄存器H:X中。由于H:X为16位,故可访问存储器中的所有64K字节空间($0000$FFFF)。具有无偏移量变址寻址的指令为单字节指令,例如:LDA ,X ;将以H:X中的值为地址的存储单元中的内容送至A中, ;指令机器码为$F6。STA ,X ;将A中的值送至以H:X中的值为地址的存储单元中,指 ;令机器码为$F7。ADD ,X ;将(H:X)+A之和送至A中,机器码为$FB。INC ,X ;将以H:X中的值为地址的存储单元内容加1,$7C。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号