Первое занятие курса по программированию микроконтроллеров stm32. На занятии рассказано про режимы работы процессора, запись флеш памяти(эмуляция eeprom). Большая часть занятия была выделена под систему тактирования микропроцессора. А так-же рассказано как сделать начальную настройку быстрее и проще.
Первое занятие курса по программированию микроконтроллеров stm32. На занятии рассказано про режимы работы процессора, запись флеш памяти(эмуляция eeprom). Большая часть занятия была выделена под систему тактирования микропроцессора. А так-же рассказано как сделать начальную настройку быстрее и проще.
В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Применение статического анализа при разработке программTatyanazaxarova
Статический анализ - это способ проверки исходного кода программы на корректность. Процесс статического анализа состоит из трех этапов. Сначала анализируемый код разбивается на лексемы - константы, идентификаторы, и т. д. Эта операция выполняется лексером. Затем лексемы передаются синтаксическому анализатору, который выстраивает по этим лексемам дерево кода. Наконец, проводится статический анализ построенного дерева. В данной обзорной статье приведено описание трех методов статического анализа: анализ с обходом дерева кода, анализ потока данных и анализ потока данных с выбором путей.
Разработка статического анализатора кода для обнаружения ошибок переноса прог...Tatyanazaxarova
В статье рассмотрена задача разработки программного инструмента под названием статический анализатор. Разрабатываемый инструмент используется для диагностики потенциально опасных синтаксических конструкций языка Си++ с точки зрения переноса программного кода на 64-битные системы. Акцент сделан не на самих проблемах переноса, возникающих в программах, а на особенностях создания специализированного анализатора кода. Анализатор предназначен для работы с кодом программ на языках Си и Си++.
В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Применение статического анализа при разработке программTatyanazaxarova
Статический анализ - это способ проверки исходного кода программы на корректность. Процесс статического анализа состоит из трех этапов. Сначала анализируемый код разбивается на лексемы - константы, идентификаторы, и т. д. Эта операция выполняется лексером. Затем лексемы передаются синтаксическому анализатору, который выстраивает по этим лексемам дерево кода. Наконец, проводится статический анализ построенного дерева. В данной обзорной статье приведено описание трех методов статического анализа: анализ с обходом дерева кода, анализ потока данных и анализ потока данных с выбором путей.
Разработка статического анализатора кода для обнаружения ошибок переноса прог...Tatyanazaxarova
В статье рассмотрена задача разработки программного инструмента под названием статический анализатор. Разрабатываемый инструмент используется для диагностики потенциально опасных синтаксических конструкций языка Си++ с точки зрения переноса программного кода на 64-битные системы. Акцент сделан не на самих проблемах переноса, возникающих в программах, а на особенностях создания специализированного анализатора кода. Анализатор предназначен для работы с кодом программ на языках Си и Си++.
2. LOGO
Об ассемблере
Ассемблер - язык программирования низкого уровня, то есть
максимально приближенный к «железу» — аппаратному
обеспечению компьютера.
Для каждого процессора характерен свой уникальный набор
действий, которые процессор способен выполнить, поэтому
языки ассемблера разных процессоров отличаются друг от друга.
Язык ассемблера — это всего лишь ориентированная на
человека форма записи инструкций процессора (которые
называются также машинным языком), а сам ассемблер — это
программа, переводящая симво-лические имена команд в
машинные коды.
3. LOGO
Системы счисления
Архитектура компьютера тесно связана с двоичной системой
счисления, кото-рая состоит всего из двух цифр — 0 и 1.
С технической точки зрения, двоичная система (с основой 2)
идеально подходит для компьютеров, поскольку обе цифры
могут отображать два состояния — включено (1) и выключено
(0).
Однако «большие» числа становятся огромными в двоичной
системе, поэтому для более удобного представления чисел были
разработаны восьмеричная и шестнадцатеричная системы
счисления (с основами 8 и 16 соответственно).
Обе системы легко преобразуются в двоичную систему, но
позволяют записывать числа более компактно.
4. LOGO
Пример: число 123 456 = (1E240)16.
Запись со скобками и нижним индексом в тексте программы
неудобна, по-этому мы будем использовать следующие
обозначения для записи чисел в различных системах счисления:
• Запись шестнадцатеричного числа начинается с 0х или $0 либо
заканчи-вается символом «h». Если первая цифра
шестнадцатеричного числа — символ A-F, то перед таким числом
нужно обязательно написать 0, чтобы компилятор понял, что
перед ним число, а не идентификатор, например, 0DEADh.
Таким образом, записи 0x1234, $01234 и 01234h представляют
число (1234)10.
5. LOGO
• Десятичные числа могут записываться без изменений
либо они закачиваются постфиксом «d».
Например, 1234 и 1234d представляют число (1234)10.
• Двоичные цифры должны заканчиваться постфиксом
«b», например 1100b —это (1100)2.
• Восьмеричные цифры заканчиваются на «q»: 12q —
это (12)8.
6. LOGO
Биты и слова
Биты (разряды) двоичного числа нумеруются справа налево, от
наименее значимого до наиболее значимого. Нумерация
начинается с 0.
Самый правый бит числа — это бит с номером 0 (первый бит).
Этот бит называется LSB-битом (Least Significant Bit — наименее
значимый бит).
Подобно этому самый левый бит называется MSB-битом (Most
Significant Bit — наиболее значимый бит).
Большие группы битов называются словом (word) или двойным
словом (dword — double word):
1 байт = 8 бит
1 слово (word) = 2 байта = 16 бит
1 двойное слово (dword) = 4 байта = 32 бит
8. LOGO
Типы данных
В языках программирования высокого уровня есть
специальные типы данных, позволяющие хранить символы и
строки.
В языке ассемблера таких типов данных нет. Вместо них для
представления одного символа используется байт, а для
представления строки — группа последовательных байтов.
Каждое значение байта соответствует одному из символов
ASCIIтаблицы (American Standard Code for Information
Interchange). Первые 128 символов — управляющие символы,
латинские буквы, цифры — одинаковы для всех компьютеров и
операционных систем.
10. LOGO
Регистры общего назначения
Среди регистров обязательно должны присутствовать следующие
группы:
регистры общего назначения,
регистры состояния
счетчики.
Регистры общего назначения содержат рабочие данные,
полученные из памяти.
Регистры состояния содержат текущее состояние процессора (или
состояние АЛУ).
Последняя группа — это счетчики. Согласно теории фонНеймана,
должен быть хотя бы один регистр из этой группы — счетчик
команд, содержащий адрес следующей инструкции.
12. LOGO
Регистры общего назначения. Они называются ЕАХ, ЕВХ, ЕСХ и
EDX (Аккумулятор, База, Счетчик и Данные). Кроме названий, они
больше ничем другим не отличаются друг от друга, поэтому
рассмотрим только первый регистр — ЕАХ (рис. 2.4).
Процессор 80386 обратно совместим с процессором 80286, регистры
которого 16разрядные. Как же 80386 может выполнять команды,
предназначенные для регистров меньшего размера?
Регистр ЕАХ может быть разделен на две части — 16-
разрядный регистр АХ (который также присутствует в 80286) и
верхние 16 битов, которые никак не называются.
В свою очередь, регистр АХ может быть разделен на два 8-
битных регистра — АН и AL.
14. LOGO
Пример. Если мы заносим в регистр ЕАХ значение 0x12345678,
то регистр АХ будет содержать значение 0x5678 (0x56 в АН и
0x78 в AL), а значение 0x1234 будет помещено в верхнюю часть
регистра ЕАХ.
«Младшие» регистры других регистров общего назначения
называются по такому же принципу: ЕВХ содержит ВХ, который,
в свою очередь, содержит ВН и BL и т.д.
15. LOGO
Индексные регистры
К регистрам общего назначения иногда относят и индексные
регистры процессора 80386 —ESI, EDI и ЕВР (или SI, DI и ВР для
16разрядных действий).
Обычно эти регистры используются для адресации памяти:
обращения к массивам, индексирования и т.д.
Отсюда их имена: индекс источника (Source Index), индекс
приемника (Destination Index), указатель базы (Base Pointer).
Но хранить в них только адреса совсем необязательно:
регистры ESI, EDI и ЕВР могут содержать произвольные данные.
У регистров ESI, EDI и ЕВР существуют только в 16разрядная и
32разрядная версии.
Эти регистры программно доступны, то есть их содержание может быть
изменено программистом. Другие регистры лучше «руками не трогать».
16. LOGO
Регистры состояния
Регистры из этой группы используются при вычислении реального адреса
(адреса, который будет передан на шину адреса).
Процесс вычисления реального адреса зависит от режима процессора
(реальный или защищенный).
Сегментные регистры только 16разрядные, такие же, как в 80286.
Названия этих регистров соответствуют выполняемым функциям:
CS (Code Segment, сегмент кода) вместе с EIP (IP) определяют адрес
памяти, откуда нужно прочитать следующую инструкцию;
Регистр SS (Stack Segment, сегмент стека) в паре с ESP (SS:SP) указывают на
вершину стека.
Сегментные регистры DS, ES, FS, и GS (Data, Extra, F и G сегменты) исполь
зуются для адресации данных в памяти.
Стек это структура данных, которая используется для временного
хранения информации. Программа может поместить данные в стек
(PUSH) или забрать их оттуда (POP).