Презентация на тему: » Лекция 1 Введение в программирование и язык C. Машинный код Машинный код или машинный язык система команд (набор кодов операций) конкретной вычислительной.» — Транскрипт:
1 Лекция 1 Введение в программирование и язык C
2 Машинный код Машинный код или машинный язык система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется непосредственно процессором или микропрограммами этой вычислительной машины. Компьютерная программа, записанная на машинном языке, состоит из машинных инструкций, каждая из которых представлена в виде двоичного кода отдельной операции из системы команд машины.
3 Язык низкого уровня Низкоуровневый язык программирования (язык программирования низкого уровня) язык программирования, близкий к программированию в машинных кодах используемого процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских). Пример: язык Assemblerа
Просто о двоичной системе счисления и двоичном коде. #1
4 Язык высокого уровня Высокоуровневый язык программирования язык программирования, разработанный для быстроты и удобства использования программистом. Главная особенность замена длинных и (порой) сложных для понимания описаний на машинном коде простыми смысловыми конструкциями абстракцией. Примеры: С++, Java, Python
5 Трансляция программы Трансляция программы преобразование программы, представленной на одном из языков программирования, в программу на другом языке и равносильную первой. Язык, на котором представлена входная программа, называется исходным языком, а сама программа исходным кодом. Выходной язык называется целевым языком или объектным кодом.
6 Компилятор Компилятор программа, выполняющая компиляцию. Компиляция трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке (машинном коде). Входной информацией для компилятора (исходный код) является описание алгоритма или программы на понятным человеку языке, а на выходе компилятора эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).
7 Языки C и C++ Язык C это императивный, типизированный, высокоуровневый, машинно-ориентированный, не объектно- ориентированный язык программирования. Язык C++ является его объектно- ориентированным расширением.
8 Высокоуровневый язык C Команды и типы данных, которые заложены в С изначально, элементарны, но на основе них можно создавать свои, сколь угодно сложные функции и структуры данных. Стандартная библиотека C включает в себя много сложных (высокоуровневых) функций. Он позволяет определять свои типы данных, создавать свои библиотеки. Создано множество инструментов для разработки больших проектов на языке С.
9 Машинно-ориентированный язык C Основная информационная единица, с которой работает программист на C это байт. Программист на C представляет, как его программа будет расположена в памяти. Программист на C может перейти на самый низкий уровень программирования делать в свой программе «ассемблерные вставки» и писать на уровне команд процессора. Язык C приспособлен для того, чтобы работать напрямую с любыми устройствами компьютера. На языке C можно писать операционные системы
Чем машинный код отличается от ассемблера
10 Императивный язык C Прилагательное императивный означает, что в языке C логику работы программы представляют в виде глаголов (действий): «пока выполнено условие. делать действия. », «выполнить последовательность действий. N раз», «если выполнено условие. перейти к действию. ».
11 Методология повторного использования кода Важным моментом в культуре программирование является методология reuse (повторное использование кода) методология обеспечения модульности, то есть умение использовать разработанные инструменты, программы и библиотеки и умение экспортировать разработанную функциональность в виде удобных, подключаемых к другим проектам, модулей.
12 Этапы компиляции программы Обработка исходного кода программы препроцессором, выполняющим директивы используемые в исходном коде. Получившийся полный текст программы обрабатывается компилятором, который определяет синтаксические лексемы и наличие ошибок в коде. В случае успешной компиляции создается объектный файл. Далее компоновщик, или редактор связей, формирует исполняемый файл программы.
13 Типы ошибок при разработке программ Синтаксические ошибки (syntax errors) – Забыли ; в конце выражения – Неправильно написали имя оператора Ошибки выполнения (runtime errors) – Деление на 0 – Нет места при записи данных на диск Семантические (semantic errors) – Работает, но делает не то, что нужно.
14 Директивы препроцессора Директива препроцессора – команда, выполняемая до начала компиляции исходного текста программы. Директива #include вставляет в файл программы содержимое другого файла. Обычно заголовочные файлы содержат только прототипы функций, то есть просто список функций с указанием аргументов и типа возвращаемого значения.
16 Представление данных в памяти
17 Здравствуй, мир! #include int main ()
18 Команда Команда – это инструкция (приказ) машине выполнить одну элементарную операцию над данными, например: сложить два числа, прочитать данное с диска. Каждая команда программы занимает ячейку памяти и имеет свой адрес (адрес ячейки). Для всякого процессора команда имеет строго фиксированную длину и стандартный формат.
19 Операторы Знак операции – это символ или группа символов, которые сообщают компилятору о необходимости выполнения определенных арифметических, логических или других действий.
20 Операторы Математические операторы: Операторы присваивания:
21 Приоритет операций Операторы Выполняются () [] ->. слева направо ! ~ * слева направо >= слева направо == != слева направо = ^= |= >= справа налево, слева направо
22 Циклы // Инструкция for for (выр 1; выр 2; выр 3) инструкция // эквивалентна конструкции выр 1; while (выр 2)
23 Циклы Цикл While (с пост условием) do инструкция while (выражение);
25 Программа вывода температур с числами с плавающей запятой #include /* печать таблицы температур по Фаренгейту и Цельсию для fahr = 0, ; вариант с плавающей точкой */ int main() < float fahr, celsius; int lower, upper; step; lower = 0; /* нижняя граница таблицы температур */ upper = 300; /* верхняя граница */ step = 20; /* шаг */ fahr = lower; while (fahr
26 Цикл for #include /* печать таблицы температур по Фаренгейту и Цельсию */ int main() < int fahr; for (fahr = 0; fahr
27 Именованные константы Директива #define Строка #define определяет символьное имя, или именованную константу, для заданной строки символов: #define имя подставляемый-текст #include #define LOWER 0 /* нижняя граница таблицы */ #define UPPER 300 /* верхняя граница */ #define STEP 20 /* размер шага */ /* печать таблицы температур по Фаренгейту и Цельсию */ int main () < int fahr; for (fahr = LOWER; fahr
28 Конструкция if-else if (выражение) инструкция 1 else инструкция 2
29 Конструкция if-else if (а > b) z = a; else z = b; // Переменной z присваивается большее значение из a или b. // Тернарная форма записи: z = (a > b) ? а : b;
30 Вложенный if-else if (n > 0) < if (a >b) z = а; > else z = b;
31 Конструкция else-if if (выражение) инструкция else if (выражение) инструкция else if (выражение) инструкция else if (выражение) инструкция else инструкция
Источник: www.myshared.ru
Программирование в машинных кодах
Реализация требуемого алгоритма вычисления достигается путем подготовки, отладки и записи в ПЗУ соответствующей программы. МП способен воспринимать лишь программы, состоящие из последовательности команд, представленных двоичными кодами. Программирование непосредственно в машинных кодах требует постоянного оперирования многоразрядными двоичными числами, представляющими как коды команд, так и коды операндов.
В качестве примера линейной программы в машинных двоичных кодах рассмотрим программу сложения двух чисел, одно из которых 01100100 находится в регистре общего назначения (РОН) В, а второе – 00010111 расположено в ячейке памяти с адресом 0000 0000 1000 1111. Напомним, что рассматриваемый МП имеет шестнадцатиразрядную шину адреса. Фрагмент программы приведен в табл. 1.1.
Таблица 1.1 – Программа сложения в машинных кодах
Адрес памяти | Мнемокод |
0000 0000 0000 0100 | 01111000 |
0000 0000 0000 0101 | 00100001 |
0000 0000 0000 0110 | 10001111 |
0000 0000 0000 0111 | 00000000 |
0000 0000 0000 1000 | 10000110 |
0000 0000 0000 1001 | 01110110 |
. . . . . . . . . . . . . . . . . | . . . . . . . . . |
0000 0000 0000 0100 | 00010111 |
Таблица 1.2 – Программа сложения в шестнадцатеричных кодах
Мнемокод | Адрес | Н — код | Vt |
MOV A,B | 0004 | 78 | 5 |
LXI H | 0005 | 21 | 16 |
0006 | 8F | ||
0007 | 00 | ||
ADD M | 0008 | 86 | 7 |
HLT | 0009 | 76 | 7 |
. . . . . . . . . | . . . . . . | . . . . . . | . . . . |
008F | 17 |
Первая команда – пересылка содержимого регистра В в аккумулятор – является однобайтовой, имеет код операции. Код операции расположен в ПЗУ по адресу 0000 0000 0000 0100, который для данной программы является начальным.
Следующая команда – трехбайтовая, имеет код операции 00100001, представляющий первый байт команды. Второй и третий байты, расположенные в очередных ячейках ПЗУ, содержат соответственно младшую и старшую части адреса 1000 1111 0000 0000, передаваемые по этой команде в регистровую пару H и L.
Микропроцессор при выполнении программы последовательно обращается к ячейкам памяти и выполняет поочередно все команды. Напомним, что коды операций и операнды хранятся в памяти в одинаковом виде и их различение осуществляется микропрограммами выполнения команд, заложенными в МП. Последняя команда имеет код 01110110 и является командой останова (HLT).
В результате выполнения программы в аккумуляторе окажется записанным число 01111011.
Даже рассмотрение такой простейшей программы показывает, насколько неудобным и недостаточно наглядным является представление чисел в машинных двоичных кодах. Поэтому принято запись машинных кодов производить в шестнадцатеричной системе.
В табл. 1.2 приведен фрагмент той же самой программы, записанной в шестнадцатеричных кодах. Рядом с кодом операции показаны его мнемоническое изображение и наименования операндов, принятые в системе команд данного МП. Например, шестнадцатеричный код команды 78, имеющей мнемоническое обозначение MOV A,B, соответствует операции пересылки содержимого регистра В в аккумулятор А. В табл.
1.2 также указано число тактов Vt, необходимое для выполнения каждой команды. Для выполнения всей программы требуется 35 машинных тактов.
Практически удобнее программировать непосредственно в мнемокодах, а затем представлять шестнадцатеричные коды адресов и операндов, получающиеся после распределения памяти.
Информация о работе «Программное обеспечение встроенных систем управления на базе однокристальных микропроцессоров (МП)»
Раздел: Информатика, программирование
Количество знаков с пробелами: 37330
Количество таблиц: 7
Количество изображений: 7
Источник: kazedu.com
Программирование в машинных кодах и ассемблере
Любая программа для ЭВМ — системная или прикладная — воспринимается (распознается) процессором только в том случае, если она состоит из специальных команд, коды которых известны процессору определенного типа. Команды записаны в памяти компьютера в специальном формате. Каждая команда состоит из операционной и адресной частей.
В первой из них находится позиционный двоичный код, определяющий требуемое от процессора действие (сложение, вычитание и т.д.). Во второй – адресной части команды, также в виде двоичного позиционного кода, находятся адреса данных (операндов), над которыми это действие необходимо выполнить, либо сами операнды. В вольном переводе на русский язык некоторую команду можно, например, интерпретировать так: сложить два числа, находящиеся в памяти по адресам 100 и 120.
Разные типы ЭВМ имеют отличные друг от друга способы кодировки команд. Так, на персональных IВМ-совместимых компьютерах некоторая команда сложения в двоичном коде может иметь вид: 0000001111000011D или в шестнадцатиричном коде 03С3H . А на «древних» компьютерах типа М-220 команда сложения двух чисел могла выглядеть так:
001 00000001100100 00000001111000 00000001111011.
Поэтому программа в кодах компьютера (машинных кодах) является машинно-зависимойи непереносимой,т.е. подготовленная для компьютера одного типа, она не сможет выполняться на других. Этот факт определяет основной недостаток программирования в машинных кодах.
Вторым недостатком программирования в кодах является сильное дробление программы. Дело в том, что логически команды процессора достаточно примитивны и обуславливают выполнение простейших операций. Так, программирование несложной формулы x=(a+b)(c+d) требовало задания серии команд типа:
— сложить а и b, промежуточный результат записать в ,
— сложить c и d, промежуточный результат записать в ,
— умножить на , результат записать в х.
При программировании в кодах визуально каждая программа состояла из большого количества команд-строк, похожих на приведенные выше двоичные коды. Это определяло третий недостаток программирования в кодах — затрудненную читаемость программы и, как следствие, сложность исправления (отладки) или доработки программы.
Однако программированию в кодах присущи и значительные плюсы. Программист управляет всеми ресурсами компьютера, полностью контролирует текущее состояние ЭВМ, выбирает наиболее оптимальный код команды. Самые короткие по объему и наиболее быстрые по выполнению программы или их фрагменты разрабатываются и сегодня в кодах.
Для облегчения наглядности программы в кодах разработаны специальные символические языки — ассемблеры. В них каждой команде компьютера сопоставляется определенный символьный код, являющийся сокращением «родных» для человека слов. Специальная программа (она также называется ассемблером) переводит (транслирует)«непонятную» для компьютера (но более понятную для человека) символьную строку в коды компьютера. Так, приведенные выше коды команд сложения на ассемблере могли выглядеть так: ADD АХ, BX (сложить числа из регистров АХ и ВХ и результат запомнить в АХ). При программировании на ассемблере программист может оперировать не с адресами памяти, в которых хранятся данные, а с их символическим представлением. Например, вначале ассемблеру специальной инструкцией сообщается, что по такому-то адресу хранится число, названное для программиста как . Далее программист не задумывается над тем, по какому адресу находится соответствующее число, но просто использует его имя .
Ассемблер является машинно-зависимым языком программирования, так как его инструкции соответствуют кодам команд компьютера. Поэтому ассемблерная программа может выполняться только на тех ЭВМ, для которых она разрабатывалась. Кроме того, для работы на ассемблере требуется детальное знание особенностей конкретной ЭВМ.
Дата добавления: 2016-07-18 ; просмотров: 3882 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
Источник: poznayka.org