Вопрос по arm, calling-convention, assembly – Что эквивалентно регистру BP (Frame Pointer) на процессорах ARM?

5

На платформах Intel,BP используется для указания на начало кадра стека и для доступа к аргументам[bp+0x??] и локальные переменные[bp-0x??].

Какой регистр используется в ARM? Или адресация основана только на SP?

[У меня нет инфраструктуры для компиляции и дизассемблирования, чтобы увидеть это самому. Ссылка на AAPCS мне тоже не помогла]

Там нет эквивалента дляAAPCS (2003); старшийAPCS имеет R11 в качествеFP в режиме ARM. Поскольку ARM имеет больше регистров, обычно нет необходимости индексировать локальные объекты через стек / фрейм. artless noise

Ваш Ответ

1   ответ
7

R7 действует как указатель кадра в режиме THUMB иR11 действует как указатель кадра в режиме ARM. Но ОС может изменить это соглашение по своему усмотрению.

ЧитатьВот

Обратите внимание, что это проблема ABI, а не проблема процессора. (Процессору все равно, какой регистр вы используете.) Различные ОС могут работать по-разному.
... и если у вас есть регистр указателя стека, современные компиляторы действительно не нуждаются в указателях кадров (FP); они знают схему стека и поэтому могут индексировать из SP, чтобы получить все, что им могло понадобиться для доступа из FP. Так что FP действительно необязателен, в зависимости от вашего компилятора.
Спасибо @RaymondChen. Я обновил свой ответ, чтобы отразить ваши (правильные) взгляды
Некоторые ABI определяют конкретный регистр указателя кадра (поэтому ОС может выполнять обход стека).
Я не знаю, почему ОС будет иметь какое-либо отношение к этому соглашению. Он может использовать конкретное соглашение внутри страны, но приложения не должны заботиться; им нужно только знать соглашение дляcalling Примитивы ОС, и нужно использовать это соглашение только для таких вызовов. В противном случае они должны быть свободны делать то, что им нравится для соглашений об управлении вызовами / кадрами.

Похожие вопросы