Основы программирования на Ассемблере
Предикаты сравнения представляют собой функции, которые сравнивают две величины и возвращают однобитовый результат, равный 1, если проверяемое отношение истинно, и 0, если ложно. В этом разделе приводится несколько методов вычисления результата сравнения с размещением его в бите знака (эти методы не используют команд ветвления). Чтобы получить значение 1 или 0, используемое в некоторых языках… Читать ещё >
Основы программирования на Ассемблере (реферат, курсовая, диплом, контрольная)
СОДЕРЖАНИЕ Введение
1. Цифровые узлы комбинационного и последовательностного типа
1.1 Моделирование цифровых узлов комбинационного и последовательностного типа electronic work bench
2. Основы программирования на Ассемблере
2.1 Арифметические команды. Команды передачи
2.2 Манипуляции над битами. Строковые операции
3. Программирование с использованием MASM
3.1 Пакет MASM. Структура программы
3.2 Совместное использование языка Ассемблер с другими языками программирования
3.3 Команды управления циклами. Команды работы со строками Заключение Литература
ВВЕДЕНИЕ
Практика является одной из важнейших составляющих профессиональной подготовки студента, так же является составной частью основной образовательной программы.
С 24 февраля по 1 марта 2014 года я проходил практику по программированию на базе ЧУ ТМК «Мирас» по специальности ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.
Цели практики по программированию:
1.Закрепление и углубление знаний полученных при теоретическом обучении.
2.Подготовка к изучению последующих специальных дисциплин и прохождению производственной практики.
3.Знакомство с особенностями программирования.
О языке программирования Ассеммблер (от англ. assembler — сборщик) — компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
Как и сам язык ассемблеры, как правило, специфичны для конкретной архитектуры, операционной системы и варианта синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.
На период практики по программированию передо мной стояли следующие задачи:
1.Развитие и укрепление интересов избранной профессии
2.Формирование профессиональных знаний, умений, навыков
3.Ознакомление с содержанием основных работ
4.Формирование умений применять теоретические знания
5.Закрепить язык программирования Delphi
6.Выполнить практические задания программирование ассемблер цифровой моделирование
1. ЦИФРОВЫЕ УЗЛЫ КОМБИНАЦИОННОГО И ПОСЛЕДОВАТЕЛЬНОСТНОГО ТИПА Следующий уровень иерархии вслед за цифровыми элементами занимают функциональные узлы. Они выполняют типовые для цифровых устройств микрооперации, т. е. реализуют низший иерархический уровень внутреннего языка цифрового устройства. Функциональные узлы делятся на комбинационные и последовательностей. Комбинационные узлы (комбинационные цепи) — это устройства, выходные величины которых зависят только от текущих значений входных величин. В отличие от них, последовательностей узлы содержат элементы памяти. Их реакция определяется не только вектором входных сигналов, но и внутренним состоянием. Поэтому их называют автоматами с памятью.
Рассмотрение функциональных узлов начнем с типовых комбинационных цепей.
Дешифратор (Decoder, DC) осуществляет преобразование n-элементного параллельного кода в код «1 из m», у которого только в одной позиции находится единица, все остальные позиции — нулевые. Количество выходов так называемого полного дешифратора должно равняться числу всевозможных n-разрядных кодовых комбинаций, т. е. m = 2 n.
Интегральные счетчики Счетчиком называется устройство, предназначенное для подсчета числа входных сигналов и хранения в определенном двоичном коде этого числа.
Счетчики — это цифровые автоматы, внутренние состояния которых определяются только количеством сигналов «1», пришедших на вход. Сигналы «0» не изменяют их внутренние состояния.
Триггер Т-типа является простейшим счетчиком, который считает до двух. Счетчик, образованный цепочкой из m триггеров, сможет подсчитывать в двоичном коде 2m входных импульсов. Каждый из триггеров в этой цепочке называют разрядом счетчика.
Основная характеристика счетчика — модуль счета, или емкость счетчика Kсч. Это количество поступивших входных сигналов, которое возвращает счетчик в исходное состояние.
Количество триггеров, необходимое для реализации счетчика, равно m = log2 Kсч., где m — ближайшее большее целое число.
Классификация счетчиков Цифровые счетчики классифицируются следующим образом:
по модулю счета: двоичные, двоично-десятичные или с другим основанием счета, недвоичные с постоянным модулем счета, с переменным модулем счета;
Информационные входы дешифратора принято обозначать их двоичными весами. EN (Enable) — вход разрешения работы дешифратора. На выходе дешифратора формируются логические функции в виде системы конъюнкций, которая в случае n информационных входов имеет вид:
Рис. 1 Формула по направлению счета:
суммирующие, вычитающие, реверсивные;
по способу организации внутренних связей: с последовательным переносом, с параллельным переносом, с комбинированным переносом, кольцевые.
Классификационные признаки независимы и могут встречаться в различных сочетаниях: например, суммирующие счетчики бывают как с последовательным, так и с параллельным переносом и могут иметь двоичный, десятичный и иной модуль счета.
В суммирующем счетчике каждый входной импульс увеличивает число, записанное в счетчик, на единицу (для счетчиков с естественным порядком счета) и на единицу и более для счетчиков с произвольным порядком счета.
Вычитающий счетчик действует обратным образом: двоичное число, хранящееся в счетчике, с каждым поступающим импульсом уменьшается. Переполнение счетчика наступает при поступлении на его вход количества импульсов большего Kсч…
Реверсивный счетчик может работать в качестве суммирующего и вычитающего.
1.1 МОДЕЛИРОВАНИЕ ЦИФРОВЫХ УЗЛОВ КОМБИНАЦИОННОГО И ПОСЛЕДОВАТЕЛЬНОСТНОГО ТИПА ELECTRONIC WORK BENCH
Система схемотехнического моделирования Electronics Workbench предназначена для моделирования и анализа электрических схем.
Electronics Workbench может проводить анализ схем на постоянном и переменном токах. При анализе на постоянном токе определяется рабочая точка схемы в установившемся режиме работы. Результаты этого анализа не отражаются на приборах, они используются для дальнейшего анализа схемы. Анализ на переменном токе использует результаты анализа на постоянном токе для получения линеаризованных моделей нелинейных компонентов. Анализ схем в режиме АС может проводиться как во временной, так и в частотной областях.
В Electronics Workbench можно исследовать переходные процессы при воздействии на схемы входных сигналов различной формы. Программа также позволяет производить анализ цифро-аналоговых и цифровых схем большой степени сложности. Имеющиеся в программе библиотеки включают в себя большой набор широко распространенных электронных компонентов. Есть возможность подключения и создания новых библиотек компонентов.
Широкий набор приборов позволяет производить измерения различных величин, задавать входные воздействия, строить графики. Все приборы изображаются в виде, максимально приближенном к реальному, поэтому работать с ними просто и удобно.
Результаты моделирования можно вывести на принтер или импортировать в текстовый или графический редактор для их дальнейшей обработки.
Программа Electronics Workbench совместима с программой P-SPICE, т. е. предоставляет возможность экспорта и импорта схем и результатов измерений в различные ее версии.
Electronics Workbench позволяет разместить схему таким образом, чтобы были четко видны все соединения элементов и одновременно вся схема целиком.
Программа использует стандартный интерфейс Windows, что значительно облегчает ее использование.
Для установки программы необходимы:
? IBM-совместимый компьютер с модификацией процессора не ниже 486;
? не менее 4 МВ свободного пространства на жестком диске;
? операционная система Microsoft Windows 3.1 или более поздние версии;
? манипулятор типа мышь.
В библиотеки компонентов программы входят пассивные элементы, транзисторы, управляемые источники, управляемые ключи, гибридные элементы, индикаторы, логические элементы, триггерные устройства, цифровые и аналоговые элементы, специальные комбинационные и последовательные схемы. Активные элементы могут быть представлены моделями как идеальных, так и реальных элементов. Возможно также создание своих моделей элементов и добавление их в библиотеки элементов.
В программе используется большой набор приборов для проведения измерений: амперметр, вольтметр, осциллограф, мультиметр, Боде-плоттер (графопостроитель частотных характеристик схем), функциональный генератор, генератор слов, логический анализатор и логический преобразователь.
В библиотеки компонентов программы входят пассивные элементы, транзисторы, управляемые источники, управляемые ключи, гибридные элементы, индикаторы, логические элементы, триггерные устройства, цифровые и аналоговые элементы, специальные комбинационные и последовательные схемы. Активные элементы могут быть представлены моделями как идеальных, так и реальных элементов. Возможно также создание своих моделей элементов и добавление их в библиотеки элементов.
В программе используется большой набор приборов для проведения измерений: амперметр, вольтметр, осциллограф, мультиметр, Боде-плоттер (графопостроитель частотных характеристик схем), функциональный генератор, генератор слов, логический анализатор и логический преобразователь.
Electronics Workbench позволяет использовать результаты, полученные в программах P-SPICE, PCB, а также передавать результаты на Electronics Workbench в эти программы. Можно вставить схему или ее фрагмент в текстовый редактор и напечатать в нем пояснения или замечания по работе схемы.
Все операции производятся при помощи мыши и клавиатуры. Управление только с клавиатуры невозможно.
Путем настройки приборов можно:
? изменять школы приборов в зависимости от диапазона измерений;
? задавать режим работы прибора.
2. ОСНОВЫ ПРОГРАММИРОВАНИЯ НА АССЕМБЛЕРЕ ЗАДАНИЕ Запуск Debug. exe, программы для проверки и отладки исполнительных файлов MS-DOS.
Рис. 2 главное окно Debug. exe
Получил и зафиксировал дампы характерных областей RAM и ROM
Рис. 2.1 Дампы характерных областей RAM и ROM
Посмотрел области памяти Рис. 2.2 Области памяти Проверил состояние регистра клавиатуры:
Рис. 2.3 Состояние регистра клавиатуры
Проверка даты производства BIOS.
Рис. 2.4 Проверка даты производства BIOS
Скопировал BIOS (С000:0 … FFFF: F) в файл и сохранил файл для последующего анализа.
Рис. 2.5 BIOS (С000:0 … FFFF: F)
2.1 АРИФМЕТИЧЕСКИЕ КОМАНДЫ. КОМАНДЫ ПЕРЕДАЧИ Наряду со средствами арифметических вычислений, система команд микропроцессора имеет также средства логического преобразования данных. Под логическими понимаются такие преобразования данных, в основе которых лежат правила формальной логики.
Формальная логика работает на уровне утверждений истинно и ложно. Для микропроцессора это, как правило, означает 1 и 0 соответственно. Для компьютера язык нулей и единиц является родным, но минимальной единицей данных, с которой работают машинные команды, является байт. Однако на системном уровне часто необходимо иметь возможность работать на предельно низком уровне — на уровне бит.
К средствам логического преобразования данных относятся логические команды и логические операции. Операнд команды ассемблера в общем случае может представлять собой выражение, которое, в свою очередь, является комбинаций операторов и операндов. Среди этих операторов могут быть и операторы, реализующие логические операции над объектами выражения.
Перед подробным рассмотрением этих средств рассмотрим, что же представляют собой сами логические данные и какие операции над ними производятся.
Теоретической базой для логической обработки данных является формальная логика. Существует несколько систем логики. Одна из наиболее известных — это исчисление высказываний. Высказывание — это любое утверждение, о котором можно сказать, что оно либо истинно, либо ложно.
Исчисление высказываний представляет собой совокупность правил, используемых для определения истинности или ложности некоторой комбинации высказываний.
Исчисление высказываний очень гармонично сочетается с принципами работы компьютера и основными методами его программирования. Все аппаратные компоненты компьютера построены на логических микросхемах. Система представления информации в компьютере на самом нижнем уровне основана на понятии бита. Бит, имея всего два состояния (0 (ложно) и 1 (истинно)), естественным образом вписывается в исчисление высказываний.
2.2 МАНИПУЛЯЦИИ НАД БИТАМИ. СТРОКОВЫЕ ОПЕРАЦИИ Строковые операции называют цепочечными или операциями над цепочками байтов.
Строка-это цепочка байтов, для которой известен алгоритм определения ее длины. В языках программирования прописывают процедуру определения длины строки, а также вводят ограничение на то, какие байты могут содержаться в строке, а также в какой кодировке должны интерпретироваться строкисколько байтов кодирует символ, и какая таблица будет использоваться для сопоставления байтов и символов. В языке Си под строкой понимается последовательность байтов, заканчивающаяся байтом со значением 0.
Строковые операции работают с одним элементом строки: байтом, словом, двойным словом. Для того чтобы команда манипулировала последовательностью таких элементов, используются команды-префиксы:
REP-повторять, пока содержимое ECX не обратится в 0
REPE/REPZ-повторять пока равно/нуль. Данный префикс заставляет выполнять строковую команду до тех пор, пока содержимое ECX не обратится в 0
REPNE/REPZ-повторять пока не равно/не нуль. Данный префикс заставляет выполнять строковую команду до тех пор, пока содержимое ECX не обратится в 0
Строковые команды считают, что строкаисточник находится по адресу DS: ESI (для нас это просто ESI), а строка-приемникпо адреса ES: EDI (для нас просто EDI). Все строковые команды можно разделить на шесть групп:
1. Команды пересылки
MOVSB — копирование строки байтов.
MOVSW — копирование строки слов.
MOVSD — копирование строки двойных слов Возможен также формат MOVS приемник, источник-в этом случае ассемблер по типу операндов сам определяет, какую из трех форм команд следует выбрать. Команда копирует элемент строки из адреса, определяемого ESI, в адрес, определяемый EDI. После выполнения такой команды содержимое ESI и EDI увеличивается (флаг DF=0) или уменьшается (флаг DF=1) на размерах элемента строки
2. Команды сравнения
CMPSB — сравнение строк байтов.
CMPSW — сравнение строк слов.
CMPSD — сравнение строк двойных слов
3. Команды поиска (сканирования)
SCASB — сканирование строки байтов.
SCASW — сканирование строки слов
SCASD — сканирование строки двойных слов
4. Команды чтения из строки
LODSB — чтение байта из строки.
LODSW — чтение слова из строки.
LODSD — чтение двойного слова из строки.
Возможен также формат LODS источник-в этом случае ассемблер по типу операндов сам определяет, какую из трех форм команд следует выбрать. Команда осуществляет копирование из памяти, которая адресуется ESI, элемента в AL, AX или EAX. После выполнения такой команды содержимое EDI увеличивается на размер элемента строки
5. Команда записи в строку
STOSB — запись байта в строку.
Возможен также формат STOS приемник, источник-в этом случае ассемблер по типу операндов сам определяет, какую из трех форм команд следует выбрать. Команда осуществляет копирование в память, которая адресуется EDI, элемента из AL, AX или EAX. После выполнения такой команды содержимое EDI увеличивается на размер элемента строки.
Предикаты сравнения представляют собой функции, которые сравнивают две величины и возвращают однобитовый результат, равный 1, если проверяемое отношение истинно, и 0, если ложно. В этом разделе приводится несколько методов вычисления результата сравнения с размещением его в бите знака (эти методы не используют команд ветвления). Чтобы получить значение 1 или 0, используемое в некоторых языках (например, в C), после вычисления следует использовать команду сдвига вправо на 31 бит. Для получения результата -1/0, используемого в некоторых других языках (например, Basic), выполняется команда знакового сдвига вправо на 31 бит.
На таких машинах, как MIPS, Compaq Alpha, и нашей модели RISC есть команды сравнения, которые непосредственно вычисляют большинство отношений и помещают однобитовый результат 0/1 в регистр общего назначения.
3. ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ MASM
Компиляторы языка Assembler несколько отличаются друг от друга т. к не существует единого стандарта. Обычно для Intel совместимых процессоров используется синтаксис команд, указанный в документации от Intel и AMD (называемый Intel), сами же команды и их использование описаны в документации с официальных сайтов производителей процессоров. Но, кроме команд, в исходном коде программы также встречаются специальные символы и директивы, указывающие компилятору как нужно компилировать программу. Обычно, именно эти элементы программы отличаются для разных компиляторов. Сегментные регистры использовались для хранения адреса начала сегмента кода (CS — code segment), сегмента данных (DS — data segment) и сегмента стека (SS — stack segment). Регистры ES, FS и GS были добавлены позже. Существовало несколько моделей памяти, каждая из которых подразумевала выделение программе одного или нескольких сегментов кода и одного или нескольких сегментов данных: tiny, small, medium, compact, large и huge. Для команд языка ассемблера существовали определённые соглашения: адреса перехода сегментировались по регистру CS, обращения к данным сегментировались по регистру DS, а обращения к стеку — по регистру SS. Если программе выделялось несколько сегментов для кода или данных, то приходилось менять значения в регистрах CS и DS для обращения к другому сегменту. Существовали так называемые «ближние» и «дальние» переходы. Если команда, на которую надо совершить переход, находилась в том же сегменте, то для перехода достаточно было изменить только значение регистра IP.
Такой переход назывался ближним. Если же команда, на которую надо совершить переход, находилась в другом сегменте, то для перехода необходимо было изменить как значение регистра CS, так и значение регистра IP. Такой переход назывался дальним и осуществлялся дольше.
Флаги состояния (биты 0, 2, 4, 6, 7 и 11) отражают результат выполнения арифметических инструкций, таких как ADD, SUB, MUL, DIV.
Флаг переноса CF устанавливается при переносе из старшего значащего бита/заёме в старший значащий бит и показывает наличие переполнения в беззнаковой целочисленной арифметике. Также используется в длинной арифметике.
Флаг чётности PF устанавливается, если младший значащий байт результата содержит чётное число единичных битов. Изначально этот флаг был ориентирован на использование в коммуникационных программах:
при передаче данных по линиям связи для контроля мог также передаваться бит чётности и инструкции для проверки флага чётности облегчали проверку целостности данных.
Вспомогательный флаг переноса AF устанавливается при переносе из бита 3-го результата/заёме в 3-ий бит результата. Этот флаг ориентирован на использование в двоично-десятичной (binary coded decimal, BCD) арифметике.
Флаг нуля ZF устанавливается, если результат равен нулю.
Флаг знака SF равен значению старшего значащего бита результата, который является знаковым битом в знаковой арифметике.
Флаг переполнения OF устанавливается, если целочисленный результат слишком длинный для размещения в целевом операнде (регистре или ячейке памяти). Этот флаг показывает наличие переполнения в знаковой целочисленной арифметике.
3.1 ПАКЕТ MASM. СТРУКТУРА ПРОГРАММЫ В макроассемблер MASM включены директивы, упрощающие определение сегментов программы и, кроме того, предполагающие те же соглашения, которые используются в языках высокого уровня Microsoft. Упрощенные директивы определения сегментов генерируют необходимый код, указывая при этом атрибуты сегментов и порядок их расположения в памяти. Везде в этой книге мы будем использовать именно упрощенные директивы определения сегментов, наиболее важные из которых перечислены далее:
. DATA (. data) — определяет начало инициализированного сегмента данных с именем _DATA и при наличии предыдущего сегмента завершает его. Этой директиве должна предшествовать директива. MODEL.
Сегмент, определенный с атрибутом. DATA,
должен содержать только инициализированные данные, то есть имеющие начальные значения, например,
.data
Val1 DW 11
String1 DB «Text string»
byte1 DB?
. DATA? (. data?) — определяет сегмент данных, в котором располагаются неинициализированные данные. При наличии предыдущего сегмента новый сегмент завершает его. Неинициализированные данные могут объявляться в сегменте. DATA? при помощи оператора? Преимуществом директивы. DATA? является то, что при ее использовании уменьшается размер исполняемого файла и, кроме того, обеспечивается лучшая совместимость с другими языками. Этой директиве должна предшествовать директива. MODEL. Вот пример использования директивы. DATA?
.data?
. CONST (. const) — определяет начало сегмента данных, в котором определены константы. При наличии предыдущего сегмента новый сегмент завершает его. В целях совместимости с другими языками данные должны быть в формате, совместимом с принятыми в языках высокого уровня соглашениями. Сегмент, определенный директивой. CONST, имеет атрибут «только для чтения». Этой директиве должна предшествовать директива. MODEL.
. STACK (. stack) [размер] — определяет начало сегмента стека с указанным размером памяти, который должен быть выделен под область стека. Если параметр не указан, размер стека предполагается равным 1 Кбайт. При наличии предыдущего сегмента новый сегмент завершает его. Этой директиве должна предшествовать директива. MODEL.
. CODE (. code) [имя] — определяет сегмент программного кода и заканчивает предыдущий сегмент, если таковой имеется. Необязательный параметр имя замещает имя _TEXT, заданное по умолчанию. Если имя не определено, ассемблер создает сегмент с именем _TEXT для моделей памяти tiny, small, compact и flat или сегмент с именем имя модуля TEXT для моделей памяти medium, large и huge. Этой директиве должна предшествовать директива. MODEL, указывающая модель памяти, используемую программой.
. MODEL (. model) модель_памяти [, соглашение_о_вызовах] [, тип_ОС] [, параметр стека] — определяет модель памяти, используемую программой. Директива должна находиться перед любой из директив объявления сегментов. Она связывает определенным образом различные сегменты программы, определяемые ее параметрами tiny, small, compact, medium, large, huge или flat. Параметр модель памяти является обязательным.
Если разрабатывается процедура для включения в программу, написанную на языке высокого уровня, то должна быть указана та модель памяти, которая используется компилятором языка высокого уровня. Кроме того, модель памяти должна соответствовать режиму работы (типу) процессора. Это имеет значение для плоской модели памяти, которую можно применять только в режимах .386, .486, .586, .686. Модель памяти определяет, какой тип адресации данных и команд поддерживает программа (near или far). Это имеет смысл для команд перехода, вызовов и возврата из процедур.
3.2 СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ ЯЗЫКА АССЕМБЛЕР С ДРУГИМИ ЯЗЫКАМИ ПРОГРАММИРОВАНИЯ Языком программирования первого поколения считается машинный код. Машинный код состоит из инструкций, которые компьютер (процессор) может выполнить (а также данных, которые принадлежат этим инструкциям). Программируя на машинном коде, программист должен был писать свою программу в двоичном коде, так что бы процессор мог это понять и исполнить. В сущности, такое программирование требует хорошего знания и понимания аппаратного обеспечения, потому что в процессе программирования необходимо знать, что процессор может сделать, где находятся устройства ввода-вывода (англ. I/OInput-Output), а также как с ними необходимо общаться и сколько времени будет потрачено на ту или иную операцию. Таким образом, машинный код очень крепко связан с аппаратным обеспечением, на котором соответствующая программа будет работать. На сегодняшний день машинный код из компьютеров никуда не исчез, все действия на низком уровне (уровне аппаратного обеспечения) происходят до сих пор в машинном коде, т. е. на каком бы языке программирования не была написана программа в, конечном итоге она преобразуется в понятный аппаратному обеспечению машинный код.
Языками второго поколения считаются языки Ассемблера. В случае машинного кода всё программирование происходило в двоичном коде, и в связи с этим его чтение и отладка были очень трудоёмкими. При программировании на языке Ассемблера же инструкции представлены человеку в понятной форме.
В процедурных языках программирования на языке программирования описываются действия и порядок их выполнения, а также эти действия разбиваются на группы (подпрограммы). Из процедур в свою очередь формируются структуры кода, которые можно повторно использовать. В функциональных языках программирования всё решение описывается при помощи функций.
В объектно-ориентированных языках программирования решение проблемы производится при помощи функций и структур данных, описанных в классах (англ. Class). Из каждого класса можно создать объект, у которого будет набор свойств и/или методов.
Свойства — это значения, которые объект может содержать, и которые могут влиять на поведение объекта. Например, на основе класса «консольное окно» можно создать объект «консоль1», который будет виден пользователю, как одно консольное окно. У этого объекта присутствуют некоторые свойства (показано, скрыто, ширина, высота, цвет текста в консольном окне, цвет фона и т. д.), изменяя эти свойства можно в данном конкретном случае менять внешний вид объекта.
3.3 КОМАНДЫ УПРАВЛЕНИЯ ЦИКЛАМИ. КОМАНДЫ РАБОТЫ СО СТРОКАМИ. ВЫВОД НА ЭКРАН В ТЕКСТОВОМ РЕЖИМЕ Нормальное завершение цикла связано с удовлетворением в процессе его выполнения некоторого условия: в циклах while и for — с ложностью, а в цикле until, наоборот, с истинностью выражения-условия, тогда как в цикле foreach — с завершением перебора всех элементов списка. Иногда возникает необходимость либо завершить выполнение всего цикла, либо прервать выполнение операторов цикла на каком-то шаге и перейти на очередную итерацию, либо повторить выполнение операторов блока цикла, не переходя на выполнение очередной итерации. Для подобных целей в языке Perl предусмотрены три команды: last, next и redo, которые называются командами управления циклом.
Они изменяют естественный порядок выполнения циклов, принятый по умолчанию в языке, и передают управление в определенное место программы, завершая выполнение цикла (last), переходя на следующую итерацию цикла (next) или повторяя выполнение операторов тела цикла при тех же значениях переменных цикла (redo). Место перехода задается меткой, которая определена в языке как идентификатор, завершающийся символом двоеточие (:). Если мы посмотрим на синтаксис каждого из операторов цикла, то обратим внимание, что все они могут быть помечены. В командах управления выполнением цикла задаются не сами метки, а их идентификаторы.
С точки зрения основных понятий языка Perl, команды управления циклом не являются ни операциями, ни операторами — они не выполняют никаких действий над данными программы и в то же время не определены как операторы.
Но если каждую из них завершить точкой с запятой, то интерпретатор Perl такую конструкцию будет рассматривать как простой оператор.
Поэтому их можно мыслить, как некие «унарные операции», результатом вычисления которых является изменение последовательности выполнения операторов, (Мы специально написали «унарные операции» в кавычках, так как операция осуществляет некоторое действие над данными, но никак не над метками.) Более того, команды управления циклом можно использовать в любом выражении Perl. Заметим, однако, что использовать их следует в таких выражениях, где это имеет смысл, например, в выражениях с операцией «запятая»:
Open (INPUT FILE, $file)
Alternatively, warn («Невозможно открыть $file: $! n»), next FILE;
Приведенный оператор может являться частью программы, которая в цикле последовательно открывает и обрабатывает файлы. Команда next инициирует очередную итерацию цикла с меткой FILE, если не удалось открыть файл в текущей итерации. Обратите внимание, что она используется в качестве операнда операции «запятая». В таком контексте эта команда имеет смысл. Следующий оператор является синтаксически правильным, но использование в нем команды redo не имеет никакого смысла:
Print «qu-qu», 5 * redo OUT, «hi-hin» ;
Результатом выполнения этого оператора будет повторение вычислений операторов цикла с меткой OUT, то есть простое выполнение команды redo OUT.
Относительно команд управления циклом следует сказать, что к ним можно применять модификаторы простых операторов, так как употребленные самостоятельно с завершающей точкой с запятой они рассматриваются как простые операторы
next if $a == 2;
ЗАКЛЮЧЕНИЕ
Актуальность прохождения данной технологической практики заключается в закреплении и усовершенствовании навыков по профессии программиста.
Практика началась с вводного инструктажа, изучения требований определённого рабочего места, ознакомления с безопасностью работы.
Последующие дни практики были посвящены изучению простых программ, такие как просматривать анимацию, текстовые редактор, математические задачи, назначения и принципы построения уникальных баз данных. Исследовалось использование языка программирования Ассемблер.
В период прохождения практике студенты ведут дневники, в которые они ежедневно вносят записи о проделанной работе свои наблюдения и результаты изучения технологического процесса.
Трудно найти какую-либо сферу жизнедеятельности человека, в которой не применяется цифровая и вычислительная техника. По значимости для прогресса науки и техники появление ЭВМ настолько велико, что это явление можно поставить в один ряд с началом освоения космоса и практическим применением атомной энергии. Подготовка специалистов в области цифровой и микропроцессорной техники является важной задачей. Изучение материала можно вести шагая от общего к частному — от микропроцессорной системы к ее компонентам (базовым логическим элементам), либо от частного к общему При работе с компонентами была создана программа, на которой расположили все выполненные задачи.
Таким образом, цели, поставленные в период прохождения практики, были достигнуты. В данном отчёте предоставлен программный комплекс.
На практике, было много трудностей, но успешно их преодолевали.
ЛИТЕРАТУРA
1. Алексенко, А. Г. Основы микросхемотехники / Алексенко А. Г. — 3-е изд., перераб. и доп. — М.: БИНОМ. Лаборатория знаний, 2009. — 448 с.
2. Бабич, Н. П. Основы цифровой схемотехники: Учебное пособие. — М.: Изд. Дом «Додэка-XXI», К.: «МК-Пресс», 2007. — 480 с., ил.
3. Калабеков, Б. А. Цифровые устройства и микропроцессорные системы / Б. А. Калабеков. — М.: Горячая линия — Телеком. 2007. — 336 с.
4. Келим, Ю. М. Вычислительная техника: учеб. пособие для студентов сред. проф. образования / Ю. М. Келим. — 4-е изд., перераб. и доп. — М.: Изд. Центр «Академия», 2008. — 368 с.
5. Коваленко, А. А. Основы микроэлектроники: учеб пособие для студентов высш. учеб. заведений / А. А. Коваленко, М. Д. Петропавловский. — 3-е изд., стер. — М.: Изд. центр «Академия», 2010. — 240 с.
6. Кузин, А. В. Микропроцессорная техника / А. В. Кузин, М. А. Жаворонков. — 2-е изд. — М.: Изд центр «Академия», 2006. — 304 с.
7. Мышляева, И. М. Цифровая схемотехника: Учебник для сред. проф. Образования / И. М. Мышляева. — М.: Изд. цент «Академия», 2005. — 400 с