1. 加減法,邏輯操作佔乙個週期,目的位址是pc暫存器時增加乙個週期。分支指令佔3個週期。在cache命中的情況下,16位和8位的裝載指令(ldrh、ldrh等)佔乙個週期,但緊跟的2個週期不能使用裝入的資料。32位裝載指令佔乙個週期,緊跟的乙個週期不能使用裝載資料。如果裝載入pc,同樣要增加2個週期。
ldr r1,[r2] add r1,r1,r3 add r4,r4,r5 佔4個週期
改變次序後
ldr r1,[r2] add r4,r4,r5 add r1,r1,r3 佔3個週期
2. load指令佔時間比較長,在迴圈中可以使用預載的方法將load與跳轉指令放在一起,減少流水線的斷流。
例如:loop
ldrb r2,[r1]
............... //do
b loop
更改為ldrb r2,[r1]
loop
.............. //do
ldrb r2,[r1]
b loop
3. 迴圈展開時,可以在計算i步時就載入i+1步的資料,在i步的結果還沒準備好時執行i+1步計算。
4. arm只有16個可見暫存器,其中14個通用暫存器,1個堆疊指標r13,1個程式計數器r15。在影象處理的應用中很多是8位的運算元,可以利用32為暫存器一次進行兩組運算。
例如:加操作 100 + 50 和 2 + 3
位 24 16 8 0
運算元1 0 100 0 2
運算元2 0 50 0 3
結果 0 150 0 5
5. 暫存器數量不夠時,可用32為暫存器儲存兩個16位變數和4個8位變數。
ARM彙編優化
要做程式的優化,最徹底的方法當然是彙編!還有除了彙編以外 除了二進位制 能讓你對你的處理器有更全面的控制嗎?對於arm彙編,作為乙個初學者,也就只好先補補基礎了 首先,程式段的定義從area 開始,它命名乙個 區域,注意,用非阿拉伯數字作為名字時,應該用 把名字包起來,code關鍵字宣告程式 猜測 ...
ARM上的彙編優化小方法
1.加減法,邏輯操作佔乙個週期,目的位址是pc暫存器時增加乙個週期。分支指令佔3個週期。在cache命中的情況下,16位和8位的裝載指令 ldrh ldrh等 佔乙個週期,但緊跟的2個週期不能使用裝入的資料。32位裝載指令佔乙個週期,緊跟的乙個週期不能使用裝載資料。如果裝載入pc,同樣要增加2個週期...
ARM彙編和內嵌彙編
彙編指令 跳轉指令 b bl blxbx 資料處理指令 mov mvnadd adcsub rsbrsc andor eorbic cmncmp tstteq 狀態暫存器指令 mrs msrldr strldm stmmcr arm和協處理器之間資料交換 mrccond 可選的條件 rd 存放返回狀...