Поэтому я пытаюсь изучить немного сборки, потому что мне это нужно для класса 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 бит