MSP430汇编指令集(中文)+详解带实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
条件转移和无条件转移指令 由 2 个域组成 共有 16 位代码
l 操作码域
6bit
l 转移偏转域
10bit B/W
(B/W=1 以字节形式执行 B/W=0 以字形式执行
15
13 12
10
001xx x
9 x
x
x
x
x
坛x x x
0 xx
操作码
转移码
符号
偏移
条件转移使指令可转移到相对于当前地址范围在 –512 ~ +512 字之间的地址
算术右移
. dst
带进位位右移
第 w dst
从目的操作数减去借位
w 置进位位
w 置负位
SETZ
置零位
SUB[.W];SUB.B
src, dst
dst + .not. src + 1 -> dst
SUBC[.W];SUBC.B SWAP SXT TST[.W];TST.B
src, dst dst dst dst
方式位 OscOff CPUOff 和 GIE 不受影响
例子
R13 指向的 8 位数值加到 R12 指向的 16 位数值
ADD.B @R13, 0(R12)
;加 LSDs
ADC.B 1(R12)
;将进位加至 MSD
ADD[.W] 源 操 作 数 加 至 目 的 操 作 数
语法
ADD
src, dst 或 ADD.W
INV[.W];INV.B
dst
目的操作数求反
JC/JHS
标号
进位位被置时转移到标号语句
JEQ/JZ
标号
零位被置时转移到标号语句
JGE JL JMP JN JNC/JLO JNE/JNZ MOV[.W];MOV.B NOP POP[.W];POP.B PUSH[.W];PUSH.B RETI
RET
RLA[.W];RLA.B RLC[.W];RLC.B RRA[.W];RRA.B RRC[.W];RRC.B SBC[.W];SBC.B SETC SETN
第 w Z 结果为零时置位 其它情况时复位
C dst 从 0FFFFH 增至 0000 时置位 其它情况复位
ww V 发生算术溢出时置位 其它情况时复位
方式位 OscOff CPUOff 和 GIE 不受影响
例子
R13 指向的 16 位数值加到 R12 指向的 32 位数值
ADD @R13, 0(R12)
MOV #0AAH, TON1
11
Rn 用作指向操作数的指针,其后 Rn 被增量
11
跟随在指令后的字包含立即数 x 使用间
接自动增量模式 @PC+
操 R10 à R11 M(2+R5) à M(6+R6)
M(EDE) à M(TON1) M(MEM) à M(TCDAT) M(R10) à M(Tab+R6)
0 ** * ------------0 -0---0-
CMP[.W];CMP.B
dst
dst - src
* ** *
DADC[.W];DADC.B dst
dst + C -> dst (十进制)
DADD[.W];DADD.B src, dst
src + dst + C -> dst (十进制)
DEC[.W];DEC.B
----
BIS[.W]; BIS.B
src, dst
src .or. dst -> dst
----
BIT[.W]; BIT.B BR CALL CLR[.W];CLR.B CLRC CLRN CLRZ
src, dst dst dst dst
src .and. dst 转移到 PC + 2 ->堆栈, dst -> PC 清除目的操作数 清除进位位 清除负位 清除零位
寻址方式
寻址方式
源 操 目标操
语
法
说
明
作数 作数
As Ad
寄存器寻址
Yes Yes
MOV Rs, Rd
00 0 寄存器内容是操作数
索引寻址
Yes Yes
MOV x(Rn), y(Rm)
01 1 (Rn+x)指向操作数 x 储存在下一个字中
符号寻址
Yes Yes
MOV EDE, TON1
01 1
(PC+x)指向操作数 x 储存在下一个字中
机 om 寻址方式 c 寄存器寻址 片 索引寻址 . 符号寻址 u 绝对寻址 单 c 间接寻址
间接自动增量
九 m 立即数寻址
例
子
MOV R10, R11
MOV 2(R5), 6(R6)
MOV EDE, TON1
MOV &MEM, &TCDAT
MOV @R10, Tab(R6)
MOV @R10+, R11
Z 结果为零时置位 其它情况时复位
方式位 例子
C 结果的 MSB 产生进位时置位 否则复位 V 发生算术溢出时置位 其它情况时复位 OscOff CPUOff 和 GIE 不受影响 R13 指向的 32 位数值加至 R13 中的指针之上 11 个字(20/2 +2/2)的 32 位计数器 ADD @R13+, 20(R13) ;无进位加 LSDs ADDC @R13+, 20(R13) ;带进位加 MSDs
l 字节操作识别符 1bit
l 目的域
5bit
源寄存器 + As (4 位寄存器数 0~15 + 2 个寻址位)
B/W
B/W=1 以字节形式执行 B/W=0 以字形式执行
目的寄存器 + Ad (4 位寄存器数 0~15 + 1 个寻址位)
15
12 11
8 7 6 5 43
0
操作码
源寄存器
Ad B/W As 目的寄存器
片 c C 结果产生进位时置位 否则复位
. V 发生算术溢出时置位 其它情况时复位
u 方式位 OscOff CPUOff 和 GIE 不受影响
单 c 例子
R5 加上 10 由一个进位使程序 转移 到 TONI
m ADD #10, R5
;将近 10 加至 R5 的低位字节
九 9 JC
TONI
;若(R5)>=246[0AH + 0F6H] 则产生进位
M(R10) à R11, R10+2 #0AAH à M(TON1)
作 àR10
第 w.9 指令概述 共 51 条指令 ww 操 作 码
操作
状态位 V NZC
ADC[.W]; ADC.B
dst
dst + C -> dst
* ** *
ADD[.W]; ADD.B
src, dst
src + dst -> dst
......
;
ADDC.B 源 操 作 数 加 至 目 的 操 作 数
语法
ADDC.B src, dst
操作
src + dst + C -> dst
说明
源操作数和进位 C 加至目的操作数 源操作数不受影响 目的操作数以前的内容丢失
状态位 N 结果为负时置位 为正时复位
方式位 例子
Z 结果为零时置位 其它情况时复位 C 结果的 MSB 产生进位时置位 否则复位 V 发生算术溢出时置位 其它情况时复位 OscOff CPUOff 和 GIE 不受影响 R13 指向的 24 位数值加至 R13 中的指针之上 11 个字的 24 位计数器 ADD.B @R13+, 10(R13) ;无进位加 LSDs ADDC.B @R13+, 10(R13) ;带进位加中间位
src
SP – 2 -> SP , src -> @SP
机 m 从中断返回
o TOS -> SR SP + 2 -> SP
片 c TOS -> PC SP + 2 -> SZP . 从子程序返回
u TOS -> SR SP + 2 -> SP
单 c dst
算术左移
m dst
带进位位左移
九 9 dst
* ** *
ADDC[.W]; ADDC.B src, dst
src + dst + C -> dst
* ** *
AND[.W]; AND.B
src, dst
src .and. dst -> dst
0 ** *
BIC[.W]; BIC.B
src, dst
.not.src .and. dst -> dst
dst
dst - 1 -> dst
DECD[.W];DECD.B dst
DINT
EINT
INC[.W];INC.B
dst
INCD[.W];INCD.B
dst
dst - 2 -> dst 禁止中断 使能中断 dst + 1 -> dst 目的操作数增 1 dst + 2 -> dst 目的操作数增 2
dst + .not. src + C -> dst 交换字节 dst 位 7 -> 位 8......位 15 测试目的操作数
XOR[.W];XOR.B
src, dst
src .xor. dst -> dst
注 状态位中 * 表示影响 - 表示不影响 0 表示清零 1 表示置位
* ** * * ** * * ** * * ** * ------* ** * * ** * * ** * -------------------------------
;加 LSDs
ADC 2(R12)
;将进位加至 MSD
ADC.B 语法 操作 仿真 说明 状态位
将进位加至目的操作数 ADC.B dst dst + C -> dst
ADDC.B #0.dst 进位 C 加至目的操作数 操作数以前的内容丢失 N 结果为负时置位 为正时复位 Z 结果为零时置位 其它情况时复位 C dst 从 0FFFFH 增至 0000 时置位 其它情况复位 V 发生算术溢出时置位 其它情况时复位
src, dst
操作
src + dst -> dst
说明
源操作数加至目的操作数 源操作数不受影响 目的操作数以前的内容丢失
状态位 N 结果为负时置位 为正时复位
Z 结果为零时置位 其它情况时复位
C 结果产生进位时置位 否则复位
方式位 例子
V 发生算术溢出时置位 其它情况时复位 OscOff CPUOff 和 GIE 不受影响 R5 加上 10 由一个进位使程序 转移 到 TONI
MSP430 系列汇编指令集
简介
MSP430 的内核 CPU 结构是按照精简指令集和高透明指令的宗旨来设计的 使用的指令有硬件执行的 内核指令和基于现有硬件结构的高效率的仿真指令 仿真指令使用内核指令及芯片额外配置的常数发生器 CG1 CG2
MSP430 指令的寻址方式包括立即寻址 索引寻址 符号寻址和绝对寻址 这四种方式均可用于源操 作数 而索引 符号和绝对寻址方式只可用于目的操作数 源操作数的指令集需占用代码存储器中的 1~3 个字
机论 om 指令集说明( 51 条指令以字母为序)
片 .c ADC[.W] 将进位加至目的操作数
u 语法
ADC
dst 或 ADC.W
dst
单 c 操作
dst + C -> dst
m 仿真
ADDC #0.dst
Fra Baidu bibliotek
九 9 说明
进位 C 加至目的操作数 操作数以前的内容丢失
. 状态位 N 结果为负时置位 为正时复位
. ......
;无进位
第 w ADDC[.W] 源操作数加至目的操作数
w 语法
ADDC
src, dst 或 ADDC.W
src, dst
w 操作
src + dst + C -> dst
说明
源操作数和进位 C 加至目的操作数 源操作数不受影响 目的操作数以前的内容丢失
状态位 N 结果为负时置位 为正时复位
绝对寻址 间接寻址
Yes Yes Yes
MOV &MEM, &TCDAT 01
MOV @Rn, y(Rm)
10
1
坛跟随在指令后的字包含绝对地址 Rn 用作指向操作数的指针
间接自动增量 Yes
立即数寻址
Yes
MOV @Rn+, Rm MOV #x, TON1
论 Rn n=0~15 Rs 源寄存器 Rd 目标寄存器
标号
N .xor. V = 0 时转移到标号语句
标号
N .xor. V = 0 时转移到标号语句
标号
无条件转移到标号语句
标号
负位被置时转移到标号语句
标号
进位位复位时转移到标号语句
标号 src, dst
坛 零位复位时转移到标号语句
src -> dst
空操作
论 dst
项目从堆栈弹出, SP + 2 -> SP
单操作数指令
由 2 个域组成 共有 16 位代码
l 操作码域
9bit 操作码
l 字节操作识别符 1bit B/W
(B/W=1 以字节形式执行 B/W=0 以字形式执行
l 目的域
6bit 目的寄存器 + Ad (4 位寄存器数 0~15 + 1 个寻址位)
15
12
7 6 5 43
0
0 0 0 1 x x x x x x B/W Ad 目的寄存器
ADD #10, R5
;
JC
TONI
;产生进位
ADD.B
...... 源操作数加至目的操作数
;无进位
坛
语法
ADD.B src, dst
论 操作
src + dst -> dst
说明
源操作数加至目的操作数 源操作数不受影响 目的操作数以前的内容丢失
机 m 状态位 N 结果为负时置位 为正时复位
o Z 结果为零时置位 其它情况时复位
-------
----
---* ** * * ** * 0 ** * * ** * * ** * ---1 -1--
--1* ** * * ** * ---0 ** * 0 ** 1 * ** *
指令格式
双操作数指令 l 操作码域
由 4 个域组成 共有 16 位代码 4bit 操作码
l 源域
6bit