计组与微机控制
5.1 ARM 指令系统和总线
5.1 ARM 指令系统和总线
符号扩展指令和字节调序指令



位域处理指令
位域处理用于操作寄存器中的一段连续二进制位。
常见指令:
| 指令 | 含义 |
| `BFC` | 清除一段位域 |
| `BFI` | 把一个寄存器的低位插入到目标位域 |
| `UBFX` | 无符号提取位域 |
| `SBFX` | 有符号提取位域 |

STM32 寄存器配置经常要处理“某几位为一个字段”,位域思想非常重要。
例如 GPIO 模式寄存器中,每个引脚占 2 位:
MODER[2n+1 : 2n]
配置某个引脚时,本质就是清除这 2 位,再写入目标模式值。

高16位1234不管,低位FFFF变成C00F,8位对应低八位也就是C开头,16位长度对应B结束,也就是CC换成56,BB换成78,小端排序,默认从R0的第0位开始移动16位替换过去
比较和测试指令
| 指令 | 含义 |
| `CMP Rn, Operand2` | 计算 `Rn - Operand2`,只更新标志位 |
| `CMN Rn, Operand2` | 计算 `Rn + Operand2`,只更新标志位 |
| `TST Rn, Operand2` | 按位与测试 |
| `TEQ Rn, Operand2` | 按位异或测试 |
比较指令不保存结果,只改变条件标志位。
常见用法:
CMP R0, #0BEQ label含义:如果 R0 等于 0,就跳转。

分支和流控制指令
| 指令 | 含义 |
| `B label` | 无条件跳转 |
| `BL func` | 带链接跳转,用于函数调用 |
| `BX Rm` | 跳转到寄存器指定地址,并可切换状态 |
| `BLX Rm/label` | 带链接跳转,可切换状态 |
条件跳转:
| 后缀 | 条件 |
| `EQ` | 等于 |
| `NE` | 不等于 |
| `CS/HS` | 无符号大于等于 |
| `CC/LO` | 无符号小于 |
| `MI` | 负数 |
| `PL` | 正数或零 |
| `VS` | 溢出 |
| `VC` | 未溢出 |
| `HI` | 无符号大于 |
| `LS` | 无符号小于等于 |
| `GE` | 有符号大于等于 |
| `LT` | 有符号小于 |
| `GT` | 有符号大于 |
| `LE` | 有符号小于等于 |
总线的基本概念
总线是一组公共信号线,用于连接 CPU、存储器、I/O 接口和其他模块。

按功能分:
| 总线 | 作用 |
| 地址总线 | 指明访问对象地址 |
| 数据总线 | 传送数据 |
| 控制总线 | 传送读写、时钟、中断、DMA 等控制信号 |
总线的优点:
- 连接结构简单;
- 便于扩展;
- 多个模块可共享通信通道。
缺点:
- 同一时刻通常只能有一个主设备使用总线;
- 需要仲裁;
- 总线带宽会成为系统瓶颈。
