Обзор работы со стеком » History » Version 5
krufter_multiclet, 04/02/2013 04:18 PM
| 1 | 1 | krufter_multiclet | h1. Обзор работы со стеком |
|---|---|---|---|
| 2 | 1 | krufter_multiclet | |
| 3 | 1 | krufter_multiclet | Стек необходим прежде всего для взаимодействия Си компилятора и ассемблера: передача аргументов функций, |
| 4 | 1 | krufter_multiclet | передача параметров, сохранение значений возврата в функцию, возврата в Си результатов и т.п. |
| 5 | 1 | krufter_multiclet | |
| 6 | 1 | krufter_multiclet | Стек в мультиклеточном процессоре организован при помощи индексных регистров 38,39. |
| 7 | 1 | krufter_multiclet | Регистр 38 имеет имя BP (база стека), регистр 39 называется SP(вершиной стека). |
| 8 | 1 | krufter_multiclet | |
| 9 | 1 | krufter_multiclet | Стек растёт от конца памяти данных и структурируется по кадрам. Один кадр состоит из группы элементов, находящихся |
| 10 | 2 | krufter_multiclet | между SP и BP (между вершиной и базой стека). Один элемент кадра является 32-х битной ячейкой памяти. |
| 11 | 5 | krufter_multiclet | Рассмотрим структуру стека при вызове на Си ассемблерной функции типа void, которая не возвращает результат и |
| 12 | 5 | krufter_multiclet | имеет два аргумента, например void MDIO_WR(int phy_addr, int reg_num): |
| 13 | 3 | krufter_multiclet | |
| 14 | 4 | krufter_multiclet | !Stack_void.jpg! |
| 15 | 5 | krufter_multiclet | |
| 16 | 5 | krufter_multiclet | Рис 1. Структура стека функции void |