Мне поручено преобразовать код сборки x86-64 обратно в простую C функцию. Функция C, с которой я работаю, принимает 4 аргумента (long a, long b, long c, long d). Как и ожидалось, начало кода ассемблера начинается с
movq %rdi, -32(%rbp)
movq %rsi, -40(%rbp)
movq %rdx, -48(%rbp)
movq %rcx, -56(%rbp)
Позже в коде эти регистры снова используются, например,
movq -40(%rbp), %rax
imulq -48(%rbp), %rax
movq %rax, %rdx
movq -32(%rbp), %rax
addq %rdx, %rax
movq %rax, -24(%rbp)
Мой вопрос: если приведенный выше код, на третьем line, присваивает значение для (long c) или этот регистр был очищен во время первого фрагмента кода и просто используется в качестве регистра общего назначения в этой ситуации.