Поэтому я пытаюсь изучить немного сборки, потому что мне это нужно для класса Computer Architecture. Я написал несколько программ, таких как печать последовательности Фибоначчи.
Я узнал, что всякий раз, когда я пишу программу, я использую эти 3 строки (как я узнал из сравнения кода сборки, сгенерированного из gcc
на него эквивалентно C
):
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
У меня есть 2 вопроса:
- Прежде всего, почему я использую
%rbp
? Не проще ли использовать%rsp
, так как его содержимое перемещается на%rbp
на 2-й строке? - Почему я должен вычитать что-либо из
%rsp
? Я имею в виду, что это не всегда16
(когда яprintf
строки 7 или 8 переменных, затем я вычитал24
или28
Я использую Manjaro 64 бит на виртуальной машине (4 ГБ оперативной памяти), процессор Intel 64 бит