MSP430有27条核心指令,24条伪指令(指令个数和具体型号有关系,当前指MSP430F5501)。
具体指令个数以及指令文档要看MSP430 User's Guide,
当前MSP430F5501的User's Guide文档slau208q.pdf,可以在ti.com.cn上搜索,或者到bing.com直接搜索文件名
slau208q.pdf --> MSP430x5xx and MSP430x6xx Family User's Guide
MSP430F5,F6系列和其它430不一样,他的CPU核心叫CPUX
在这个User's Guide文档中,详细介绍指令
分为3种类型,双操作数,单操作数,跳转指令
1.双操作数指令
格式
操作码:bit15-12 | 源寄存器:bit11-8 | Ad:bit7 | B/W:bit6 | As:bit5-4 | 目的寄存器:bit3-0 |
---|---|---|---|---|---|
Opcode | s-reg | Ad | B/W | As | d-reg |
对应指令
指令名称 | 操作码4位 | 简单说明 |
---|---|---|
MOV | 4'b0100 | |
ADD | 4'b0101 | |
ADDC | 4'b0110 | dst += src + C |
SUBC | 4'b0111 | dst -= src + C |
SUB | 4'b1000 | dst -= src |
CMP | 4'b1001 | dst-src |
DADD | 4'b1010 | dst += src |
BIT | 4'b1011 | dst & src |
BIC | 4'b1100 | dst &= ~src |
BIS | 4'b1101 | dst |= src |
XOR | 4'b1110 | dst ^= src |
AND | 4'b1111 | dst &= src |
src :为指令中 s-reg
dst:为指令中的d-reg
B/W:字节操作或者字操作 。 1:bytes 0:word
As/Ad:表示寻址模式
寻址模式有7中
As/Ad 寻址模式 语法 说明
00/0 寄存器模式 Rn 寄存器内容就是操作数
01/1 变址寻址 X(Rn) Rn+X指向操作数地址,X存储在下一个字中
01/1 标号寻址 ADDR 变址寻址特例,PC(R0)+X,X存储在下一个字中
01/1 绝对寻址 &ADDR 变址寻址特例,SR(R2)+X,X存储在下一个字中,绝对地址存储在中
10/- 寄存器间接寻址 @Rn Rn存储操作数地址
11/- 寄存器间接增量寻址 @Rn+ Rn存储操作数地址,寻址完后,.B地址自加1,.W地址自加2
11/- 立即数模式 #N 寄存器间接增量寻址特例,立即数存储在指令的下一条,@PC(R0)+
2.单操作数指令
操作数:bit15-7 | B/W:bit6 | Ad:bit5-4 | D/S-reg:bit3-0 |
---|---|---|---|
opcode |
对应指令
指令名称 | 操作码 | |
---|---|---|
RRC | 9'b000100_000 | |
SWPB | 9'b000100_001 | |
RRA | 9'b000100_010 | |
SXT | 9'b000100_011 | |
PUSH | 9'b000100_100 | |
CALL | 9'b000100_101 | |
RETI | 9'b000100_110 |
3.跳转指令
操作码:bit15-13 | 条件:bit12-10 | PC偏移:bit9-0 |
---|---|---|
opcode |
对应指令:
指令名称 | opcode | 条件 | |
---|---|---|---|
JNE/JNZ | 3'b001 | 3'b000 | 不相等/不等于零跳转 |
JEQ/JZ | 3'b001 | 3'b001 | 相等/等于零跳转 |
JNC/JLO | 3'b001 | 3'b010 | |
JC/JHS | 3'b001 | 3'b011 | |
JN | 3'b001 | 3'b100 | |
JGE | 3'b001 | 3'b101 | 大于等于跳转 |
JL | 3'b001 | 3'b110 | 小于跳转 |
JMP | 3'b001 | 3'b111 | 无条件跳转 |
4.伪指令
伪指令 | 核心指令 | ||
---|---|---|---|
ADC.x dst | ADDC.x #0, dst | dst += C | |
BR dst | MOV dst,PC | F5新加 | |
CLR dst | MOV #0,dst | F5新加 | |
CLRC | BIC #1,SR | 清除进位标志 | |
CLRN | BIC #4,SR | 清除负标志 | |
CLRZ | BIC #2,SR | 清除零标志 | |
DADC.x dst | DADD.x #0,dst | ||
DEC.x dst | SUB.x #1, dst | ||
DECD.x dst | SUB.x #2, dst | ||
DINT | BIC #8, SR | 禁止中断 | |
EINT | BIS #8, SR | 使能中断 | |
INC.x dst | ADD.x #1,dst | ||
INCD.x dst | ADD.x #2,dst | ||
INV.x dst | XOR.x #-1,dst | ||
NOP | MOV #0,R3 | 空操作 | |
POP dst | MOV @SP+, dst | ||
RET | MOV @SP+,PC | ||
RLA.x dst | ADD.x dst,dst | 算术左移 | |
RLC.x dst | ADDC.x dst,dst | ||
SBC.x dst | SUBC.x #0,dst | ||
SETC | BIS #1, SR | 设置进位 | |
SETN | BIS #4,SR | 设置负标志 | |
SETZ | BIS #2,SR | 设置0标志 | |
TST.x dst | CMP.x #0,dst |
下一章节分析指令