汇编攻城记-Cortex-M3指令集

|----------|------|------------|--------------------------|--------------------------------------------------|
| 类型 | | 指令 | 全称 | 功能 |
| 内存访问 | | 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位清零 |

相关推荐
看海天一色听风起雨落5 分钟前
Python学习之装饰器
开发语言·python·学习
Want59510 分钟前
C/C++圣诞树①
c语言·开发语言·c++
老赵的博客22 分钟前
c++ 杂记
开发语言·c++
jimmy.hua24 分钟前
[C++刷怪笼]:set/map--优质且易操作的容器
开发语言·c++
w2sfot1 小时前
Passing Arguments as an Object in JavaScript
开发语言·javascript·ecmascript
郝学胜-神的一滴2 小时前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
搞一搞汽车电子2 小时前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
Skylar_.2 小时前
嵌入式 - ARM(2)汇编
汇编·arm开发
总有刁民想爱朕ha3 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘
小菜全3 小时前
uniapp新增页面及跳转配置方法
开发语言·前端·javascript·vue.js·前端框架