0

我正在使用 SDCC 为 STM8 微控制器进行编译。编译以下文件会导致看似不必要的div指令——这在 STM8 上非常慢。

char a[1];
char b;

void foo() __interrupt(1) {
    char c = a[0];
    b = c >> 0;
}

void main() {
}

sdcc -mstm8 file.c在以下程序集中编译结果:

_foo:
    clr a
    div x, a
    ld  a, _a+0
    ld  _b+0, a
    iret

该功能似乎按预期工作,但是我不明白为什么需要前两条指令。

4

1 回答 1

2

看起来这是编译器某处的错误,因为如果b = c >> 0更改为b = c << 0, b = c + 0, b = a[0]... 那么就不会发生这样的事情。在优化和未优化的代码上都可以观察到这种行为。但是,如果您针对 size ( --opt-code-size) 进行优化,那么只有div存在,clr则不会发出指令。您可能想向开发人员报告

编译器资源管理器演示

于 2021-05-05T13:42:34.613 回答