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

看板ASM (組合語言)作者 (喵食罐頭)時間7年前 (2018/03/24 11:10), 編輯推噓2(2015)
留言17則, 4人參與, 7年前最新討論串1/1
請問 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

03/24 15:46, 7年前 , 1F
A是暫存器 i是記憶體位址吧
03/24 15:46, 1F

03/24 15:46, 7年前 , 2F
不是所有指令都能讀記憶體+運算+寫回去一次做完
03/24 15:46, 2F

03/27 12:31, 7年前 , 3F
您好 我知道不是所有指令都可以寫入位址,但INC指令是可
03/27 12:31, 3F

03/27 12:31, 7年前 , 4F
以的
03/27 12:31, 4F

03/28 02:01, 7年前 , 5F
那麼後面的程式有動用到i這個值嗎? 完全沒有 >> 那就改唄
03/28 02:01, 5F

03/28 02:02, 7年前 , 6F
有 >> 有的指令還是要先把值load到暫存器才能操作
03/28 02:02, 6F

03/28 02:05, 7年前 , 7F
總結: 還是要看其他部份的程式 過於片段的程式討論最佳化
03/28 02:05, 7F

03/28 02:05, 7年前 , 8F
是沒有意義的
03/28 02:05, 8F

03/28 09:24, 7年前 , 9F
因為在單晶片上面累加是常常使用的,而大多數都只是當作
03/28 09:24, 9F

03/28 09:24, 7年前 , 10F
計時用,以前ASM寫的很習慣,轉成C後也習慣看一下,才發
03/28 09:24, 10F

03/28 09:25, 7年前 , 11F
現編譯器是這樣處理,等於多耗兩個指令時間
03/28 09:25, 11F

03/28 10:38, 7年前 , 12F
如果知道A的用途就不會問
03/28 10:38, 12F

03/29 00:19, 7年前 , 13F
我看規格書 就算是INC i,VZC也會動耶?
03/29 00:19, 13F

03/29 00:21, 7年前 , 14F
是PM0044 STM8 CPU programming manual對嗎?
03/29 00:21, 14F

03/29 00:24, 7年前 , 15F
然後 i如果是區域變數 你要INC之前要先取址吧
03/29 00:24, 15F

03/29 14:40, 7年前 , 16F
當然,區域變數的話因為變動的關係所以一定會透過暫存器
03/29 14:40, 16F

03/29 14:41, 7年前 , 17F
這點在asm中是另外一個處理方式了
03/29 14:41, 17F
文章代碼(AID): #1QjS6SB3 (ASM)
文章代碼(AID): #1QjS6SB3 (ASM)