作者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/cn.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