Когда у вас есть выражение, такое как i = 5 + 3
, нет необходимости помещать операнды в стек.Компилятор переведет это в нечто похожее на:
mov eax, 5 // load first operand
add eax, 3 // compute the sum
mov [ebp - 4], eax // and store it
Операнды жестко закодированы в инструкции.Некоторый компилятор может решить сделать этот код следующим образом: int i = 8
.
i = 5 + f(3)
В этом случае 3 будет помещено в стек, потому что f
должен быть вызван, но его возвращениезначение (обычно) хранится в eax
.Этот код сборки может быть хорошим переводом:
push 3 // f's argument
call f // call f, return value is in eax
add eax, 5 // compute the sum
mov [ebp - 4], eax // and save in i