2013-07-20 1 views
5

Я видел аннотацию для толкания/выскакивают несколько регистров в той же строке, например:рычаг в сборе - многократный толчок/поп заказа и SP

push {fp, lr} 

я не мог узнать, кто толкается первый - fp или lr?

Дополнительный вопрос - указывает ли SP на последний занятый адрес в стеке или первый свободный?

Спасибо!

ответ

2

С ARM ARM:

регистры хранятся в последовательности, с наименьшим номером регистра до самого низкого адреса памяти (start_address), через к высоким номером регистра на наивысший адрес памяти (end_address)

В ARM указатель стека обычно указывает на последний занятый адрес в стеке. Например, при настройке начального указателя стека вы обычно инициализируетесь с адресом, расположенным за концом стека.

PUSH - всего лишь синоним STMDB с использованием sp в качестве базового регистра. DB указывает режим адресации «декремент перед».

+0

Как спокойно это один конец конца стека? не указывает ли он на последний пустой адрес? – Niv

+0

Это зависит от того, что вы подразумеваете под «концом». Я имею в виду самый высокий адрес. Стеки обычно растут с высокого на низкий. Это означает, что нажатие уменьшает указатель стека, а затем сохраняет слово. Поп загружает слово, а затем увеличивает указатель стека. –

+0

О, теперь я понял. спасибо :) – Niv