[請益] STM8 8bit加法是否一定要透過 A累加器

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

Links booklink

Contact Us: admin [ a t ] ucptt.com