您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 36飞思卡尔8位单片机MC9S08第5章 HC08 CPU与汇编基础
第五章HC08CPU与汇编基础主要内容HC08CPU基本构成寻址方式指令系统HCS08CPU与HC08CPU的比较08汇编语言基础5.1HC08CPU基本构成5.1HC08CPU基本构成M68HC08系列单片机的各种型号的CPU均使用HC08CPU,有时也将HC08CPU称为CPU08,它具有如下主要特点:①目标代码与M68HC05系列单片机向上兼容;②具有16位堆栈指针SP;③具有16位变址寄存器HX;④8MHzCPU内部总线频率;⑤64KB程序/数据存储器空间;⑥16种寻址方式;⑦不经过累加器A的存储器之间数据直接传送;⑧快速8位×8位乘法指令、快速16位与8位相除指令,增强的BCD指令;⑨模块化结构,可扩展的内部总线定义可使寻址范围超过64KB;⑩低功耗的STOP、WAIT模式。5.1HC08CPU基本构成HC08CPU中有5个寄存器:(1)累加器A(Accumulator)累加器A是8位通用寄存器,用来存放操作数和运算结果。数据读取时,累加器A用于存放从存储器读出的数据;数据写入时,累加器A用于存放准备写入存储器的数据。在执行算术、逻辑操作时,累加器首先存放一个操作数,执行完毕时累加器存放操作结果。累加器A是指令系统中最灵活的一个寄存器,各种寻址方式均可对之寻址。复位时,累加器的内容不受影响。5.1HC08CPU基本构成(2)变址寄存器HX(IndexRegister)HC08CPU的变址寄存器HX是16位寄存器,H是高8位,X是低8位,可单独使用。变址寄存器HX主要用于变址寻址方式中确定操作数的地址,也可以用来存放临时数据,作为一般寄存器使用。复位时,高8位被清零。(3)堆栈指针SP(StackPointer)SP是指向下一个栈地址的16位寄存器,堆栈指针SP采用递减的结构,即进栈时SP减1,出栈时SP加1。复位时,SP的初值为$00FF(前置符号$表示十六进制数,下同)。栈指针复位指令(RSP)可将SP的低8位置为$FF,而不影响高8位。在堆栈指针作为8位或16位的偏移量寻址方式中,SP充当变址寄存器功能,CPU利用SP的内容确定操作数的条件地址。5.1HC08CPU基本构成(4)程序计数器PC(ProgramCounter)程序计数器PC也是16位的,可寻址范围达64KB。PC存放下一条指令的地址,在执行转移指令时存放转移地址,在执行中断指令时存放中断子程序入口地址。复位时,程序计数器PC装入地址$FFFE和$FFFF中的内容。一般地,地址$FFFE和$FFFF中的内容是复位的入口地址,这样,复位后,程序能够从复位入口地址开始执行程序。复位入口地址也称复位向量地址或复位矢量地址(Resetvectoraddress),意味着复位状态过后,PC指向该处,从这里执行程序。(5)条件码寄存器CCR(ConditionCodeRegister)条件码寄存器CCR是8位的寄存器(见图5-1),其中5位(除了中断屏蔽位I)用于指示刚执行完指令的结果状态,这些位可由程序来测试。第6位(D6)和第5位(D5)永远为1,其余位有具体的含义。5.1HC08CPU基本构成HC08CPU的寄存器累加器A变址寄存器H:X堆栈指针SP程序计数器PC条件码寄存器CCR进位/借位标志零标志负标志中断屏蔽位半进位标志溢出标志7015H87X015PCH87PCL070V11HINZC15SPH87SPL0返回5.2寻址方式5.2寻址方式(1)内在寻址方式(INH,Inherentaddressingmode)内在寻址,是指那些在指令中已经包含了操作数所在之处。内在寻址的指令是没有明确指出操作数的指令,操作数由指令隐含,且为单字节指令。这类指令只是执行内在的数据操作。例如累加器加1指令INCA、中断返回指令RTI、停止指令STOP和置进位标志SEC等。(2)立即寻址方式(IMM,Immediateaddressingmode)立即寻址,是在指令中直接给出操作数。这种指令是双字节指令,第一个字节是操作码,第二个字节是参与操作的立即数。立即寻址指令通常是对立即数和累加器内容或变址寄存器内进行操作。下述指令属于IMM寻址方式。LDA#$FC;把十六进制数$FC放入累加器A中5.2寻址方式(3)直接寻址方式(DIR,Directaddressingmode)直接寻址指令,字长二字节,它可以对存储器的起始256个地址($0000~$00FF,叫内存直接页或内存第0页)进行访问。指令的第一个字节是操作码,第二个字节是操作数地址。在直接寻址中,CPU自动把$00作为操作数高位地址,第二个字节作为操作数的低位地址,其寻址范围为$0000~$00FF。下述指令属于DIR寻址方式。LDA$60;将存储单元$60中的数取至累加器ABRSET和BRCLR是2条很特别的3字节指令,它们用直接寻址方式取得操作数,用相对寻址方式指明转移目的地址。例如:BRCLR3,$50,A1;若存储单元$50的第3位=0则转至标号A1处BRSET3,$50,A1;若存储单元$50的第3位=1则转至标号A1处5.2寻址方式(4)扩展寻址方式(EXT,Extendedaddressingmode)扩展寻址指令是三字节指令,可访问存储器中的任何地址。在这种指令中,第一个字节是操作码,第二个字节是操作数的高字节地址,第三个字节是低字节地址。扩展寻址是相对于直接寻址方式而言的,其寻址范围为$0000~$FFFF,比直接寻址范围大得多。下述指令属于EXT寻址方式,因为它的地址已经超过了DIR寻址方式的范围。LDA$023D;将存储单元$023D中的数取至累加器A(5)无偏移量变址方式(IX,Indexed,nooffsetaddressingmode)无偏移量变址的指令是单字节指令。在这种指令中,变址寄存器HX中的内容是操作数的地址。所以无偏移量变址指令可以对$0000~$FFFF地址进行寻址。下述指令属于IX寻址方式。LDA,X;从变址寄存器HX指向的存储器单元中取数到累加器A中COM,X;将变址寄存器HX指向的存储单元数据取反5.2寻址方式(6)八位偏移量变址方式(IX1,Indexed,8-bitoffsetaddressingmode)8位偏移量变址是双字节指令,CPU把变址寄存器HX的内容和指令第二个字节内容相加,其和便是操作数地址。下述指令属于IX1寻址方式。STA$80,X;将A中的数存至地址为HX+$80的存储器单元中INC$80,X;将地址为HX+$80的存储器单元的内容加1(7)十六位偏移量变址方式(IX2,Indexed,16-bitoffsetaddressingmode)该变址方式指令是三字节指令,可访问存储器的任何地址。CPU将变址寄存器HX的内容与指令的第二、三字节相加,和为操作地址。在第二、三字节中,第二字节是高位地址,第三字节是低位地址。下述指令属于IX2寻址方式。STA$280,X;把A中的数存放到以HX+$280为地址的存储单元中INC$280,X;把以HX+$280为地址的存储器单元的内容加15.2寻址方式(8)相对变址寻址方式(REL,Relativeaddressingmode)相对变址只用于转移指令。当转移条件满足时,CPU将指令中的偏移量和程序计数器PC的内容相加,得出转移的目的地址。如果转移条件不满足,则CPU执行下一条指令。转移指令中的偏移量是带符号的,且用一字节表示,因此转移指令的偏移量为-127~+128。偏移量用二进制补码表示。相对变址转移指令的转移范围在下一条指令地址的-127~+128之间。下述指令属于REL寻址方式。BRAA1;无条件转向标号A1处执行BSRL1;调用标号L1处的子程序特别说明:以上8种寻址方式在M68HC05系列中也具有,以下8种为M68HC08系列单片机新增的寻址方式,其中9~12为存储器到存储器的数据传送寻址方式,13~14是含有加1的变址寻址,15~16为堆栈寻址。5.2寻址方式(9)存储器:直接地址—直接地址寻址方式(DD,DirecttodirectaddressingMode)在存储器的四种数据直接传送的寻址方式中,欲传送的数据直接从源存储单元送向目的存储单元,勿需寄存器中转。在本寻址方式中,源地址与目标地址由指令直接给出。只有一条指令为DD寻址方式:MOVN1,N2;把内存变量N1赋值给内存变量N2等同于下列两条指令,但上述指令不影响累加器A。LDAN1STAN2等同于C语言语句:N2=N1;特别说明:这里设N1、N2为内存变量,下同。5.2寻址方式(10)存储器:直接地址—变址、变址加1的寻址方式(DIX+,DirecttoindexedwithpostincrementaddressingMode)源地址为直接地址,目标地址在HX中。把源地址的数据存至目标地址后,HX+1→HX。仅有一条指令为DIX+寻址方式。MOV$80,X+;($80)→(HX),HX+1→HX等同于下列三条,但上述指令不影响累加器A,主要用于内存或端口数据填充一个表格。LDA$80;($80)→ASTA,X;A→(HX)AIX#!1;HX+1→HX特别说明:操作说明栏中,($80)表示地址为$80的内存单元内容。(HX)表示地址为HX值的内存单元。若内存单元作为源操作数,表示从该内存单元中取数,若内存单元作为目的操作数,表示将数存至该内存单元。5.2寻址方式(11)存储器:立即数—直接地址寻址方式(IMD,ImmediatesourcetodirectdestinationaddressingMode)该寻址方式,将立即数存入直接地址,指令给出的地址即作为目的地址,在指令书写中,立即数位于直接地址之前,下述指令为IMD寻址方式。MOV#!86,N1;将立即数!86赋值给内存变量N1等同于C语言语句:N1=86;5.2寻址方式(12)存储器:变址—直接地址、变址加1的寻址方式(IX+D,IndexedwithpostincrementtodirectaddressingMode)HX为源地址,直接地址为目的地址,把源地址的数据存至目标地址后后,HX+1→HX。仅有一条指令为IX+D寻址方式。MOVX+,$80;(HX)→($80),HX+1→HX等同于下列三条指令,但上述指令不影响累加器A,主要用于向端口传送内存数据块。LDA,X;(HX)→ASTA$80;A→($80)AIX#!1;HX+1→HX5.2寻址方式(13)无偏移量变址、变址加1寻址方式(IX+,Indexed,nooffset,postincrementaddressingmode)在这种寻址方式与无偏移量变址寻址方式IX的区别在于,在本寻址方式中多了HX+1→HX的操作。只有一条指令属于IX+寻址方式,该指令先完成比较操作,但不论条件是否满足,均有HX+1→HX。通常用于寻找一段存储区中是否有与A中相等的数。CBEQX+,rel;若A=(HX)则转移,HX+1→HX(14)八位偏移量变址、变址加1寻址方式(IX1+,Indexed,8-bitoffset,postincrementaddressingmode)与上条指令的差别是:目的操作数的地址为8位直接地址+(HX),属于IX+寻址方式的指令也只有一条。CBEQaddr8,X+,rel;若A=(HX+addr8)则转移,HX+1→HX5.2寻址方式(15)八位偏移量堆栈寻址方式(SP1,Stackpointer,8-bitoffsetaddressingmode)8位偏移量堆栈寻址,是将指令给出的8位直接地址与堆栈指针SP相加形成操作数的地址,下列指令属于SP1寻址方式。LDA!2,SP;(2+SP)→A(16)十六位偏移量堆栈寻址方式(SP2,Stackpointer,16-bitoffsetaddressingmode)16位偏移量堆栈寻址,将指令给出的16位直接地址与堆栈指针SP相加形成操作数的地址,下列指令属于SP2寻址方式。LDA$130,SP;将地址$130+SP中的数取至A
本文标题:36飞思卡尔8位单片机MC9S08第5章 HC08 CPU与汇编基础
链接地址:https://www.777doc.com/doc-4211980 .html