[请益] 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