2 Commits e6219d1882 ... f3c3ee07cf

Autor SHA1 Mensaje Fecha
  OpenCode f3c3ee07cf ingest: ARM汇编基础 + 全库prettier格式化 hace 2 semanas
  OpenCode e6219d1882 ingest: ARM汇编基础 + 全库prettier格式化 hace 2 semanas

+ 8 - 9
X-Knowledge-Base/raw/Joplin/Linux+C+C++技术体系梳理/3. 编译调试与驱动预留/9. ARM汇编基础.md

@@ -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 不支持硬件除法,实际项目中除法通过编译器辅助函数或循环实现。
 
 ---