类型 |
指令 |
全称 |
功能 | |
内存访问 |
LDR |
Load register |
加载字到寄存器 | |
LDRB |
加载字节到寄存器 | |||
LDRH |
加载半字到寄存器 | |||
LDRSH |
加载半字到寄存器,再带符号扩展到32位 | |||
LDRD |
从连续的地址空间加载双字(64位整数)到2个寄存器 | |||
LDM |
Load multiple registers |
从一片连续的地址空间中加载多个字到若干寄存器 | ||
STR |
Store register |
存储寄存器中的字 | ||
STRB |
存储寄存器中的低字节 | |||
STRH |
存储寄存器中的低半字 | |||
STRD |
存储2个寄存器组成的双字到连续的地址空间中 | |||
STM |
Store multiple registers |
存储若干寄存器中的字到一片连续地址空间中 | ||
PUSH |
把若干寄存器的值压入堆栈中 | |||
POP |
从堆栈中弹出若干的寄存器值 | |||
通用数据处理指令 |
加减运算 |
ADC |
ADd with Carry |
带进位加法 |
ADD |
加法 | |||
SUB |
减法 | |||
RSB |
反向减法 | |||
SBC |
带进位减法 | |||
RSC |
带进位反向减法 | |||
移位运算 |
ASR |
Arithmetic Shift Right |
算术右移,移动过程中符号位不变,即源操作数为正时,则最高位补0,否则补1 | |
LSL |
逻辑左移 | |||
LSR |
逻辑右移 | |||
ROR |
圆圈右移 | |||
RRX |
带进位的逻辑右移一格 | |||
逻辑运算 |
AND |
按位与,与C的“&”功能相同 | ||
ORR |
按位或,与C的”|“功能相同 | |||
EOR |
按位异或,与C的”^“功能相同 | |||
BIC |
Bit Clear |
按位清零,把一个数跟另一个无符号数的反码按位与 | ||
ORN |
按位或非,把源操作数按位取反后,再执行按位或 | |||
比较运算 |
CMP |
比较两个数并更新标志位 | ||
CMN |
负向比较,把一个数和另一个数的二进制补码进行比较,并更新标志位 | |||
移动操作 |
MOVW |
把16位立即数放到寄存器的底16位,高16位清零 | ||
MOV |
加载16位立即数到寄存器 | |||
MOVT |
把16位立即数放到寄存器的高16位,低16位不影响 | |||
MVN |
移动一个数的补码, 可加载这些值的按位补码。这些补码数值为 -(n+1) | |||
检查操作 |
TEQ |
测试是否相等,对两个数执行异或,更新标志但不存储结果 | ||
TST |
测试,对两个数执行按位与,更新z标志但不存储结果 | |||
位操作 |
RBIT |
位反转,把一个32位整数先用2进制表达,再旋转180度 | ||
REV |
对一个32位整数做按字节反转 | |||
REVH/REV16 |
对一个32位整数的高低半字都执行字节反转 | |||
REVSH |
对一个32位整数的低半字中的字节反转,并将符号扩展到32位 | |||
除法运算 |
SDIV |
带符号除法 | ||
UDIV |
无符号除法 | |||
乘法运算 |
MUL |
乘法 | ||
MLA |
乘加 | |||
MLS |
乘减 | |||
UMLAL |
无符号长乘加,两个无符号的32位整数相乘得到64位的无符号积,再把积加到另一个无符号64位整数中 | |||
UMULL |
无符号长乘法, | |||
SMLAL |
带符号长乘积,两个带符号的32位整数相乘得到64位的带符号积,再把积加到另一个带符号64位整数中 | |||
SMULL |
带符号长乘法,两个带符号32位整数相乘得到64位带符号积 | |||
饱和运算 |
SSAT |
带符号的饱和运算 | ||
USAT |
无符号饱和操作,源操作数时带符号的 | |||
组合分离 |
BFC |
位段清零 | ||
BFI |
位段插入 | |||
SBFX |
从一个32位整数中提取位段,并且带有符号扩展成32位整数 | |||
UBFX |
无符号位段提取 | |||
符号扩展 |
SXTB |
字节带符号扩展到32位 | ||
UXTB |
字节被无符号扩展到32位,高24位清零 | |||
UXTH |
半字节被无符号扩展到32位,高16位清零 |
汇编攻城记-Cortex-M3指令集
于 2023-09-01 18:45:59 首次发布
