Предположим, этот код:
int add(int a, int b){
int c = a+b;
return c;
}
int main(){
printf("%d\n", add(3,4));
}
Обычно это выполняется в сборке следующим образом:
- push 4 to stack
- push 3 to stack
- push return address which is the address of the next instruction, `print()` to stack
- call add
- do addition and push c on the stack
- pop c from stack ??
- return to main
Итак, что происходит с возвращаемым значением, оно не может быть включено кадр add
, так как он будет очищен в конце. Помещается ли оно в стек main
?
Предположим, что значения помещаются в цепочку, а не в регистр.