3.CPU/CPUX内部寄存器: 首先介绍一下MSP430 CPU/CPUX的主要特征: - 丰富的寄存器资源
- 单周期操作寄存器
- 16位数据总线 16位/20位地址总线
- 常数发生器
- 直接存储器到存储器的访问
- 位,字节和字的操作方式。
寄存器列表:
下面以CPU(16位地址线)为例讲解一下每个寄存器的作用: R0寄存器:PC 程序计数器
CPU中最核心的寄存器,指示下一条即将执行指令的地址。 PC寄存器的内容总是偶数,指向偶字节地址。程序计数器PC可以像其他寄存器一样用所有指令和所有寻址方式访问,但对程序存储器的访问必须以字为单位,否则会清除高位字节。PC的宽度决定了可以直接寻址的范围。16bits -> 64KB, 20bits -> 1MB。 汇编Code示例: MOV #LABLE, PC ;跳转到地址LABLE开始执行 MOV LABLE, PC ;程序开始执行的地址为LABLE所在内存中的数 MOV @R14, PC ; 程序开始执行的地址为寄存器R14中的数
R1寄存器:SP 堆栈指针
堆栈指针的所用主要是保护当前程序执行的地址,当正在执行一段程序,突然进来了一个中断,因此需要把当前执行程序的地址保护起来,将中断服务程序的矢量地址写入PC寄存器,开始执行中断服务程序,当中断服务程序执行完后,再将堆栈中的数据赋给PC寄存器,返回到原本程序位置接着执行。同时堆栈再函数调用期间也可以保存寄存器变量,局部变量参数等。 堆栈指针SP总是指向堆栈的顶部,系统在将数据压入堆栈时,总是先将堆栈指针SP的值减2,然后再将数据送到SP所指的RAM单元中。将数据从堆栈中弹出正好与压入过程相反;先将数据从SP所指示的内存单元取出,再将SP值加2。 汇编Code示例: MOV 2(SP), R6 ;将内存单元I2中的数据放到R6中。 MOV R7, 0(SP) ;将R7中的数据放到堆栈顶所在的单元(I3)中。 PUSH #0123h ;将SP的值减2,再将#0123h放到SP所指向的单元中。 POP R8 ;将SP所指单元中的数(#0123h)放到R8中,再将SP的值加2。 实现功能的图如下:
R2寄存器:SR 状态寄存器
状态寄存器指示CPU目前工作遇到的一些零标志,负标志等,同时可以控制CPU的中断功能,具体功能见下表:
R3寄存器:常数发生器 常熟发生器用于产生一些常用的常数,而不必占用一个16 bits的字。所用常数的数值由寻址位As来定义,硬件完全自动地产生数字:-1,0,1,2,4,8 具体如下:
R4~R15寄存器:通用寄存器,可用于自由的读写操作。 汇编Code示例: MOV #1234H, R15 ;执行后R15内容为1234H MOV.B #23H, R15 ;执行后R15内容为0023H ADD.B #34H, R15 ;执行后R15内容为0057H
|