Читайте также:
|
|
Программным обеспечением принято называть набор различных программ, предназначенных для определенного микропроцессора, как, впрочем, и для любого компьютера или ЭВМ. Программы, разработанные и используемые для специальных целей, например программы управления технологическим оборудованием, сбора информации о ходе производственного процесса, называют прикладными (целевыми; пользовательскими) программами. Разработка таких программ значительно облегчается при наличии в составе системы вспомогательных средств — системного программного обеспечения или. операционной системы.
Квалифицированный пользователь может сам разработать системное программное обеспечение для создания и отлаживания своих программ. Однако большинство пользователей вынуждено ориентироваться только на готовое программное обеспечение, предоставляемое производителями микропроцессоров.
Для создания программы управления технологическими процессами может быть использован один из следующих способов:
1) программирование непосредственно в машинных кодах;
2) символическое кодирование;
3) применение машинно-ориентированного формализованного языка;
4) применение проблемно- или процедурно-ориентированных алгоритмических языков высокого уровня.
Эти способы требуют различных по сложности вспомогательных средств для разработки программ.
Первым и единственным безусловно необходимым средством, обеспечивающим программирование микропроцессоров, является система машинных команд. Совокупность машинных команд образует базовый машинный язык данного микропроцессора. Разработчик системы управления может оперировать мнемокодами и символическими адресами, но затем они должны быть переведены в двоичные числа, загружаемые в память микропроцессорной системы. Мнемокоды совместно с директивами, используемыми только при трансляции программы, образуют машинно-ориентированный язык, который называют языком ассемблера или просто ассемблером. Программы, написанные на ассемблере, могут непосредственно транслироваться в машинные коды. Трансляция может выполняться вручную или на ЭВМ с системным программным обеспечением. Программа, которая транслирует написанный на ассемблере текст в машинные коды, также называется ассемблером.
Характерной особенностью. микропроцессорных систем, связанной с ограниченной емкостью их памяти и небольшим числом устройств ввода-вывода, является отсутствие собственного системного программного обеспечения для машинной разработки прикладных программ. В этом случае для разработки прикладных программ может использоваться не сама микропроцессорная система, а какая-то большая ЭВМ с обширной памятью и развитым программным обеспечением. Такой подход называют кросс-программным обеспечением.
Ранее, при рассмотрении иллюстративного микропроцессора, все команды по функциональному признаку были разделены на четыре группы: перемещения данных; обработки данных; управления программой; ввода-вывода и специальные. Теперь, при рассмотрении реального микропроцессора, можно сохранить это деление, но, так как общее число команд значительно увеличилось, внутри этих групп надо сделать дальнейшее деление.
Описывая систему команд и используемой мнемоники, необходимо учитывать возможности конкретного разговорного языка для образования допустимых сокращений. Конечно, тем, кто впервые сталкивается с микропроцессорами и их программированием, хочется, чтобы все мнемонические сокращения были сделаны на основе их родного языка, а не какого-нибудь иностранного. Но, например, как сократить команды ВВОД и ВЫВОД(аналогично ВХОД и ВЫХОД)? По-английски они будут IN-OUT, т. е. сразу достаточно краткими, и различаются настолько, что могут быть сокращены до одной буквы (I/O). По-русски такое сокращение, к сожалению, совершенно невозможно.
Слову ВЫВОД (ВЫХОД) особенно не повезло, так как в командах арифметических действий и управления программой встречаются сокращения, отличающиеся только одной буквой, например, ВЫЧесть, ВЫПолнить, ВЫЗвать и др. Разница в одной букве для трех- или четырехбуквенных сокращений очень часто приводит к досадным ошибкам и трудно обнаруживаемым опечаткам. В этом заключается одна из причин того, почему программисты часто предпочитают пользоваться в качестве мнемокодов сокращениями английских терминов, хотя в начальный период это может затруднить запоминание.
Но основная причина широкого использования английского языка для мнемонических сокращений машинных команд связана с наличием готового математического обеспечения конкретного микропроцессора, а также возможностью использования математического обеспечения, подготовленного для других систем, в частности мини-ЭВМ.
Проблема использования мнемокодов на английском языке фактически проще, чем она кажется с первого взгляда: для того чтобы программировать, иностранный язык изучать не надо, достаточно знать лишь несколько терминов, одинаково часто встречающихся в командах большинства микропроцессоров и микро-ЭВМ. Будем считать, что IN и OUT читателю уже известны, а остальные термины вместе с их переводом будут приводиться по ходу рассмотрения.
Описывая в дальнейшем систему команд, будем придерживаться следующего порядка. Для каждой команды приводится ее функция, дается перевод на английский язык и следующее из него мнемоническое сокращение. Далее указывается число байт команды и приводятся ее восьмеричный и объектный (двоичный) коды. Как правило, для 8-разрядного микропроцессора К580 адреса и коды команд принято давать в шестнадцатеричной системе кодирования; в частности, именно в таком виде выдается листинг (распечатка) программы после машинной трансляции. Но, как будет видно из дальнейшего, восьмеричная система дает возможность представить все команды в логически стройном, компактном и легко запоминаемом виде.
В последних столбцах дается число состояний, в которых находится центральный процессор при выполнении данной команды. Иными словами, дается число требуемых машинных тактов и тем самым время выполнения каждой команды.
В микропроцессоре К580 команды межрегистровых передач являются двухадресными: в них приходится адресовать регистр — источник и регистр — получатель информации.
Регистровая мода. Основная команда в этой группе — это одно-байтовая команда перемещения данных из одного регистра в другой. В зоне операнда должны быть указаны два адреса: на первом месте — куда помешается информация, т. е. адрес получателя (приемника); на втором месте — откуда берутся данные, т. е. адрес источника. Можно сказать, что в команде указывается место назначения, в которое должны прибыть перемещаемые данные в результате операции. По-английски такое место называют destination, поэтому в сокращении команды эта часть обозначается как dst или ddd, либо D. Источник по-английски будет source, поэтому в коде операции его обозначают sre, sss или S (табл. 6.1).
При операции перемещения данных содержимое источника сохраняется неизменным, а начальное содержимое приемника заменяется результатом операции.
В мнемонике команды указываются условные обозначения РОН, в которых находятся приемник и источник, между собой эти обозначения обязательно разделяются запятой. Например, MOV С, В означает «перенести содержимое регистра В в регистр С»; содержимое регистра В остается без изменения. Когда команда транслируется в объектный код, условные обозначения регистров заменяются их двоичными номерами. Все регистры общего назначения, память и аккумулятор имеют постоянные номера. Когда операндами являются обозначения регистров, то, поскольку номера регистров входят в состав кода операции, одному и тому же мнемокоду соответствуют различные машинные коды. Например, машинный код операции MOV С, В будет 01001000 (48 HEX).
Для команды MOV в восьмеричном представлении первая триада, точнее два первых' бита, которые должны быть дополнены нулем, будет кодом операции, вторая триада — номером регистра-получателя, а третья — номером регистра-источника.
Команда перемещения данных является самой «богатой» по числу различных вариантов. Если перебрать в зоне операнда все возможные комбинации регистров, то в перечне машинных команд будет занято 64 позиции. Правда, хотя все они допустимы, часть их окажется по существу бесполезной. Например, команда MOV A, A (01111I11) предписывает переслать содержимое аккумулятора обратно в аккумулятор.
Косвенно-регистровая мода. Если данные перемещаются в регистр из основной памяти или, наоборот, переносятся в память из регистра, то используется косвенно-регистровая мода, при которой номер регистра (источника или приемника) указывается в соответствии с табл. 6.2, а память в команде записывается кодом 110. При этом в качестве 16-разрядного адреса ячейки памяти используются данные, находящиеся в паре регистров Н и L. Например, MOV M, В — поместить содержимое регистра В в ячейку памяти, адрес которой находится в регистрах Н и L. Восьмеричный код этой операции будет 160, а машинный — 01110000 (70 HEX). Команда MOV В, М аналогична предыдущей, но перемещение информации происходит в противоположном направлении: из памяти (по адресу в регистрах Н и L) в регистр-приемник В.
Непосредственная адресация. Команды перемещения данных могут иметь непосредственное представление операнда и косвенную адресацию. Непосредственная адресация по-английски будет Immediate Addressing, поэтому в мнемонике команд она указывается буквой I, стоящей на последнем месте. Эти команды имеют двухбайтный формат, в результате их выполнения содержимое второго слова команды помещается в регистр, номер которого указан в поле операнда первого слова команды.
Очевидно, что при использовании любых адресных мод все необходимые данные должны быть предварительно помещены в соответствующие регистры. Для этого применяются относящиеся к этой же группе команды передачи содержимого ячейки памяти во внутренние регистры. Обычно такие операции выполняются по командам загрузки. Противоположные действия, т. е. передачу содержимого внутреннего регистра в память, называют командами запоминания, или сохранения, данных.
Команды загрузки аккумулятора и запоминания данных. По трех-байтной команде LDA в аккумулятор загружается содержимое ячейки памяти, адресуемой вторым и третьим байтами команды, а по команде запоминания STA производится противоположная передача (табл. 6.4), Все такие команды могут быть с прямой, непосредственной и косвенной адресацией.
При прямой адресации команды имеют трехбайтный формат и предписывают в случае запоминания поместить содержимое аккумулятора в ячейку памяти, адрес которой указан вторым и третьим байтами, а при загрузке, наоборот, поместить в аккумулятор данные из ячейки памяти, адресуемой аналогично.
При непосредственном представлении возможна только загрузка данных.
При косвенной адресации команды имеют однобайтный формат. При запоминании они вызывают запись содержимого аккумулятора в ячейку ОЗУ, 16-разрядный адрес которой указывается парой регистров. Это может быть не только пара Н и L, но В и С либо D И Е. При загрузке адресация делается аналогично, но данные записываются в аккумулятор. Совместное использование двух регистров по-английски будет Extended Addressing, поэтому в мнемонических сокращениях этих команд добавляется символ X. Адресация производится в соответствии с номерами регистров, но указывается только один из них, расположенный в одной строке: в командах запоминания данных — левый, а в командах загрузки — правый.
Команды загрузки указателей памяти и запоминания данных. Для загрузки начальных значений во внутренние указатели памяти (инициализации) применяют трехбайтную команду с непосредственным представлением LXIrp, где гр означает регистровые пары ВС, DE, HL или указатель стека SP — Stack Pointer.
Для загрузки основного указателя памяти — регистров Н и L — из двух смежных ячеек памяти применяется команда LHLD — Load HL Direct. Запоминание содержимого регистровой пары Н и L в двух следующих друг за другом ячейках памяти осуществляется по команде SHLD — Store HL Direct. Обе эти команды трехбайтные, во втором и третьем байтах указывается полный 16-разрядный адрес ячейки, из которой загружается или в которую заносится содержимое регистра L (младшего байта). Адрес содержимого регистра Н (старшего байта) получается путем прибавления 1 к значению второго и третьего байтов команды.
Команды межрегистрового обмена. Особенностью микропроцессора К580 являются однобайтные команды передачи 16-битных операндов. Имеется специальная команда XCHG (сокращение английского слова Exshange), производящая обмен содержимым регистров DE и HL:
(Н) ч—>- (D), (L) «-+ (Е).
В ряде случаев очень удобной оказывается специальная однобайтная команда XTHL (Exchange HL):
она выполняет обмен содержимым регистров HL и двух верхних ячеек стека, т. е. последних, загруженных в стек данных. Содержимое указателя стека при выполнении команды XTHL не изменяется. Кстати сказать, команда XTHL — самая длинная в системе команд микропроцессора К580, для ее выполнения требуется 18 машинных тактов.
Еще две команды SPHL и PCHL передают содержание регистровой пары HL соответственно в указатель стека и программный счетчик. Здесь, как и ранее, на первом месте стоит получатель информации (приемник), а на втором — источник данных. Сводка команд обмена приведена в табл. 6.6.
Команды операций со стеком. Для установки указателя стека на начальное значение используется упомянутая ранее команда
Таблица 6.6. Команды межрегистрового обмена
Мнемо- | Число | Объектный | Число | |||
Функция | Перевод | ника | байт | Q-код | код | тактов |
Обменять содержи- | Exchan- | XCHG | ||||
мое HL на со- | ge | |||||
держимое DE | ||||||
Обменять содержи- | Exchan- | XTHL | ||||
мое HL на содер- | ge HL | |||||
жимое стека | ||||||
Переслать содер- | SP HL | SPHL | ||||
жимое HL в стек | ||||||
Переслать содер- | PC HL | PCHL | ||||
жимое HL в счет- | ||||||
чик команд | ||||||
Занести в стек | Push | PUSH | 3S5 | llssslOl | ||
Извлечь из стека | Pull up | POP | 3D1 | lldddOOl |
LXI SP. Благодаря такой установке в качестве стека может быть использована любая область оперативной памяти микропроцессорной системы.
Основными командами являются PUSH — занести (буквально «втолкнуть») в стек и POP (Pull up) — извлечь (вытянуть) из стека. Эти команды всегда оперируют с регистровыми парами, указанными в поле операнда команды. При выполнении команды PUSH в ячейку памяти с адресом (SP) — 1 записывается содержимое восьми старших разрядов, а в ячейку с адресом (SP) — 2 — восьми младших разрядов регистровой пары. Содержимое указателя стека уменьшится на 2, так как стек «растет вверх», в область меньших адресов. Когда выполняется команда POP rp, содержимое верхушки стека передается в младшие разряды регистровой пары, а содержимое следующей ячейки стека — в старшие разряды той же регистровой пары.
Для правильной работы стека команды PUSH и POP обязательно должны быть парными. Соблюдение этого принципа ложится полностью на программиста, так как процедуры загрузки в стек и извлечения из стека выполняются микропроцессором не автоматически, а должны быть организованы программно.
Исследование экономических операций
Исследование экономических операций как самостоятельное научное направление возникло из потребностей наилучшей организации экономических операций, а также прогнозирования их результата при принятии руководством различных решений. Однако с течением времени стало очевидно, что подобные организационные задачи (согласования, упорядочения, распределения и др.) возникают и в других, самых различных сферах человеческой деятельности и имеют, несмотря, на их качественное различие, сходные черты.
За выдающийся вклад в разработку теории оптимального использования ресурсов в экономике академику Л. В. Канторовичу вместе с профессором Т. Купмансом (США) в 1975 году присвоена Нобелевская премия по экономике.
Под операцией понимается система действий, объединенных общим замыслом и направленных на достижение определенной цели.
Исследование операций - это научный метод, дающий в распоряжение руководителя количественные основания для принятия им решений, связанных с организацией и осуществлением операции.
Линейное программирование – направление математики, изучающее методы решения экстремальных задач, которые характеризуются линейной зависимостью между переменными и линейным критерием оптимальности.
Несколько слов о самом термине линейное программирование. Он требует правильного понимания. В данном случае программирование - это, конечно, не составление программ для ЭВМ. Программирование здесь должно интерпретироваться как планирование, формирование планов, разработка программы действий.
К математическим задачам линейного программирования относят исследования конкретных производственно-хозяйственных ситуаций, которые в том или ином виде интерпретируются как задачи об оптимальном использовании ограниченных ресурсов.
Круг задач, решаемых при помощи методов линейного программирования достаточно широк. Это, например:
- задача об оптимальном использовании ресурсов при производственном планировании;
- задача о смесях (планирование состава продукции);
- задача о нахождении оптимальной комбинации различных видов продукции для хранения на складах (управление товарно-материальными запасами или "задача о рюкзаке");
- транспортные задачи (анализ размещения предприятия, перемещение грузов).
Линейное программирование – наиболее разработанный и широко применяемый раздел математического программирования (кроме того, сюда относят: целочисленное, динамическое, нелинейное, параметрическое программирование). Это объясняется следующим:
- математические модели большого числа экономических задач линейны относительно искомых переменных;
- данный тип задач в настоящее время наиболее изучен. Для него разработаны специальные методы, с помощью которых эти задачи решаются, и соответствующие программы для ЭВМ;
- многие задачи линейного программирования, будучи решенными, нашли широкое применение;
- некоторые задачи, которые в первоначальной формулировке не являются линейными, после ряда дополнительных ограничений и допущений могут стать линейными или могут быть приведены к такой форме, что их можно решать методами линейного программирования.
Экономико-математическая модель любой задачи линейного программирования включает: целевую функцию, оптимальное значение которой (максимум или минимум) требуется отыскать; ограничения в виде системы линейных уравнений или неравенств; требование неотрицательности переменных.
Дата добавления: 2014-12-15; просмотров: 105 | Поможем написать вашу работу | Нарушение авторских прав |