|
|
@@ -446,22 +446,21 @@ _start:
|
|
|
mov r1, #6
|
|
|
mul r2, r0, r1 @ R2 = 7 * 6 = 42
|
|
|
|
|
|
- @ 无符号除法
|
|
|
- mov r0, #100
|
|
|
- mov r1, #7
|
|
|
- udiv r2, r0, r1 @ R2 = 100 / 7 = 14(商)
|
|
|
+ @ 注意:Cortex-A9 不支持 udiv/sdiv 硬件除法指令
|
|
|
+ @ 除法需要用左移减法循环实现,或使用编译器辅助函数
|
|
|
+ @ Cortex-A7 及以上才支持 udiv/sdiv
|
|
|
|
|
|
- @ 有符号除法
|
|
|
- mov r0, #-100
|
|
|
- mov r1, #7
|
|
|
- sdiv r2, r0, r1 @ R2 = -100 / 7 = -14
|
|
|
+ @ 位移实现快速乘除(实际开发中常用)
|
|
|
+ mov r0, #5
|
|
|
+ lsl r0, r0, #2 @ R0 = 5 * 4 = 20(左移 2 位 = 乘 4)
|
|
|
+ lsr r0, r0, #1 @ R0 = 20 / 2 = 10(右移 1 位 = 除 2)
|
|
|
|
|
|
@ 死循环
|
|
|
hang:
|
|
|
b hang
|
|
|
```
|
|
|
|
|
|
-**观察要点**:执行 `subs` 后,CPSR 的 C 位(进位/借位)会变化。
|
|
|
+**观察要点**:执行 `subs` 后,CPSR 的 C 位(进位/借位)会变化。Cortex-A9 不支持硬件除法,实际项目中除法通过编译器辅助函数或循环实现。
|
|
|
|
|
|
---
|
|
|
|