运算符优先级和复杂表达式的评估顺序

Ale*_*op. 5 c operator-precedence

我在看下面的代码:

#include <stdint.h>

void foo(uint32_t *pVal)
{
  uint32_t i = 8;

  *pVal = i *= 10;
}
Run Code Online (Sandbox Code Playgroud)

乍一看很明显,在返回之前foo(),*pVal将是80以及价值i.这确实是根据godbolt.org发生的事情:

foo:                                    # @foo
        push    rbp
        mov     rbp, rsp
        mov     qword ptr [rbp - 8], rdi
        mov     dword ptr [rbp - 12], 8
        imul    eax, dword ptr [rbp - 12], 10
        mov     dword ptr [rbp - 12], eax
        mov     rdi, qword ptr [rbp - 8]
        mov     dword ptr [rdi], eax
        pop     rbp
        ret
Run Code Online (Sandbox Code Playgroud)

但是从这里检查运算符优先级后,优先级=高于优先级*=,所以似乎值*pVal应为8,值i应为80 ...

我在这里错过了什么?

编辑:

除了melpomene的优秀答案之外,还有一个很好的维基百科页面.