Обзор работы со стеком » History » Version 6
Version 5 (krufter_multiclet, 04/02/2013 04:18 PM) → Version 6/21 (krufter_multiclet, 04/02/2013 04:25 PM)
h1. Обзор работы со стеком
Стек необходим прежде всего для взаимодействия Си компилятора и ассемблера: передача аргументов функций,
передача параметров, сохранение значений возврата в функцию, возврата в Си результатов и т.п.
Стек в мультиклеточном процессоре организован при помощи индексных регистров 38,39.
Регистр 38 имеет имя BP (база стека), регистр 39 называется SP(вершиной стека).
Стек растёт от конца памяти данных и структурируется по кадрам. Один кадр состоит из группы элементов, находящихся
между SP и BP (между вершиной и базой стека). Один элемент кадра является 32-х битной ячейкой памяти.
Рассмотрим структуру стека при вызове на Си ассемблерной функции типа void, которая не возвращает результат и
имеет два аргумента, например *void void MDIO_WR(int phy_addr, int reg_num)*: reg_num):
!Stack_void.jpg!
Рис 1. Структура стека функции void
+Адрес возврата+ - адрес для возвращения обратно в Си программу
+Аргумент1+ - значение переменной phy_addr
+Аргумент2+ - значение переменной reg_num
+Адрес BP+ - значение адреса, по которому располагалась база предыдущего кадра
Стек необходим прежде всего для взаимодействия Си компилятора и ассемблера: передача аргументов функций,
передача параметров, сохранение значений возврата в функцию, возврата в Си результатов и т.п.
Стек в мультиклеточном процессоре организован при помощи индексных регистров 38,39.
Регистр 38 имеет имя BP (база стека), регистр 39 называется SP(вершиной стека).
Стек растёт от конца памяти данных и структурируется по кадрам. Один кадр состоит из группы элементов, находящихся
между SP и BP (между вершиной и базой стека). Один элемент кадра является 32-х битной ячейкой памяти.
Рассмотрим структуру стека при вызове на Си ассемблерной функции типа void, которая не возвращает результат и
имеет два аргумента, например *void void MDIO_WR(int phy_addr, int reg_num)*: reg_num):
!Stack_void.jpg!
Рис 1. Структура стека функции void
+Адрес возврата+ - адрес для возвращения обратно в Си программу
+Аргумент1+ - значение переменной phy_addr
+Аргумент2+ - значение переменной reg_num
+Адрес BP+ - значение адреса, по которому располагалась база предыдущего кадра