私が読んでいる本には、この関数にはローカル変数があると書かれています。また、この関数は再帰的であるため、ローカル変数を持つことが重要であるとも述べています。多分私は盲目か、ローカル変数がアセンブリでどのように機能するかを理解していませんが、それはわかりません。
.type factorial, @function
factorial:
push %rbp # Save old base pointer.
mov %rsp, %rbp # Copy stack pointer to base pointer.
mov 16(%rbp), %rax # Save the argument in %rax.
cmp $1, %rax # End of the factorial.
je end_factorial
dec %rax # Decrement %rax.
push %rax # Push onto stack for next call to factorial.
call factorial
mov 16(%rbp), %rbx # %rax has return value, so load arg into %rbx.
imul %rbx, %rax # Multiply that by result of last call to factorial.
end_factorial:
# Restore stack pointer and base pointer to where they were
# before function call.
mov %rbp, %rsp
pop %rbp
ret
レジスタはローカル変数と見なすことができますか? ローカル変数はのようなもので実装されていましたsub $8, %rsp
。