第1节 HC08 CPU 基本结构
推荐给好友
打印
加入收藏
更新于2008-07-25 09:33:59

HC08 CPU有5个寄存器、16种寻址方式、140条基本指令(加上寻址方式可形成270条具体指令),这是学习08汇编语言的基础。本章从程序员角度介绍HC08 CPU的编程结构、寻址方式、指令系统。为方便学习,对HC08 CPU的270条具体指令进行了统一编号。由于HCS08 CPU指令集是HC08 CPU扩充,因此给出了其扩充指令。RS08 CPU指令集是HCS08 CPU指令集的精简版,本章也给出简要介绍。本章还给出了08汇编语言的格式、伪指令。

        08汇编语言是学习08系列MCU的重要基础之一,学好汇编语言有助于进行底层编程、有助于理解编程结构。轻视汇编语言学习与编程,是不正确的学习方法。实际上,学习08汇编语言并不困难,关键是掌握其要领。这些基本要领是:掌握CPU内部5个寄存器的使用方法、理解16种寻址方式、记住常用指令、进行编程实践。

         本章的重点有四:(1)HC08 CPU的寄存器A、X、HX、CCR、PC、SP。主要理解HX作为变址寄存器的用法,理解SP采用递减结构;(2)HC08 CPU的寻址方式。理解CPU的寻址方式对理解和记忆汇编指令很有帮助。(3)HC08 CPU的指令系统。虽然短时间内难以记住指令系统,但是当作英语单词进行一定的记忆,对随后看懂程序很有好处。建议重点记忆指令系统简表。(4)08汇编语言基础。必须了解汇编语言的结构和掌握基本伪指令,才能进行汇编入门。对于汇编程序的基本入门,是学习嵌入式系统的基础之一。一点汇编程序都不理解,难于真正理解嵌入式系统的底层开发。

        对于HCS08 CPU和RS08 CPU,要求基本了解其与HC08 CPU的区别。HC08 CPU和HCS08 CPU差别较小,指令、寻址方式基本相同,HCS08 CPU只是比HC08 CPU多了几条指令。RS08 CPU是HCS08 CPU的简化版本,其CPU变化较大,寻址方式、指令系列都有所精简及优化。

3.1 HC08 CPU基本构成

        M68HC08系列单片机的各种型号的CPU均使用HC08 CPU,有时也将HC08 CPU称为CPU08,它具有如下主要特点:
        ①目标代码与M68HC05系列单片机向上兼容。
        ②具有16位堆栈指针SP。
        ③具有16位变址寄存器HX。
        ④8MHz CPU内部总线频率。
        ⑤64KB程序/数据存储器空间。
        ⑥16种寻址方式。
        ⑦不经过累加器A的存储器之间数据直接传送。
        ⑧快速8位×8位乘法指令、快速16位与8位相除指令,增强的BCD指令。
        ⑨模块化结构,可扩展的内部总线定义可使寻址范围超过64KB。 
        ⑩低功耗的STOP、WAIT模式。

       下面主要对CPU中的寄存器功能进行介绍。从编程角度来说,它代表CPU的结构,即寄存器是程序员能够直接“看到”的CPU结构。至于算术逻辑部件(ALU)的功能与一般计算机含义相同,在此略。
        HC08 CPU中有5个寄存器:累加器A、变址寄存器HX、堆栈指针SP、程序计数器PC和条件码寄存器CCR。这5个寄存器与端口部件的寄存器不同,它们可以被指令直接执行或被控制器直接控制,不需要像端口部件寄存器那样通过存储器映射方式进行读/写。5个寄存器的结构示意图见图3-1。

图3-1 HC08 CPU的寄存器

(1) 累加器A(Accumulator)

        累加器A是8位通用寄存器,用来存放操作数和运算结果。数据读取时,累加器A用于存放从存储器读出的数据;数据写入时,累加器A用于存放准备写入存储器的数据。在执行算术、逻辑操作时,累加器首先存放一个操作数,执行完毕时累加器存放操作结果。累加器A是指令系统中最灵活的一个寄存器,各种寻址方式均可对之寻址。复位时,累加器A的内容不受影响。

(2) 变址寄存器HX(Index Register)

        HC08 CPU的变址寄存器HX是16位寄存器,H是高8位,X是低8位,可单独使用。变址寄存器HX主要用于变址寻址方式中确定操作数的地址,也可以用来存放临时数据,作为一般寄存器使用。复位时,高8位被清零。

(3) 堆栈指针SP(Stack Pointer)

       SP是指向下一个栈地址的16位寄存器,堆栈指针SP采用递减的结构,即进栈时SP减1,出栈时SP加1。复位时,SP的初值为$00FF(前置符号$表示十六进制数,下同)。栈指针复位指令(RSP)可将SP的低8位置为$FF,而不影响高8位。
        在堆栈指针作为8位或16位的偏移量寻址方式中,SP充当变址寄存器功能,CPU利用SP的内容确定操作数的有效地址。

(4) 程序计数器PC(Program Counter)

        程序计数器PC也是16位的,可寻址范围达64KB。PC存放下一条指令的地址,在执行转移指令时存放转移地址,在执行中断指令时存放中断子程序入口地址。复位时,程序计数器PC自动装入地址$FFFE和$FFFF中的内容。一般地,地址$FFFE和$FFFF中的内容是复位的入口地址,这样,复位后,程序能够从复位入口地址开始执行程序。复位入口地址也称复位向量地址或复位矢量地址(Reset vector address),意味着复位状态过后,PC指向该处,从这里执行程序。

(5) 条件码寄存器CCR(Condition Code Register)

        条件码寄存器CCR是8位的寄存器(见图3-1),其中5位(除了中断屏蔽位I)用于指示执行完指令的结果状态,这些位可由程序来测试。第6位(D6)和第5位(D5)永远为1,其余位有具体的含义,分别介绍如下:
        ①V(D7)—溢出标志位(Overflow Flag)
当二进制补码溢出时置位。有符号跳转指令BGT、BGE、BLE和BLT使用该标志。

      ②H(D4)—半进位标志位(Half-Carry Flag)        执行加法指令(ADD)和带进位加法指令(ADC)时,如果相加的结果的低四位向上产生进位,即累加器D3向D4有进位,则CPU将半进位标志H置“1”。该标志对于一般运算是没有用的,但在二进制编码的十进制(BCD)数据运算中则很有用,由于BCD码是以四位二进制数来表示一位十进制数,所以在BCD码算术运算中,半进位标志H记录的是一位十进制数的进位。做十进制调整(DAA)时,利用H和C的状态来判断是否调整。

        ③I(D3)—中断屏蔽标志位(Interrupt Mask Flag)
         I=1表示屏蔽中断,即禁止中断;I=0表示允许中断,即开放中断。复位时,该位被置“1”,可用CLI指令开中断。中断响应时,CPU将除H寄存器以外的寄存器推入堆栈,然后执行中断服务子程序,遇到RTI指令时,从栈中恢复包括CCR在内的各寄存器。当然也包括这一位的状态。为了保持与M68HC05系列兼容,变址寄存器高字节即H寄存器,在中断时未被自动保护(CPU内部自动保护了A、X、CCR、PC),若在中断服务子程序中用到H寄存器的话,需要程序对H进行保护,可用PSHH和PULH使其进栈、出栈。

        ④N(D2)—负标志位(Negative Flag)
        CPU进行运算过程中,如果产生负结果,则将负标志N置为“1”。该情况用于有符号位的运算,数据位的最高位D7作为符号位,如果D7=1,说明数据为负,如果D7=0,说明数据为正。如果寄存器或存储单元的D7为1,那么把寄存器或存储单元的内容送入累加器A时,就会使N=1。如果寄存器或存储单元的D7为0,那么把寄存器或存储单元的内容送入累加器A时,就会使N=0。所以,负标志位N可用于检查有关寄存器或存储单元D7位的状态。

        ⑤Z(D1)—零标志位(Zero Flag)
        CPU进行运算过程中,如果数据或运算结果为0,零标志位Z被置“1”,否则被清“0”。

        ⑥C(D0)—进位/借位标志(Carry/Borrow Flag)
         当进行加法运算时,在最高位D7上有进位;或在进行减法运算时D7需要向更高位借位,则CPU将进位/借位标志C置1,否则清0。一些指令如位测试、跳转、移位指令等也会影响该标志。

<< 上一节 下一节>>

 

 

 

 

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.