- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE 2
附录1 常用Cortex-M汇编指令
附录1列出了常用的Cortex-M汇编指令,包括:数据操作指令、转移指令、存储器数据传送指令、异常及其他指令等,上述每一类指令都按照16位指令和32位指令分别讲解。
1. 数据操作指令
表1.1 16位数据操作指令
指令名称
指令格式
指令功能
ADC(带进位加法)
ADC <Rd>, <Rm>
Rd+= Rm+C
ADD(加法)
ADD <Rd>, <Rn>, #<imm3>
Rd=Rn+imm3
ADD <Rd>, #<imm8>
Rd+=imm8
ADD <Rd>, <Rn>, <Rm>
Rd=Rn+Rm
ADD <Rd>, <Rm>
Rd+=Rm
ADD <Rd>, PC, #<imm8>*4
Rd=PC+imm8*4
ADD <Rd>, SP, #<imm8>*4
Rd=SP+imm8*4
ADD <Rd>, SP, #<imm7>*4
Rd=SP+imm7*4
ADD SP, SP,#<imm7>*4
SP+=imm7*4
AND(按位与)
AND <Rd>, <Rm>
Rd &= Rm
ASR(算术右移)
ASR <Rd>, <Rm>, #<imm5>
Rd = Rm算术右移imm5
ASR <Rd>, <Rs>
Rd= Rd算术右移寄存器Rs数个位数
BIC(按位清零)
BIC <Rd>, <Rs>
Rd &= ~Rs
CMN(负向比较)
CMN <Rn>, <Rm>
将Rm取二进制补码后再与Rn比较
CMP(比较)
CMP <Rn>, #<imm8>
Rn 与8位立即数比较,并根据结果更新标志位的值
CMP <Rn>, <Rm>
Rn与Rm比较,并根据结果更新标志位的值
EOR(异或)
EOR <Rd>, <Rm>
Rd^=Rm
LSL(逻辑左移)
LSL <Rd>, <Rm>, #<imm5>
Rd= Rm<<imm5
LSL <Rd>, <Rs>
Rd<<= Rs
LSR(逻辑右移)
LSR <Rd>, <Rm>, #<imm5>
LSR <Rd>, <Rs>
Rd= Rm>>imm5
Rd>>= Rs
MOV(传送)
MOV <Rd>, #<imm8>
Rd=(U32) imm8
MOV <Rd>, <Rm>
Rd= Rm
MUL(乘法)
MUL <Rd>, <Rm>
Rd*=Rm
MVN(取按位取反值)
MVN <Rd>, <Rm>
Rd= ~Rm
NEG(取补码值)
NEG <Rd>, <Rm>
Rd= ~Rm + 1
ORR(按位或)
ORR <Rd>, <Rm>
Rd|= Rm
SBC(带借位减法)
SBC <Rd>, <Rm>
Rd-= Rm+C
SUB(减法)
SUB <Rd>, #<imm8>
Rd-=imm8
SUB <Rd>, <Rn>, <Rm>
Rd= Rn-Rm
SUB SP, #<imm7> * 4
SP-= imm7*4
TST(测试)
TST <Rn>, <Rm>
执行Rn & Rm,并根据结果更新标志位
REV(反转)
REVH/REV16(反转)
REV <Rd>, <Rn>
Rd=Rn字内的字节顺序反转
REV16 <Rd>, <Rn>
Rd=Rn两个半字内的字节顺序反转
SXTB(字节提取扩展符号位)
SXTB <Rd>, <Rm>
从寄存器Rm中提取字节[7:0],传送到寄存器Rd中,并用符号位扩展到32位
SXTH(半字提取扩展符号位)
SXTH <Rd>, <Rm>
从寄存器Rm中提取半字[15:0],传送到寄存器Rd中,并用符号位扩展到32位
UXTB(字节提取扩展零位)
UXTB <Rd>, <Rm>
从寄存器Rm中提取字节[7:0],传送到寄存器Rd中,并用零位扩展到32位
UXTH(半字提取扩展零位)
UXTH <Rd>, <Rm>
从寄存器Rm中提取半字[15:0],传送到寄存器Rd中,并用零位扩展到32位
表1.2 32位数据操作指令
指令名称
指令格式
指令功能
ADC(带进位加法)
ADC{S}.W <Rd>, <Rn>, #<imm12>
Rd=Rn+imm12+C。有S就按结果更新标志位,下同
ADC{S}.W <Rd>, <Rn>, <Rm>{, <shift>}
Rd= Rn+移位后的Rm+C位
ADD(加法)
ADD{S}.W <Rd>, <Rn>,#<imm12>
Rd= Rn+imm12
ADD{S}.W <Rd>, <Rm>{, <shift>}
Rd=Rd+移位后的Rm
ADDW(宽加法)
ADDW.W <Rd>, <Rn>, #<imm12>
Rd= Rn+imm12
AND(按位与)
AND{S}.W <Rd>, <Rn>, #<imm12>
Rd= Rn &
文档评论(0)