関数の先頭で古いベースポインタをスタックに保存する意味は何ですか?アセンブリで関数を操作するのは初めてですが、これを行う意味はまだわかりません。スタックにプッシュされ、最後にポップオフされるだけで、何もしません。たとえば、次のコードはこれを行わなくても問題なく機能します。
.section .data
.section .text
.globl _start
.type add, @function
add:
mov %rsp, %rbp
mov 8(%rbp), %rax
mov 16(%rbp), %rdi
add %rax, %rdi
mov %rbp, %rsp
ret
_start:
push $45
push $36
call add
add $16, %rsp
mov $60, %rax
syscall
この例でスタックポインタを使用するだけで、これをさらに単純化できたはずですが、それがいかに悪い習慣であるかはわかります。