资源描述
Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaFreescale 单片机原理及应用单片机原理及应用 Freescale HCS08汇编指令及程序设计汇编指令及程序设计Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 1Slide 1Freescale HCS08汇编指令及程序设计汇编指令及程序设计:理解汇编指令格式、机器码、操作周期含义理解汇编指令16种寻址方式的实质掌握常用汇编指令的功能和用法学会几种常用程序设计方法学会实验开发板的用法Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.China MCU通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该MCU的指令系统;不同类型MCU的指令系统通常不一样,但是都很类似;汇编指令:用符号、指令操作符等编写的语言称为汇编语言 符号约定 数制表示Slide 22.1 汇编指令格式汇编指令格式Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.China符号约定 数制表示 规定在数字前面加前缀#表示立即数,例如:LDA#%01011010;将二进制数%01011010送累加器ALDA#$10;将十六进制数$10送到累加器A 注意指令中的数值前有、无#前缀的区别:LDA%01011010;将地址为%01011010的单元中的内容送ALDA$10;将地址为$10的单元中的内容送累加器A 括号或“”表示单个ASCII码字符或字符串,例如:String FCB“MC9S08AW60”用符号*或$作为操作数时表示当前存储器地址,例如 BRA*;跳转到本身,亦即程序在原地“踏步”。BRA$;跳转到本身,亦即程序在原地“踏步”。符号*处于汇编语句中的第一列时表示该行为注释语句。Slide 32.1 汇编指令格式汇编指令格式Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.China汇编语句格式 HCS08的汇编源程序由一行行汇编语句组成,每行汇编语句的格式为:标号 操作码 操作数 注释 标号必需从一行的第一列开始书写,在一句汇编语句中,标号并不是必需的,汇编程序中的绝大多数语句都没有标号,通常只在子函数或转移目的语句处使用标号。注意,标号区分大、小写字母,AGN和Agn表示不同标号。操作码位于标号部分之后,用至少一个空格或Tab符隔开。操作码可以是伪指令,也可以是指令助记符。对于没有标号的语句,不能从第一列开始写操作码,否则汇编程序会将指令码认作标号而编译出错,应该至少退后一个空格或Tab符后再书写操作码。操作数跟在操作码后,也需用至少一个空格或Tab符隔开。操作数可以是地址、标号、表达式或数值。对于隐含寻址方式的指令语句,则没有操作数。多个操作数之间则用逗号“,”隔开。如:INCA;操作数隐含LDA#0FFH;操作数为数值LDA$40;操作数为地址LDALabe1;操作数为标号LDALabe1+4;操作数为表达式Slide 42.1 汇编指令格式汇编指令格式Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.China汇编语句格式 HCS08的汇编源程序由一行行汇编语句组成,每行汇编语句的格式为:标号 操作码 操作数 注释 操作数跟在操作码后,也需用至少一个空格或Tab符隔开。操作数可以是地址、标号、表达式或数值。对于隐含寻址方式的指令语句,则没有操作数。多个操作数之间则用逗号“,”隔开。如:INCA;操作数隐含LDA#0FFH;操作数为数值LDA$40;操作数为地址LDALabe1;操作数为标号LDALabe1+4;操作数为表达式 为便于理解程序,可以在程序中添加注释。在一行语句中,分号“;”后面的内容为注释。注释部分经汇编后不会生成任何机器指令码。若“*”在一行语句的第一列,则表示该行为注释。注意:汇编指令中的冒号(:)、逗号(,)、分号(;)、星号(*)等标点符号要在英文状态下输入才合法,如果在中文状态下输入,编译器会认作非法字符,在编写汇编代码时应该注意把输入法的状态切换到英文输入状态。Slide 52.1 汇编指令格式汇编指令格式Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaHCS08的CPU能够直接识别和执行的是机器语言,每一条汇编指令都有唯一的16进制编码机器码与之对应,最终写入MCU的程序FLASH空间(1860hffffh)的都是机器码 S08指令机器码和执行周期 S08的指令机器码通常由两部分组成,前一部分为操作码,表示指令功能,后一部分为操作数,表示操作对象。不同指令不仅占用程序FLSAH的空间大小有别(机器码1 3 字节),而且不同指令执行的速度快慢也不一样。指令执行的快慢用指令所占用的机器周期(总线周期)来衡量,执行完一条S08的指令通常需要14 个机器周期(总线周期),根据不同指令而异。Slide 62.2 指令的机器码和操作周期指令的机器码和操作周期Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaS08指令机器码和执行周期 S08的指令机器码通常由两部分组成,前一部分为操作码,表示指令功能,后一部分为操作数,表示操作对象。不同指令不仅占用程序FLSAH的空间大小有别(机器码1 3 字节),而且不同指令执行的速度快慢也不一样。指令执行的快慢用指令所占用的机器周期(总线周期)来衡量,执行完一条S08的指令通常需要14 个机器周期(总线周期),根据不同指令而异。Slide 72.2 指令的机器码和操作周期指令的机器码和操作周期指令到机器码由汇编软件完成,但要学会查附表ACopyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 82.3 S08完整汇编程序框架完整汇编程序框架完整汇编框架Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 92.4 汇编指令寻址方式汇编指令寻址方式 HCS08系统中有多种数据存放空间形式:CPU寄存器、I/O控制和状态寄存器、用户RAM、Flash区等。其中,除CPU寄存器外,其它空间都采用了统一编址方式,结合HCS08的16种不同寻址方式,可以快速、方便、高效地访问这些存储空间。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 102.4 汇编指令寻址方式汇编指令寻址方式 通常将CPU获取操作码和操作数的各种方法称之为寻址方式。在HCS08系统中,所有的存储器、状态和控制寄存器以及I/O端口共享同一个64Kbyte的线性地址空间,这样一来利用一个16位的地址就可以唯一确定存储器空间中的任何一个单元,这意味着使用同一条指令不仅可以访问Ram空间变量,也能访问I/O和控制寄存器,还能访问非易失性编程空间。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 112.4 汇编指令寻址方式汇编指令寻址方式隐含寻址方式隐含寻址方式(INHInherent addressing mode)操作数由指令隐含,执行指令的所有信息均在操作码中,CPU不需要从寄存器、存储器中取操作数,操作数隐含在累加器、变址寄存器或状态标志寄存器中。具有隐含寻址方式的指令多为单字节指令,汇编后生成的操作码在程序存储区只占用一个字节的空间。例如:INCA;累加器A中的内容加1,指令机器码为$4CINCX;变址寄存器X中的内容加1,指令机器码为$5CDECA;累加器A中的内容减1,指令机器码为$4ASEI;中断屏蔽位I置1,指令机器码为$9BCLI;中断屏蔽位I清0,指令机器码为$9ARTS;子程序返回,指令机器码为$81RTI;中断返回,指令机器码为$80TAX;将累加器A中的值赋给变址寄存器X,指令机器码为$97TXA;将变址寄存器X中的值赋给累加器A,指令机器码为$9F08指令系统中的寻址方式是针对整条指令而言,而不像8088系统那样分别针对源操作数、目的操作数。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 122.4 汇编指令寻址方式汇编指令寻址方式立即数寻址方式(IMM Immediate addressing mode)操作数包含在操作码的后继字节中。具有立即寻址方式的指令主要用于访问常数,多为二字节指令,第一个字节为操作码,后面字节为立即数,立即数前面的符号前缀#说明操作码后面的是操作数值而不是操作数地址。例如:LDA#%01011010;将%01011010送到A中,指令操作码为$A65AADC#$30;将A中的内容与立即数$30进行带进位加运算,;和存至累加器A,机器指令码为$A930。AND#$FF;将累加器A中的内容与立即数$FF进行逻辑与运;算,结果存至累加器A,机器指令码为$A4FFLDHX#$2030;三字节指令,给变址寄存器H:X赋值$2030,指;令操作码为$452030 Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 132.4 汇编指令寻址方式汇编指令寻址方式直接寻址方式(DIRDirect addressing mode)操作数的有效地址包含于操作码后的一个字节中。由于操作数的有效地址仅为一个字节,因此直接寻址方式只能对存储器0页的256字节空间($0000$00FF)进行操作。0页存储区含有I/O控制和状态寄存器,还有部分用户数据RAM区。一般将经常要访问的数据放在0页的用户数据RAM中,以节省程序空间,提高数据访问速度。具有直接寻址方式的指令为2字节指令,指令的第一个字节是操作码,第二个字节是操作数的有效地址。例如:LDA$00;将$0000单元(即端口A的数据寄存器)中的内容送入;累加器A中,机器指令码为$B600。STA$40;将累加器A中的值送入$0040单元中,机器码为$B740ADC$50;将累加器A中的内容与存储单元$0050中的内容进行带进;位加运算,和存至累加器A,机器指令码为$B950。ASL$60;将存储单元$0060中的值算术左移一位,机器码为$3860Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 142.4 汇编指令寻址方式汇编指令寻址方式扩展寻址方式(EXTExtended addressing mode)操作数的有效地址包含于操作码后的两个字节中。由于操作数的有效地址为两个字节,因此,采用扩展寻址方式的指令可以访问64KB内的任何存储器空间。具有扩展寻址方式的指令为一般为三字节指令,指令的第一个字节是操作码,第二、三字节是操作数的有效地址。例如:LDA$0200 ;将$0200单元中的内容送入A中,机器码为$C60200STA$0240 ;将A中的值送入$0040单元中,机器码为$C70240 ADC$0250;将A的内容与存储单元$0050中的内容进行带进位加 ;运算,和存至累加器A,机器为$C90250。对于既有直接寻址方式又有扩展寻址方式的指令,如ADC、ADD、AND等,它们在寻址第0页存储空间的存储单元时,是采用直接寻址还是扩展寻址方式由编译软件自动优化,通常是按照直接寻址方式寻址,因为此时采用直接寻址方式的指令执行速度更快、所占用程序空间更小。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 152.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。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 162.4 汇编指令寻址方式汇编指令寻址方式变址寻址方式 操作数的有效地址由16位变址寄存器H:X中的内容和跟在操作码后的无符号偏移量决定。根据偏移量的多少,变址寻址又分为无偏移量变址、8位偏移量变址、16位偏移量变址三种寻址方式:8位偏移量变址寻址(IX1Indexed,8-bit offset addressing mode)操作数的有效地址是16位变址寄存器H:X中的无符号整数与操作码后的一个字节无符号整数之和,这类指令同样可访问存储器中$0000$FFFF范围的任一字节单元。具有8位偏移量变址寻址的指令为2字节指令,一字节为操作码,另一字节为操作数,例如:LDA$10,X ;将用H:X中的值加上$10所得的值为地址的存储单;元中的内容送至A中,指令机器码为$E610。INC$30,X ;将用H:X中的值加上$30所得的值为地址的存储;单元中的内容加1,指令机器码为$6C30。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 172.4 汇编指令寻址方式汇编指令寻址方式变址寻址方式 操作数的有效地址由16位变址寄存器H:X中的内容和跟在操作码后的无符号偏移量决定。根据偏移量的多少,变址寻址又分为无偏移量变址、8位偏移量变址、16位偏移量变址三种寻址方式:16位偏移量变址寻址(IX2Indexed,16-bit offset addressing mode)操作数的有效地址是16位变址寄存器H:X中的无符号整数与操作码后的两字节无符号整数之和,这类指令同样可访问64KB存储器中的任一单元。具有16位偏移量变址寻址的指令为3字节指令,一字节为操作码,两字节为操作数,例如:LDA$0110,X;将用H:X中的值加上$0110所得的值为地址的;存储单元的内容存储至累加器A中,机器指;令码为$D60110。AND$1030,X;将用H:X中的值加上$1030所得的值为地址的;存储单元中的内容与累加器A中的值进行逻;辑与运算,结果存至A中,$D40130。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 182.4 汇编指令寻址方式汇编指令寻址方式变址寻址方式 操作数的有效地址由16位变址寄存器H:X中的内容和跟在操作码后的无符号偏移量决定。根据偏移量的多少,变址寻址又分为无偏移量变址、8位偏移量变址、16位偏移量变址三种寻址方式:无偏移量变址(IXIndexed,no offset addressing mode)8位偏移量变址(IX1Indexed,8-bit offset addressing mode)16位偏移量变址(IX2Indexed,16-bit offset addressing mode)三种变址寻址方式虽然都可访问存储器中的任一单元,但是其对应的指令执行的快慢和汇编后生成的代码长短是不相同的,无偏移量变址寻址的指令执行最快,代码最短,16位偏移量变址寻址的指令执行最慢,代码最长。在所有变址寻址指令中,虽然出现的是X而不是H:X,但要注意变址寻址方式都是以16位寄存器H:X中的值与相应的偏移量相加构成操作数的有效地址,而不是以X中的值与相应的偏移量相加构成操作数的有效地址。另外在变址寻址指令中的无符号整数前并没有#前缀,但代表的是一偏移量数值,而不是地址,要注意与直接寻址和扩展寻址中无#前缀的数值代表地址区分开来。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 192.4 汇编指令寻址方式汇编指令寻址方式相对寻址方式(REL Relative addressing mode)只用于相对转移指令。在这种寻址方式中,CPU首先测试给定的条件,如果满足条件,则发生相对转移,即把当前程序计数器PC的值加上指令码所占字节数,再加上指令操作码后的8位有符号数,使程序转移到PC指定的新地址处,否则CPU执行该条指令的下一条指令。PC值当前PC值本指令所占2字节8位带符号偏移量 具有相对寻址方式的指令为2字节指令,一字节为操作码,一字节为相对偏移量,转移范围为相对于存放机器指令码地址的126到129。用户在编写汇编语言程序时,用一个地址标号代替偏移量,用户不必自己去计算相对偏移量,汇编程序会在汇编用户程序时自动计算出偏移量(8位补码表示),并进行检查,以确定是否超出了有效转移范围。例如:Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 202.4 汇编指令寻址方式汇编指令寻址方式相对寻址方式(REL Relative addressing mode)$9000BCC Pro1;进位标志为0则转移到Pro1标号处执;行,否则顺序;执行下一条语句,机;器指令码为$24rr,rr为相对偏移量,;汇编程序会自动计算。$9012Pro1:INCA;相对寻址方式指令的机器码中rr为一字节相对偏移量(8位补码表示),转移范围为相对于存放机器指令码地址的126到129。此处,rr=10h(9012h=9000h+2+rel)思考 为什么是-126到+129?8位补码:-128到+127&本身为2B指令Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 212.4 汇编指令寻址方式汇编指令寻址方式堆栈寻址方式 操作数的有效地址由16位堆栈指针SP中的内容和跟在操作码后的有符号偏移量决定。根据偏移量的多少,堆栈寻址又分为8位偏移量堆栈寻址和16位偏移量堆栈寻址两种寻址方式。都可以访问存储器中$0000$FFFF范围的任一字节单元。8位偏移量堆栈寻址(SP1)LDA$10,SP;将用SP中的值加上$10所得的和为地址的;存储单元中的值送至累加器A中,指令机器;码为$9EE610。16位偏移量堆栈寻址(SP2)LDA$0110,SP;将用SP中的值加上$0110所得的和为地址;的存储单元中的值送至累加器A中,指令机;器码为$9ED60110 Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 222.4 汇编指令寻址方式汇编指令寻址方式存储器到存储器的寻址方式:指令格式为:MOV 源地址,目的地址 立即数寻址到直接寻址方式(IMM/DIR)MOV#$FF,PTAD;初始化端口A数据寄存器PTAD(地址;为$00)为$FF,机器指令码为$6EFF00。MOV#$FF,$00 ;等同于上面一条语句 直接寻址到直接寻址方式(DIR/DIR)MOV PTBD,PTAD;将端口B数据寄存器($01地址)中的;值送至端口A数据寄存器($00地址),;机器指令码为$4E0100。MOV$70,PTBD;将地址为$70存储单元中的内容送至端;口B数据寄存器($01地址)中,指令操;作码为$4E7001。实现储器到存储器之间的直接数据传送同8086正好相反Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 232.4 汇编指令寻址方式汇编指令寻址方式存储器到存储器的寻址方式:指令格式为:MOV 源地址,目的地址 自动变址寻址到直接寻址方式(IX+/DIR)LDA#$00 STA$0140 ;初始化$0140存储单元内容为$00LDA#$01 STA$0141 ;初始化$0141存储单元内容为$01LDHX#$0140 ;初始化H:X内容为$0140MOV X+,$40 ;将寄存器H:X中内容$0140所指的存储 ;单元中的值$00送至$40存储单元,同时 ;H:X中的值自加1,变为$0141,指令 ;操作码为$7E40。MOV X+,$41 ;$41存储单元被赋值为$01,H:X=$0142,;机器指令码为$7E41。0 00 00 01 1.0 01 14 40 0h h0 01 14 41 1h hx xx x0 01 14 42 2h h.4 40 0h hX XM Me em mo or ry y0 01 1h hH H.0 00 00 00 04 40 0h h.0 01 10 00 04 41 1h hCopyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 242.4 汇编指令寻址方式汇编指令寻址方式存储器到存储器的寻址方式:指令格式为:MOV 源地址,目的地址 直接寻址到自动变址寻址方式(DIX+)MOV#$00,$40;初始化$40存储单元内容为$00MOV#$01,$41;初始化$41存储单元内容为$01LDHX#$0140;初始化H:X内容为$0140MOV$40,X+;将$40单元的内容$00送至H:X中内 ;容$0140所指的存储单元中,同时H:X ;中的值自加1,变为$0141,;机器指令码为$5E40。MOV$41,X+;$0141存储单元被赋值为$01,;H:X=$0142,机器指令码为$5E41。0 00 00 01 1.0 01 14 40 0h h0 01 14 41 1h hx xx x0 01 14 42 2h h.4 40 0h hX XM Me em mo or ry y0 01 1h hH H.0 00 00 00 04 40 0h h.0 01 10 00 04 41 1h hCopyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 252.4 汇编指令寻址方式汇编指令寻址方式存储器到存储器的寻址方式:指令格式为:MOV 源地址,目的地址 立即数寻址到直接寻址方式(IMM/DIR)直接寻址到直接寻址方式(DIR/DIR)自动变址寻址到直接寻址方式(IX+/DIR)直接寻址到自动变址寻址方式(DIX+)注意:由于存储器到存储器寻址方式中,只有用H:X中的内容作为源存储器地址或目的存储器地址时才是16位地址,而其余地址都是8位地址,因此MOV指令并不能实现任一存储器地址到任一存储器地址的直接数据传送,而有一定的限制:立即寻址到直接寻址和直接寻址到直接寻址只能实现零存储页内(00hFFh)的直接传送,自动变址寻址到直接寻址只能实现任一地址到零存储页内的直接传送,直接寻址到自动变址寻址只能实现零存储页到任一地址的直接传送。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 262.4 汇编指令寻址方式汇编指令寻址方式无偏移量变址后加1寻址方式(IX+)仅CBEQ X+,rel 这一条指令采用无偏移量变址后加1寻址方式(IX+Indexed,no offset,post increment addressing mode)。CBEQ X+,Pro1;若H:X中的值所指向的存储单元的内;容和A中的值相等,则转移到标号;Pro1处执行,否则顺序执行下一条;语句,最后再将H:X中的值自动加;1,机器指令码为$71rr,rr为相对;偏移量,具体数值由汇编程序计算。本指令为2B指令,又由于指令码中的相对转移量只为一个字节,所以这条指令转移范围为相对于存放机器指令码地址的126到129字节。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 272.4 汇编指令寻址方式汇编指令寻址方式8位偏移量变址后加1(IX1+)仅转移指令CBEQ opr,X+,rel 采用8位偏移量变址后加1寻址方式(IX1+Indexed,8-bit offset,post increment addressing mode)。CBEQ$10,X+,Pro1;若H:X中的值和8位偏移量$10相加所;得的和所指向的存储单元的内容和A;中的值相等,则转移到标号Pro1处执;行,否则顺序执行下一条语句;最后;再将H:X中的值自动加1,指令操码;为:$6110rr,rr为相对偏移量。本指令为3B指令,又由于指令码中的相对转移量只为一个字节,所以这条指令转移范围为相对于存放机器指令码地址的125到130字节。Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 282.5 常用汇编指令常用汇编指令学习提示:所有汇编指令都有其固定的使用格式见指令表,只要在熟悉其功能的基础上按其固定格式会正确使用即可!不用死记硬背指令。熟悉一些常用指令功能即可,更多的指令可“现学现用”!Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 292.5 常用汇编指令常用汇编指令HCS08指令系统共有一百多条基本指令,每一条指令又各自具有多种不同的寻址方式。为学习方便,根据这些基本指令的功能,可将它们分为以下各大类:数据传送类指令(LDA,STA,TAX,TXA,MOV,CLR)算术运算类指令(ADD,ADC,INC,DEC,CMP,CPX)逻辑操作类指令(AND,ORA,移位)位操作类指令(CLC,SEC,CLI,SEI,BCLR,BSET)转移类指令(BRCLR,BRSET,CCR转移,JMP)堆栈相关指令(PSHA,PULA,PSHX,PULX)其它指令(BSR,JSR,RTS,RTI,NOP,BRN)Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 302.5 汇编程序设计汇编程序设计算术/逻辑运算程序设计 查表程序设计 软件延时程序设计 Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 31思考练习思考练习已知MC9S08AW60的总线频率为4MHz,编写软件延时子程序,实现500ms软件延时,步骤:子函数名为Delay_500ms 完成子程序设计后,按照下列方法验证:在主程序的死循环中,实现下列功能:用PTF5点亮D4一次然后调用子函数Delay_500ms一次,再用PTF5熄灭D4一次然后调用子函数Delay_500ms一次;将主程序编译后生成s19文件,下载至MCU运行,查看核心子板上的蓝色LED:D4是否500ms周期亮灭;初始化PTF5为输出的语句(2条):s BSET 5,PTFDs BSET 5,PTFDD 点亮D4的语句(1条):s BCLR 5,PTFD 熄灭D4的语句(1条):s BSET 5,PTFD Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 32上机练习上机练习2 7段LED数码管和数据线D7-D0接法如图所示,按照下列功能要求编写查表子程序:子函数名为Seg7 入口参数为$70存储单元值 出口参数放到$71单元 入口参数范围:0H1FH 函数功能:生成入口参数所对应的字形码送$71单元,如:0hFh:0F10h1Fh:0.F.完成子程序设计后,按照下列方法验证:在主程序的死循环中依次给$70单元赋值01Fh,依次调用Seg7,然后在通过软件调试查看$71单元值是否被存入正确的字形码Copyright Yang Ming.2011.Electronics and Information Engineering Department of Huazhong University of Science and TechnologyWuhan,Hubei 430074,P.R.ChinaSlide 33Freescale HCS08汇编指令及程序设计汇编指令及程序设计
展开阅读全文