Пояснення кадру кадру


28

У складі MIPS є регістр покажчика стека та інший регістр для покажчика кадру. Що таке покажчик кадру та яка його мета? Чим він відрізняється від вказівника стека?


1
Які дослідження ви вже робили - і яке ваше ознайомлення з умовами? Для чого це система (різні системи мають різну термінологію)?

Я просто хочу ознайомитися з покажчиком кадру (збирання мип). Я не розумію, як це допомагає, навіщо нам це потрібно? Велике спасибі
qwaserdftyghuijkiii

Відповіді:


44

У збірці MIPS вказівник стека вказує на верхню частину стека. Виділяючи простір на стеку, покажчик стека ($ sp) переміщується, щоб вказувати на вільну пам'ять.

Під час виклику підпрограми в збірці MIPS (регістри в ті дні були преміальними - реєструвати параметри на основі нестандартних параметрів), записує параметри в стек, а потім просуває покажчик стека.

Коли метод запускається, параметр може бути зміщений у 16($sp). Однак, як змінні розміщуються на стеці, покажчик стека переміщується, і той самий параметр тепер може бути розташований на 24($sp). Це може зробити код трохи заплутаним.

Покажчик кадру ($ fp) вказує на початок кадру стека і не рухається протягом тривалості виклику підпрограми. Це вказує на основу кадру стека, а параметри, передані в підпрограму, залишаються на постійній точці щодо покажчика кадру.

Зрозумійте, що покажчик кадру потрібно буде зберігати та відновлювати за допомогою викликів підпрограми, які його змінюють.

Подальше читання:


Я не знаю, що мається на увазі під «регістрами в ті часи, коли вони є непересічними», але параметри можна також ставити на стек, коли кількість реєстрів обмежена. Якщо у вас є 35 параметрів, наприклад (я вважаю, що MIPS має 32 регістри), тоді вам потрібно буде поставити останні 3 параметри на стек Також більш конкретний для реалізації, FP буде за адресою в пам'яті, де повертається адреса.
Джонатан

1
@ Jonathan MIPS З цих 32 реєстрів $ 0 становило 0. $ at було зарезервовано, $ v0 та $ v1 були для зворотного значення функціональних викликів, $ a0 - $ a3 - функціональні параметри, $ t0 - $ t9 були тимчасовими (збереження абонента) , $ s0 - $ s7 були збережені, а $ gp, $ sp, $ fp і $ ra використовувалася самою системою. Загалом, було лише 24 регістри загального призначення та деякі з них, які були зроблені накладні, якщо ви хочете їх використовувати. Зазвичай ви використовували лише регістри $ t (10). Порівняйте це з Itanium, який має 128 регістрів. Викликаючи функцію в MIPS з 35 параметрами, ви, швидше за все, помістіть їх у стек.

@Jonathan Я також вкажу на цей коментар : "Бульдозер AMD: 96 фізичних GPR, Intel Sandy Bridge: 160 фізичних GPR, Intel Haswell: 168 фізичних GPR". З кількома основними машинами все стає смішним. SPARC мав 160 регістрів . Я також вказую на вас, щоб зареєструвати вікно, яке ввійшло в деяку філософію дизайну MIPS з половиною більшості регістрів, ніж його сучасники.

Отже, це те саме, що і звичайне використання %ebpрегістра 'базовий покажчик' в x86-конвенції виклику? (Я новачок у всьому цьому, але це звучить як те саме основне, що і для використання чогось MOV 8(%ebp), %eaxподібного?)
ELLIOTTCABLE

У рядку Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.не зовсім зрозуміло, що це означає
задане
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.