Управление указателем кадра gcc m68hc11 (hc12) порта - PullRequest
1 голос
/ 24 февраля 2012

Это код, который я получаю при компиляции пустой главной функции:

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, который, очевидно, представляет собой нечто большее, чем арифметическая библиотека.

1 Ответ

1 голос
/ 26 февраля 2012

Не проверять точный источник gcc, но я думаю, что здесь _.frame - просто разновидность мягкого регистра, который использует некоторые глобальные данные.

Следующая ссылка может частично доказать это:

http://tech.groups.yahoo.com/group/gnu-m68hc11/message/3621

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...