Использование флага -S в gcc Я создал файл сборки из моего кода на C и чтобы лучше понять, как используется память. Вот некоторые сборки из верхней части главной функции:Как работает указатель кадра на MSP430 и что делает макрос `# llo`?
main:
mov r1, r4 ; FP = SP
add #2, r4 ; FP += 2
add #llo(-14), r1 ; SP -= 14 ?
mov #llo(-16), r15 ; ???
add r4, r15 ; r15 += FP
add #4, r15
Комментарии были помещены мной, как я пытался расчленить, что происходит. Мой вопрос заключается в использовании макроса #llo
и о том, как используется память в стеке, и, наконец, что происходит с r15?
Для контекста у меня есть переменные, включающие структуру, размещаемую в стеке в начале main, которая занимает 14 байтов (7 16-битных слов). Я не понимаю, что такое макрос #llo
и для чего используется r15? Я знаю, что r4 - это указатель кадра, а r1 - указатель стека.
Чтение остальной части кода r15 используется для удержания расстояния от вершины стека до указателя кадра и позднее добавляется обратно в указатель стека. Это кажется бессмысленным, потому что вы не можете просто сбросить указатель стека на указатель кадра. С помощью этого метода, в чем смысл даже иметь указатель на фрейм? Все флаги оптимизации отключены с помощью этого кода, я включу некоторые из них и посмотрю, как это изменится. – tylerjw