看板 ASM 關於我們 聯絡資訊
請問 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://www.ptt.cc/bbs/ASM/M.1521861020.A.2C3.html
cs8425: A是暫存器 i是記憶體位址吧 03/24 15:46
cs8425: 不是所有指令都能讀記憶體+運算+寫回去一次做完 03/24 15:46
kikiqqp: 您好 我知道不是所有指令都可以寫入位址,但INC指令是可 03/27 12:31
kikiqqp: 以的 03/27 12:31
cs8425: 那麼後面的程式有動用到i這個值嗎? 完全沒有 >> 那就改唄 03/28 02:01
cs8425: 有 >> 有的指令還是要先把值load到暫存器才能操作 03/28 02:02
cs8425: 總結: 還是要看其他部份的程式 過於片段的程式討論最佳化 03/28 02:05
cs8425: 是沒有意義的 03/28 02:05
kikiqqp: 因為在單晶片上面累加是常常使用的,而大多數都只是當作 03/28 09:24
kikiqqp: 計時用,以前ASM寫的很習慣,轉成C後也習慣看一下,才發 03/28 09:24
kikiqqp: 現編譯器是這樣處理,等於多耗兩個指令時間 03/28 09:25
johnpage: 如果知道A的用途就不會問 03/28 10:38
chuegou: 我看規格書 就算是INC i,VZC也會動耶? 03/29 00:19
chuegou: 是PM0044 STM8 CPU programming manual對嗎? 03/29 00:21
chuegou: 然後 i如果是區域變數 你要INC之前要先取址吧 03/29 00:24
kikiqqp: 當然,區域變數的話因為變動的關係所以一定會透過暫存器 03/29 14:40
kikiqqp: 這點在asm中是另外一個處理方式了 03/29 14:41