作者 : 利尔达 MSP430 系列单片机的指令系统 1 CPU 内核组成 : 16 位的 (ALU) 算术运算单元 16 个寄存器 (PC SP SR R4~R15) 指令控制单元 2 存储器组织结构 3 外围模块寄存器地址 它们被分配在相应的字模块或字节模块当中 分配在 00-FFH 中为字节, 分配在 100-1FFH 中为字 4 寻址模式 : 5 指令格式 : 1) 书写格式标号指令助记符源操作数, 目的操作数 ; 注释 2) 共有 51 条指令, 其中有 24 条是模拟仿真指令 27 条硬件指令 6 指令集说明 1) 数据传送指令 2) 数据运算指令 3) 逻辑位操作指令 4) 跳转与程序流程控制类指令 5) 多个指令仿真的宏指令 6) 堆栈指针寻址
4 个特殊功能寄存器,12 个通用寄存器 特殊功能可操作的只有 SR 和 SP CPU 状态寄存器 SR
C 进位标志 Z 零标志 N 负标志 GIE 中断标志它可以用指令改变 CPUOff CPU 控制位 OscOff SCG0 SCG1 晶振控制位 控制系统时钟 控制系统时钟 后 4 位是控制 CPU 的工作模式, 工作模式在第三讲中介绍
#define C #define Z #define N #define V #define GIE #define CPUOFF #define OSCOFF #define SCG0 #define SCG1 (0x0001) (0x0002) (0x0004) (0x0100) (0x0008) (0x0010) (0x0020) (0x0040) (0x0080) /* Low Power Modes coded with Bits 4-7 in SR */ #ifndef IAR_SYSTEMS_ICC /* Begin #defines for assembler */ #define LPM0 (CPUOFF) #define LPM1 (SCG0+CPUOFF) #define LPM2 (SCG1+CPUOFF) #define LPM3 (SCG1+SCG0+CPUOFF) #define LPM4 (SCG1+SCG0+OSCOFF+CPUOFF) /* End #defines for assembler */
堆栈指针 SP: 它是在系统调用子程序或进入中断服务程序时, 保护程序计数器 PC 堆栈指针 SP 总是指向堆栈的顶部 系统在压栈时, 总是先将 SP 减 2 然后在将要压栈的内容写入该单元中 (RAM) 系统弹栈时正好相反 在对堆栈操作上有两中模式 : 隐式和显示模式 一是系统对它操作 ; 一是用户程序对它操作 堆栈指针的起始地址是有高向低进行, 不同的芯片其地址是不同的 通用工作寄存器 : 它是应用在大部分场合 它可以实现算术逻辑运算, 也可实现临时的暂存单元, 可实现字操作和字节操作 数据存储器 : 这是一个使用频率非常高的操作环境区域, 不同的芯片他的可使用大小不同 一般称这个区域叫做 RAM 区 程序存储器 : 它是存放用户程序代码的区域, 它分有三个区域, 中断向量区 用户程序代码区 引导程序代码区 在使用功能模块时的服务程序入口地址是已经安排好的, 只要用户根据需要使用了它, 就将使用的中断入口地址放在这里 而引导程序是芯片出厂后由厂家确定的, 它由 JATG 去访问, 客户不能调用 而程序区可连续存放用户程序或不连续存放用户程序, 也存放用户数据
寻址方式 : 所谓寻址就是在操作的过程中是如何使用不同的方式来确定操作数的地址, 它包扩源操作数和目的操作数 MSP430 的源操作数的访问可有 7 种方式 1 操作数存放在通用寄存器中 称寄存器寻址 2 通用寄存器中存放的源操作数的相对地址 又称变址 3 符号模式寻址, 它的地址是通过编译后系统安排, 这种指令在使用上也可以对固定的符号 ( 如外部模块定义的符号也可使用 ) 该标号的地址是紧跟在上一个语句之后 一般用于指令跳转, 也可用于数据操作 4 绝对地址它不同于上面的标号, 它使用绝对地址符号 ASEG 地址或固定的外围模块地址 5 间接寻址 : 它与寄存器寻址很相似, 不同的是寄存器存放的不是操作数而存放操作数的地址 使用时用 表示是间接寻址 6 间接增量寻址 : 与上述基本一致, 但对目的操作数不能用 7 立即寻址 : 又叫立即数寻址 但对目的操作数不能用
中断向量地址
指令传送方向
数据传送指令 : MOV 数据传送 CLR 清除目的 POP 从目的弹出到目的中 PUSH 将字压入堆栈 SWPB 字节交换 例 :MOV #1234,R5 MOV #EDE, R10 ; 注 : 要事先对 EDE 定义才能用 CLR R6 CLR.B &EDE ; 对字节操作 MOV #8912H, R10 MOV #8912H, 210H SWPB R7 PUSH R9 POP R13
数据运算指令 : 加法指令 ADC 进位位加目的 ADD 源加目的 ADDC 带进位位源加目的 DADC DADD 十进制 INC INCD 减法指令 :SUB SUBC DEC DECD SBC CMP TST 注意 : 减法没有十进制运算指令 例 : ADD @R13, 0(R12) ADC 2(R12) 注意 : 当运算后都会引起 SR 中的某些标志位变化, 你可以用判断这些标志位来控制 程序的去向.
逻辑运算与位操作类指令 逻辑运算 :AND 源与目的与 BIC 对位清零 BIS 对位置位 BIT 测试位 XOR 源与目的异或 RLA 算术左移 RRA 算术右移 RLC 通过进位位算术左移 RRC 通过进位位算术右移 INV 目的求反 位操作 : CLRC CLRN CLRZ DINT EINT SETC SETZ SETN
跳转与程序流程的控制指令 : BR 无条件在 64K 空间的长转移指令 CALL 子程序调用 JC/JHS JZ/JEQ JGE JL JMP JLO JN JNC JNE/JNZ RET RETI NOP 注 : 以上的控制要根据不同的条件来进行 ( 如根据测试或运算指令, 比较指令等 ) 例 : BR EXEC ; 转移到 EXEC 包含的地址中 BR @R5 ; 转移到 R5 指向的地址中 CALL R5 CALL EXEC CMP #15,R5 JHS LABEL BIT JC #10H,&P0IN PROGA
源语句格式 它包括汇编伪指令 汇编指令 宏伪指令 以及注释 汇编器只能识别 200 个以下的字符 书写格式 [ 标号 ] [:]( 伪 ) 指令助记符 [ 操作数 1,] [ 操作书数 2][; 注释 ] 解释 : 标号是可选项, 最多 32 个字符, 它适用所有汇编语言和大多数汇编语言伪指令 助记符, 它紧跟标号后面, 它不能写在第一列 它包括 ( 机器 指令助记符 汇编伪指令等 ) 操作数 : 前缀符号 & # @ 常数 ( 二进制 B 八进制 Q 十六 进制 H 十进制 ) 字符常数 ( 用单引号,8 位 ASCII 码 ) 表达式常数, 符号
微控设计网提供 MSP430 单片机发开工具