gpt4 book ai didi

optimization - 为什么这段代码是由 avr-gcc 生成的,它是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 15:51:35 25 4
gpt4 key购买 nike

这是我正在处理的 C 项目中反汇编的 AVR 代码片段。我注意到正在生成这个奇怪的代码,我无法理解它是如何工作的。我假设这是某种荒谬的优化......

解释是什么?

92:         ticks++;         // unsigned char ticks;
+0000009F: 91900104 LDS R25,0x0104 Load direct from data space
+000000A1: 5F9F SUBI R25,0xFF Subtract immediate
+000000A2: 93900104 STS 0x0104,R25 Store direct to data space
95: if (ticks == 0) {
+000000A4: 2399 TST R25 Test for Zero or Minus
+000000A5: F009 BREQ PC+0x02 Branch if equal
+000000A6: C067 RJMP PC+0x0068 Relative jump

具体来说,为什么第二条指令从 R25 中减去 0xFF 而不是 INC R25 ?

最佳答案

SUBI 指令可用于将任何 8 位常量添加到/从 8 位值中减去。它具有与 INC 相同的成本,即指令大小和执行时间。所以 SUBI 是编译器首选的,因为它更通用。没有相应的 ADDI 指令,可能是因为它是多余的。

关于optimization - 为什么这段代码是由 avr-gcc 生成的,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com