(1)累加器A(Accumulator)
累加器A是8位通用寄存器,用来存放操作数和运算结果。数据读取时,累加器A用于存放从存储器读出的数据;数据写入时,累加器A用于存放准备写入存储器的数据。在执行算术、逻辑操作时,累加器首先存放一个操作数,执行完毕时累加器存放操作结果。累加器A是指令系统中最灵活的一个寄存器,各种寻址方式均可对之寻址。复位时,累加器A的内容不受影响。
(2)变址寄存器HX(IndexRegister)
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。一些指令如位测试、跳转、移位指令等也会影响该标志。