Содержание
- 2. Краткое содержание предыдущей серии Что такое CISC и RISC? В чем их основные отличия? Что это
- 3. Краткое содержание этой серии Типизация в языках программирования Команды загрузки и сохранения Подробнее о длинных и
- 4. Типизация в языках программирования О чем речь? Типизация – способ задания типа объекта. А что такое
- 5. Виды типизации По наличию типизации языки программирования бывают: Типизированные (C, C++, Java, Python...) – работа с
- 6. По времени определения типа Но в языках со статической типизацией можно руками сделать динамическую. Иногда, можно
- 7. По силе (строгости) Обычно автоматически приводятся не любые типы к любым типам. Например, приведение числа к
- 8. По «явности» В языке с явной типизацией бывает «неявная типизация по выбору» И наоборот тоже бывает.
- 9. Бестиповой ассемблер – это как? Никаких переменных нет, есть только память Но на память можно «смотреть»
- 10. Memory Map в STM32 Процессор 32-битный, адресное пространство тоже 32-битное. Значит, адреса в памяти меняются от
- 11. Memory Map в STM32 (упрощенная) Код выполняется прямо из Flash-памяти Переменные хранятся в ОЗУ
- 12. Команды загрузки и сохранения Команда загрузки – load – LDR – загружает значение из памяти в
- 13. И команды работы со стеком PUSH – поместить значение регистров в стек PUSH {r4-r6,lr} POP –
- 14. Где «тип» же в командах? «Как мы смотрим» на память задается с помощью постфиксов: LDR –
- 15. Типы С и ассемблер Между целочисленными типами и командами соотношение очевидное А как же float и
- 16. Длинные и короткие команды Как процессор узнает, длинную команду нужно выполнить или короткую? Раньше (в ARMv5)
- 17. Длинные и короткие команды Процессор считывает 16 бит по адресу, указанному в РС. Если биты с
- 18. Структура короткой команды на примере MOVS r0,#0x05 0x2005 = 0010 0000 0000 0101 Пять старших бит
- 19. Структура длинной команды (ADDW) ADDW Rn, Rd, Imm -> Rd = Rn + Imm12 Зеленое –
- 20. Пример ADDW F600401A ADDW r0,r0,#0xC1A C1A = 1100 0001 1010 F600401A =
- 21. Структура длинной команды (ADD) ADD Rn, Rd, Imm -> Rd = Rn + Imm32 Зеленое –
- 22. Непосредственный операнд при кодировании Т3 Часть первая:
- 23. Непосредственный операнд при кодировании Т3 Часть вторая:
- 24. Непосредственный операнд при кодировании Т3 Часть вторая:
- 25. Пример команды ADD c кодированием Т3 F5001090 ADD r0,r0,#0x120000 0x12 = 10010 0x12 0000 = 1001
- 26. «Святые писания» Cortex-M3 Devices Generic User Guide: Программная модель ядра процессора Описание синтаксиса и семантики инструкций
- 27. «Святые писания» Errata sheet: Описание всех известных производителю ошибок в конкретном МК или серии МК Спецификация
- 28. Переходим к чудесам!
- 29. Краткий экскурс в историю Язык С появился в ~1973 году. Компьютеры были очень разные. С –
- 30. Типы в языке С Типизация: статическая слабая и неявная. «Простые» типы: _Bool (bool) – начиная с
- 31. Как искать чудеса? Читать Стандарт языка (С89, С99, С03) Искать на stackoverflow.com Просто писать программы! Чудо
- 32. Чудо первое: размеры типов Оператор sizeof возвращает размеры в размерах типа char Количество бит в одном
- 33. Чудо первое: размеры типов Как жить с этим чудом? Использовать типы с известной длиной! #include char
- 34. Чудо второе: поведение
- 35. Чудо второе: поведение Компиляторы не всегда предупреждают Компиляторы не всегда следуют стандарту Как жить с этим
- 36. Чудо третье, неожиданное Если поведение определенное, это еще не значит, что оно очевидное. Примеры: Правила неявного
- 37. Чудо третье, неожиданное Как жить с чудесами? Учиться, учиться и еще раз учиться. Или искать другой
- 38. Немножко о стиле кода Пишите комментарии о смысле происходящего Если у вас больше трех переменных –
- 40. Скачать презентацию