У складі MIPS є регістр покажчика стека та інший регістр для покажчика кадру. Що таке покажчик кадру та яка його мета? Чим він відрізняється від вказівника стека?
У складі MIPS є регістр покажчика стека та інший регістр для покажчика кадру. Що таке покажчик кадру та яка його мета? Чим він відрізняється від вказівника стека?
Відповіді:
У збірці MIPS вказівник стека вказує на верхню частину стека. Виділяючи простір на стеку, покажчик стека ($ sp) переміщується, щоб вказувати на вільну пам'ять.
Під час виклику підпрограми в збірці MIPS (регістри в ті дні були преміальними - реєструвати параметри на основі нестандартних параметрів), записує параметри в стек, а потім просуває покажчик стека.
Коли метод запускається, параметр може бути зміщений у 16($sp)
. Однак, як змінні розміщуються на стеці, покажчик стека переміщується, і той самий параметр тепер може бути розташований на 24($sp)
. Це може зробити код трохи заплутаним.
Покажчик кадру ($ fp) вказує на початок кадру стека і не рухається протягом тривалості виклику підпрограми. Це вказує на основу кадру стека, а параметри, передані в підпрограму, залишаються на постійній точці щодо покажчика кадру.
Зрозумійте, що покажчик кадру потрібно буде зберігати та відновлювати за допомогою викликів підпрограми, які його змінюють.
Подальше читання:
%ebp
регістра 'базовий покажчик' в x86-конвенції виклику? (Я новачок у всьому цьому, але це звучить як те саме основне, що і для використання чогось MOV 8(%ebp), %eax
подібного?)
Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.
не зовсім зрозуміло, що це означає