Это код, который я получаю при компиляции пустой главной функции:
main:
movw _.frame,2,-sp
sts _.frame
ldd #0
movw 2,sp+,_.frame
rts
(скомпилировано с использованием флага -m68hc12; вывод аналогичен без флага).Другие основные функции (не обязательно главные и не обязательно пустые) следуют той же схеме.
Я не понимаю, что такое _. frame .Согласно исходному коду порта, это должен быть hard регистр.На hc11 / hc12 есть только 5 жестких регистров: D, X, Y, SP и ПК.Так что же ассемблер делает из регистра указателя виртуального фрейма?
Вторая часть проблемы - появление самого указателя фрейма.Кажется, что порт реализует необходимые макросы и функции для устранения указателя кадра, так почему он не заменен ссылками на указатель стека?
Редактировать:
У меня естьнашел ответ на мой вопрос.Порт m68hc11 имитирует несколько жестких регистров (включая указатель кадра), присваивая имена символических регистров предварительно определенным ячейкам памяти.Это делается в файле larith.asm, который, очевидно, представляет собой нечто большее, чем арифметическая библиотека.