作者kikiqqp (喵食罐頭)
看板ASM
標題[請益] STM8 8bit加法是否一定要透過 A累加器
時間Sat Mar 24 11:10:16 2018
請問 STM8系列加法是否一定要透過 A累加器
舉例來說,在C語言下編譯器會將
i++;
編譯成
LD A, i
INC A
LD i, A
這樣就消耗3個指令周期
如果在不在意 C Z等位旗標下,單純做八位元 0~255累加循環
是否可以直接改寫成
asm("INC i");
會有何缺點和問題呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.158.70.171
※ 文章網址: https://webptt.com/m.aspx?n=bbs/ASM/M.1521861020.A.2C3.html
1F:→ cs8425: A是暫存器 i是記憶體位址吧 03/24 15:46
2F:→ cs8425: 不是所有指令都能讀記憶體+運算+寫回去一次做完 03/24 15:46
3F:→ kikiqqp: 您好 我知道不是所有指令都可以寫入位址,但INC指令是可 03/27 12:31
4F:→ kikiqqp: 以的 03/27 12:31
5F:→ cs8425: 那麼後面的程式有動用到i這個值嗎? 完全沒有 >> 那就改唄 03/28 02:01
6F:→ cs8425: 有 >> 有的指令還是要先把值load到暫存器才能操作 03/28 02:02
7F:→ cs8425: 總結: 還是要看其他部份的程式 過於片段的程式討論最佳化 03/28 02:05
8F:→ cs8425: 是沒有意義的 03/28 02:05
9F:→ kikiqqp: 因為在單晶片上面累加是常常使用的,而大多數都只是當作 03/28 09:24
10F:→ kikiqqp: 計時用,以前ASM寫的很習慣,轉成C後也習慣看一下,才發 03/28 09:24
11F:→ kikiqqp: 現編譯器是這樣處理,等於多耗兩個指令時間 03/28 09:25
12F:推 johnpage: 如果知道A的用途就不會問 03/28 10:38
13F:推 chuegou: 我看規格書 就算是INC i,VZC也會動耶? 03/29 00:19
14F:→ chuegou: 是PM0044 STM8 CPU programming manual對嗎? 03/29 00:21
15F:→ chuegou: 然後 i如果是區域變數 你要INC之前要先取址吧 03/29 00:24
16F:→ kikiqqp: 當然,區域變數的話因為變動的關係所以一定會透過暫存器 03/29 14:40
17F:→ kikiqqp: 這點在asm中是另外一個處理方式了 03/29 14:41