Содержание
- 2. Краткое содержание предыдущей серии Как в ассемблере происходит сравнение? Как используется результат сравнения? В чем отличие
- 3. Краткое содержание этой серии Модель памяти в языке С Функции в языке С Функции в ассемблере
- 4. Модель оперативной памяти в языке С Статическая область – ее размер известен при компиляции; там хранятся
- 5. Функции в языке С: объявление Объявление (прототип) – declaration: Что такое объявление? Это «обещание», что где-то
- 6. Функции в языке С: объявление void * foo(int a); void * - тип возвращаемого значения foo
- 7. Функции в языке С: определение Что такое определение (тело) – definition? Это сам код функции, который
- 8. Функции в языке С: вызов Как происходит вызов функции: char foo(int a); //определение должно быть до
- 9. Функции в языке С: вызов char foo(int a); ... char result = foo(2); После этой строки
- 10. Функции и процедуры В настоящее время различие минимально: процедуры не возвращают значение, а функции – могут
- 11. Функции в ассемблере Вызов функции в ассемблере: команды BL address BLX register Переход с сохранением адреса
- 12. Функции в ассемблере Что нужно сделать, чтобы вызвать функцию? Как-то передать параметры Как-то передать управление Как-то
- 13. Функции в ассемблере: что может сломаться? Весь код в ассемблере использует регистры. Код в функции тоже
- 14. Функции в ассемблере: что может сломаться? Содержимое регистров может быть испорчено при вызове функций. Что делать?
- 15. Функции в ассемблере: состояние регистров Куда сохранять состояние регистров? В специальную статическую область памяти (архитектура 8051)
- 16. Функции в ассемблере А не нужно ли сохранять что-нибудь еще? Состояние LR для текущей функции (но
- 17. Функции в ассемблере А как передавать параметры? На регистрах (их ведь все равно сохраняем) В специальной
- 18. Стек Доступ к стеку: спец. команды push и pop через SP (регистр – указатель стека) или
- 19. Функции в ассемблере: контекст int foo(int a, int b) { 1: b--; 2: bar(50); 2.1: push
- 20. Функции в ассемблере: контекст int bar(int c) { 1: buzz(77); 1.1: push r0-lr 1.2: push 77
- 21. Функции: соглашение о вызове Как передаются параметры? Как возвращается результат? Кто сохраняет контекст? Кто восстанавливает контекст?
- 22. Соглашение о вызове В ARM – ARM Procedure Call Standard (call convention) (очень упрощенно): До четырех
- 23. Функции (в ARM): краткий итог Параметры и локальные переменные хранятся в регистрах или в стеке Доступ
- 24. Суперскалярная архитектура (конвейеризация) Идея: Каждая инструкция ассемблера для процессора – многостадийный процесс. Разные стадии часто не
- 25. Простой трехстадийный конвейер ARM Стадии выполнения одной команды:
- 26. Конвеер Плюсы: Процессор загружен равномерно Инструкции выполняются параллельно Минусы: Инструкции могут быть зависимы (конфликты) Команды перехода
- 27. Как борются с минусами конвейера? Зависимые инструкции: Команда NOP (no operation) Долгие инструкции: Внеочередное исполнение И
- 28. Функции Плюсы: Повторное использование кода Краткость кода Функции – это интерфейс к чужому коду Минусы: Срыв
- 29. Минусы функций: что же делать? Чего НЕ НАДО делать: оптимизировать раньше времени использовать глобальные переменные вместо
- 30. Чистые функции Чистая функция (pure) зависит только от своих параметров и не меняет глобальное состояние. Ее
- 32. Скачать презентацию