Программа как набор команд

Содержание

Очередная статья цикла должна была более подробно рассказывать о процессоре и памяти PIC, так как в предыдущей я уделил внимание STM8. Но в процессе подготовки статьи я столкнулся с необходимостью все таки сначала рассказать еще о двух понятиях — RISC и CISC, которым хотел уделить внимание позже, во время рассказа о системах команд процессоров.

Без этого мне будет трудно рассказать вам, почему 8-битные PIC устроены именно так, сложно и не похоже на другие микроконтроллеры (во всяком случае, на первый взгляд). А включение рассказа о RISC в статью о PIC делает ее слишком большой и сложной. Да и сама эта тема общая, не связанная с конкретным семейством микроконтроллеров. Так и появилась эта статья.

Сегодня нам понадобятся знания, которые мы получили ранее из статей:

  • Микроконтроллеры для начинающих. Часть 2. Процессор микроконтроллера
  • Микроконтроллеры для начинающих. Часть 3. Процессор микроконтроллера. Тактирование и синхронизация
  • Микроконтроллеры для начинающих. Часть 4. Очень кратко о микропрограммах
  • Микроконтроллеры для начинающих. Часть 6. Линейная и страничная (банковая) организация памяти
  • Микроконтроллеры для начинающих. Часть 8. Режимы адресации операндов

Что такое RISC и CISC

Эти аббревиатуры вы, скорее всего, уже встречали. RISС это Reduced Instruction Set Computer или, по русски, компьютер с усеченным набором команд. CISC это Complex Instruction Set Computer или, по русски компьютер с комплексным набором команд.

Выбор целевой системы вашей команды в программе проектов

Эти термины появились довольно давно и отражают два разных, в некоторой степени, два противоположных подхода к построению ЭВМ. С одной стороны максимально универсальная ЭВМ предлагающая широчайший спектр возможностей в стремлении угодить самым разным потребностям пользователей. С другой стороны минималистичная, порой до аскетизма, ЭВМ, но от этого не менее универсальная, хоть кажущаяся сначала неудобной и ограниченной.

Что бы разобраться нам, как всегда, нужно немного (совсем чуть чуть!) заглянуть в историю и посмотреть на путь развития ЭВМ с момента их появления и до наших дней.

От простого к сложному

Жизнь на планете Земля зародилась в виде простейших клеток (если не смотреть совсем уж в глубь веков и не рассматривать появления сложных органических молекул). В процессе эволюции клетки объединялись во все более сложные структуры и организмы, что в конечном итоге и привело к появлению человека наделенного разумом.

Эволюция ЭВМ проходила похожим на биологическую эволюцию образом, то есть, от простого к сложному. Развитие логических схем и простейших автоматов, вместе с развитием математического аппарата, привело к появлению первых ЭВМ предназначенных в основном для решения вычислительных задач.

Но довольно скоро выяснилось, что ЭВМ могут успешно решать не только вычислительные задачи и началась гонка технологий. Производители ЭВМ, с одной стороны, выясняли запросы пользователей и старались их удовлетворять при разработке новых машин. А с другой, обращались в академические круги с запросом»а что еще ЭВМ могут»?

⚙ Расширь возможности своей Windows — 15 полезных команд сисадмина

Появилось множество различных архитектур ЭВМ. Некоторые так и остались в рамках институтов, некоторые пошли в серию. Далеко не все были удачными, но общая тенденция заключалась в усложнении конструкции и расширении возможностей. Появлялись новые команды и режимы адресации, ассоциативная память, высокоуровневые примитивы, и так далее.

ЭВМ становились не просто сложнее, но и дороже, не смотря на постоянное снижение стоимости производства. Для сохранения быстродействия ЭВМ в целом требовалось все более высокое быстродействие отдельных компонентов. Технологии развивались, что стимулировало и добавление все новых возможностей к уже имеющимся.

Анализируй это

Бурное развитие и ощущение «мы все можем» не отменяло анализа результатов реального применения ЭВМ. И вот тут выяснились интересные подробности. Оказалось, что большинство программ используют лишь малую часть доступных команд. При этом используемый набор команд различался для разных областей применения ЭВМ.

Но в целом можно было выделить команды используемые всегда, команды используемые многими программами (часто используемые), и команды используемые только в некоторых случаях. Это и послужило основой для появления RISC.

От сложного к простому

Было предложено исключить из системы команд ЭВМ редко используемые команды и упростить оставшиеся. Это позволит упростить схемотехнику и снизить стоимость ЭВМ, но позволит и повысить быстродействие.

Однако, RISC архитектура это не только сокращенный набор команд, как часто считается исходя из дословного понимания названия. Это подход к построению. ЭВМ в целом, включая и адресацию, и архитектуру памяти.

А вот теперь мы можем перейти к более подробному рассмотрению технических аспектов и их реализации на практике.

CISC

Наиболее известным современным представителем CISC подхода является архитектура процессоров 80×86 используемая в настольных ПК и ноутбуках. Это универсальные процессоры обладающие широчайшими возможностями в организации и управлении памятью, богатейшей системой команд, развитыми режимами адресации операндов.

И это действительно сложные процессоры, и дорогие. Причем такая универсальность действительно часто востребована, не зря же это одна из самых популярных архитектур.

Но цикл статей о микроконтроллерах, поэтому я ограничусь лишь таким вот, кратким, упоминанием об универсальных процессорах и CISC архитектуре.

RISC

А вот тут я буду рассматривать вопрос гораздо более подробно, так как подавляющее большинство 8-битных микроконтроллеров используют RISC архитектуру (да, и Гарвардскую, при этом).

И так, основная идея RISC подхода это упрощение. Сокращение количества доступных команд дает возможность уменьшить количество разрядов необходимых для указания кода операции. Сокращение количества операндов в команде позволяет еще больше уменьшить длину кода команды. Тот же эффект дает и исключение сложных режимов адресации. А значит, мы можем уменьшить разрядность шины данных памяти и сократить количество циклов для получения команды и данных.

Кроме того, уменьшение количества команд позволяет упростить их декодирование. А упрощение выполняемых командами операций не только ускорит их выполнение, но и может позволить отказаться от микропрограммной реализации процессора. Все вместе это позволит повысить быстродействие и сделать выполнение команд более предсказуемым по времени.

Убираем лишние команды

Как я уже говорил, не все команды одинаково востребованы. Давайте более подробно разберем это на примере команд пересылки данных. Чаще всего команды пересылки данных имеют аббревиатуру MOV.

В процессорах 80х86 однако имеются не только команды пересылки данных общего назначения, но и специфичные для работы со строками. Я говорю о командах MOVS, LODS, STOS. От обычной команды MOV они, по большому счету, отличаются лишь использованием специальных регистров и автоматическим увеличением указателей, для команд MOVS. А LODS и STOS задают одним из операндов регистр аккумулятор.

Значит, эти команды можно без особого ущерба просто исключить и пользоваться универсальной MOV. Кстати, эти команды работы со строками действительно используются гораздо реже обычной команды пересылки.

Читайте также:
Что значит программа ultimate

У процессоров 80х86 есть отдельные команды для установки некоторых флагов состояния процессора, например, команда, STC для установки флага переноса. Мы можем исключить эту команду и использовать вместо нее универсальные команды установки/сброса заданного бита в байте/слове. Или пойти еще дальше и оставить только побитовые команды OR, AND, XOR.

Подобным образом можно сократить количество доступных команд очень сильно. Так в BaseLine PIC есть всего 33 команды, в MidRange 35 команд, в PIC18 порядка 70 команд. В STM8 есть порядка 80 команд. Это гораздо меньше, чем у 80х86.

Вводим аккумуляторную архитектуру и делаем команды одноадресными

Следующим шагом по уменьшению длины команды является отказ от большого количества операндов. Существуют экстремальные архитектуры, где вообще нет возможности задать операнды явно (за редким исключением). Примером может служить основанный на стеке процессор, где все операции выполняются над двумя элементами лежащими на вершине стека. Однако в реальной жизни такой подход не нашел широкого применения.

А вот использование аккумулятора стало весьма распространенным. При этом подразумевается, что один из операндов обязательно находится в аккумуляторе, а второй может находиться в памяти или прямо в коде команды. И результат операции чаще всего размещается в аккумуляторе. Таким образом, большинство команд становится одноадресными.

Влияние изменений и сокращений в наборе команд на память программ

До описания систем команд мы еще не добрались, этот разговор еще впереди. А вот влияние на память программ и работу с ней оценить уже можем.

В качестве примера, далеко забегая вперед, я приведу формат команд для MidRange PIC

Формат команд процессора 8 битных PIC Microchip семейства MidRange

Нас в данной иллюстрации интересует лишь поле OPCODE и общее количество бит занимаемое командами. А общая длина команды всего 14 бит (для BaseLine 12 бит). При этом поле операции занимает 3, 4 или 6 разрядов. То есть, менее байта.

И для считывания полной команды из памяти программ нам нужна 14-битная шина данных. Рассказ о памяти PIC еще впереди, но результаты оптимизации и использования RISC подхода у Microchip впечатляют. Менее двух байт на команду! У AVR Atmel команды занимают 2 байта, а у STM8 до 5 байт.

Внимательный читатель может заметить, «но позвольте, ведь мы теперь не всегда можем обойтись одной командой, мы иногда вынуждены использовать несколько команд для получения нужного результата, а значит, требуемый объем памяти будет больше и вся эта экономия ничего не даст!»

А вот это не совсем так. Да, длина программы в командах возрастет. Но и команды более короткие. Да и наиболее часто используемые команды сохранились. В результате общее количество памяти, в единицах хранения, занимаемое программой останется примерно тем же.

Но может и несколько увеличиться или уменьшиться.

Я не оговорился сказав «в единицах хранения». Дело в том, что некоторые процессоры, адресуют память программ не побайтно, а пословно.

Исключение сложных методов адресации

Это следующих этап оптимизации, который влияет не только (и не столько) на длину команды, но и на время ее выполнения и на сложность аппаратуры процессора.

Давайте вспомним косвенную индексную адресацию в STM8 из предыдущей статьи

Косвенная индексная адресация в STM8 из 9 статьи цикла. Иллюстрация моя

Что бы получить собственно данные нам нужно:

  1. Загрузить в процессор содержимое ячейки, адрес которой задан косвенной частью адресации операнда. В данном случае это ячейка с адресом strtbl+2
  2. Сложить полученное значение и содержимое индексного регистра (индексная часть адресации операнда)
  3. Загрузить в процессор собственно обрабатываемые командой данные из ячейки памяти с адресом полученным на шаге 2

Такая вот многоэтапная процедура. Да, она дает большую гибкость, но всегда ли такая гибкость нужна? На помощь опять приходит статистика реального использования доступа к данным в реальных программах.

Выяснилось, что программы часто обрабатывают большие объемы данных последовательно, блоками. Большое количество отдельных простых переменных, разбросанное по всей памяти данных, не влияет на ситуацию, поскольку к ним можно получить доступ с помощью прямой или косвенной адресации.

Получается, что большинство программ просто вычисляют адрес первого элемента данных а затем, в ходе обработки данных, могут просто увеличивать (или уменьшать) этот адрес для последовательного доступа к блоку данных. А значит, нам достаточно прямой и косвенной адресации! Можно обойтись без индексной со смещением и косвенной индексной.

А это не только позволит сделать процессор проще, но и может ускорить обработку. Да, программа становится немного менее наглядной на ассемблере, но ведь сейчас большинство пишут на языках высокого уровня, а там такое упрощение режимов адресации будет простор не заметно.

Более гибкая и простая адресация в командах перехода

Программа должна иметь возможность передать управление в любую доступную точку памяти программ. Этот постулат сомнению не подвергается.

Но упрямая статистика на основании реальных программ свидетельствует, что большинство переходов выполняются в пределах ограниченного пространства памяти данных. Речь идет о командах условных переходов, которых в любой программе больше всего.

А значит, нет необходимости в командах условных переходов задавать полный адрес памяти программ. Вполне достаточно ограничиться короткими переходами относительно текущего значения счетчика команд. Как вы помните, в STM8 есть относительная адресация в командах перехода.

Но ведь существует еще и возможность перехода по адресу, который хранится в некоторой ячейке памяти. Я говорю о косвенной адресации в командах перехода. Но эту возможность можно исключить, так как она применяется гораздо реже прямой и относительной. Кроме того, всегда можно использовать команду пересылки (для косвенного перехода) или сложения (для косвенного относительного перехода) и поместить в регистр PC нужный адрес, что и будет собственно переходом.

Итоговый результат оптимизаций и сокращений

Я уже показал, как RISC архитектура влияет на размер памяти программ. В среднем, объем требуемой памяти программ не изменяется ощутимым образом. Но мы получаем меньшую требуемую разрядность шины данных памяти. Кроме того, мы можем обойтись одним циклом чтения вместо последовательных чтений очередного байта команды. А значит, и упрощение схемы процессора, и ее удешевление, и ускорение работы.

Аналогичный результат, но уже для работы с памятью данных, дает исключение сложных режимов адресации. Конечно, в разных микроконтроллерах применены разные решения. И результаты отличаются. Так для 8-разрядных PIC большинство команд выполняются за 1 машинный цикл (4 такта) и занимают менее 2 байт памяти. Я не говорю сейчас о PIC18.

Для STM8 команда может занимать до 5 байт, а сами команды выполняются за разное количество циклов. Но там и набор команд и способов адресации не такой уж и сокращенный.

Заключение

Я очень кратко коснулся темы построение процессоров с усеченным набором команд. Причем постарался показать большинство связанных с этим моментов, а не только собственно уменьшение количества доступных команд.

И CISC и RISC архитектуры имеют право на жизнь. Нельзя сказать, какая из них однозначно лучше, а какая хуже. Все зависит от конкретной ситуации. Причем RISC архитектура применяется не только в микроконтроллерах, но и в других процессорах. Примером могут служить Sun SPARK.

А вот теперь мы готовы приступить к более подробному рассмотрению микроконтроллеров PIC, как это сделано в предыдущей статье для STM8.

До новых встреч!

Источник: dzen.ru

Система команд для микропроцессора

Система команд для микропроцессора

Общие сведения о системе команд.

Фиксированный набор команд конкрет­ного микропроцессора называют системой команд. Функциональные способно­сти процессора определяются совокупностью базовых команд с различными кодами операций. Общее число команд (кодов операции) в системе всегда боль­ше числа базовых команд. Например, к базовой команде относится команда

которая обеспечивает функцию пересылки данных из источника

Таких команд в системе может быть очень много. Система команд представляется в виде таблицы. Таблица может иметь различную структуру, однако обычно содержит следующие сведения о команде:

● мнемоническое обозначение команды, представляющее собой сокращенную запись названия команды. Для этого используются три–четыре латинские бук­вы названия операции, выполняемой командой. Мнемоника является удобной формой представления кода операции команды. Кроме того, она использует­ся при описании команды на языке ассемблера. Программа ассемблера пре­образует мнемоническое обозначение кодов операции в соответствующие двоичные эквиваленты;

● шестнадцатеричные коды команд;

● влияние выполненной команды на флаги регистра слова состояния программы;

● число байтов в команде и число машинных циклов и такте, затрачиваемых на выполнение команды;

● словесное и (или) символьное описание выполняемой командой операции. Часто для удобства систему команд разбивают на отдельные группы по функ­циональному признаку. Например систему команд микропроцессора:

● КР580ВМ80, содержащую 78 базовых команд, разбивают на пять групп: пере­сылки, логической обработки, арифметической обработки, передачи управ­ления и управления процессором,

М86, содержащую 113 базовых команд, разбивают на шесть групп: пересылки, логической обработки, арифметической обработки, обработки строк, передачи управления и управления процессором. Ниже на примере процессоров КР580ВМ80 приведено краткое описание функ­циональных особенностей команд каждой группы.

Рассмотрим систему команд 8–разрядного процессора 8080, в которую входит 78 базовых команд, содержа­щих 111 кодов операций.

Команды имеют длину от 1 до 3 байт. Код операции всегда размещен в первом байте команды. Второй байт команды отводится под непосредственный операнд или адрес порта, второй и третий байты являются адресом ячейки памяти. Коман­ды допускают явное задание только одного адреса памяти, т. е. относятся к клас­су одноадресных команд.

Читайте также:
Как перенести программу в Mac OS

При описаний–команд используются следующие обозначения:

— 8–разрядные источник и приемник. Источником или приемником мо­жет быть один из 8–разрядных регистров А, В, С,

Н или ячейка памяти М, доступ к которой обеспечивает регистровая пара

, содержащая адрес пересылаемого байта. В коде операции источник

указаны в виде трехразрядного кода

— двухразрядный код регистровых пар ВС,

А + РП (регистр призна­ков) или указателя стека

— 8– и 16–разрядный операнд;

— 16–разрядный адрес памяти и 8–разрядный адрес порта;

) — содержимое ячейки памяти по указанным адресам;

) — операции постинкремента и предекремента со стеком, описа­ние которых приведено в параграфе 2.6.

Система команд разбивается на пять функциональных групп. Рассмотрим осо­бенности команд каждой группы.

Группа содержит наиболее часто встречающиеся в программах команды пересылки данных, источниками и приемниками которых могут быть внутренние регистры процессора, основная память и внешние устройства. Команды не оказывают воздействий на флаги регистра состояния. Мнемоника команды отражает особенности выполняемой операции и способ переадресации. Например, мнемоника

указывает на перемещение (

Для операций с байтами используется мнемоника

LDA, STA, LDAX, STAX;

для операций со словами —

Прямая адресация при загруз­ке и сохранении содержимого аккумулятора отражается мнемоникой

ВР — двухразрядный код регистровых пар ВС,

, А + РП (регистр при­знаков) или указателя стека

табл 2.8.1

Р.

Команды этой группы сведены в табл. 2.8.1 и позволяют осуществить:

● операцию пересылки данных между источником (

), ко­торая записывается в виде

(команда 1). Источниками и приемниками являются внутренние регистры общего назначения (А, В, С,

, Е, Н) и ячейка памяти

. Допускается любая комбинация и за исключением М

, т. е. пе­резагрузка ячейки памяти М не разрешается;

● загрузку регистров общего назначения и ячейки М вторым байтом В2 (коман­да 2) и регистровых пар ВС,

(в том числе указателя стека

Р) вторым В2 и третьим ВЗ байтами (команда 3), причем всегда ВЗ загружается в стар­шие регистры (В,

, Н) пары, В2 — в младшие регистры (С, Е ,

● пересылку данных между аккумулятором А и основной памятью (команды 4–7), между аккумулятором и внешним устройством (команды 8, 9). При пере­сылке между аккумулятором А и памятью адреса ячеек памяти располагают­ся в регистровых парах ВС,

Е или в третьем и втором байтах ВЗВ2 команды;

● пересылку данных между парой регистров

и памятью (команды 10, 11). При этом операнд из регистра

пересылается в ячейку с адресом ВЗВ2, об­разованным из третьего и второго байта команды, а из регистра Н — по ад­ресу на единицу больше. При обратной пересылке сначала из ячейки с адре­сом ВЗВ2 в регистр

загружается первый операнд, затем из ячейки с адре­сом ВЗВ2 + 1 в регистр Н — второй;

данных между парами регистров, включая пару из аккумулятора А и регистра признаков РП, и стеком (команды 12, 13). При записи в стек со­держимое указателя стека уменьшается на единицу, и по адресу

Р – 1 за­гружается первый операнд из регистра В,

Н или А, затем содержимое ука­зателя стека снова уменьшается на единицу, и по адресу

Р – 2 загружается второй операнд из регистра С, Е,

или РП. При выводе из стека сначала за­гружается регистр С, Е,

или РП операндом, хранящимся в ячейке с адресом

Р указателя стека. Затем содержимое увеличивается на единицу, из ячейки с адресом

Р + 1 второй операнд загружается в регистр В,

Н или А, и со­держимое указателя стека вновь увеличивается на единицу и принимает зна­чение

Следует отметить, что при загрузке регистровой пары А, РП (ее код

Р = 11) из стека изменяется состояние триггеров регистра признаков РП. Это единственная команда (из всех команд пересылки данных), которая влия­ет на признаки;

содержимого пары регистров Н

в указатель стека

Р и программ­ный счетчик РС (команды 14, 15);

данными между парами регистров Н

Е, парой регистров Н

и сте­ком (команды 16, 17). При обмене содержимое регистровой пары Н

поме­щается в пару

Е или стек, а содержимое регистровой пары

Е или стека — в пару Н

. Операция обмена обозначается символом «↔».

табл 2.8.2

Вычислительные возможности микро­процессора ограничены простыми командами сложения и вычитания 8–раз­рядных операндов. Операции умножения и деления реализуются программным способом.

Набор команд (табл. 2.8.2) позволяет выполнить:

сложение и вычитание 8–разрядных операндов с учетом и без учета переноса (команды 1–8), при этом один из операндов всегда находится в аккумулято­ре, а второй — в одном из регистров общего назначения (ячейке памяти М) или является вторым байтом команды. Команды, учитывающие значение сиг­нала переноса С регистра прививков, используются при сложении и вычита­нии многобайтных чисел. Для этой же цели можно использовать команду 9 сложения содержимого пары регистров Н

с 16–разрядным адресуемым ре­гистром;

арифметическое сравнение содержимого аккумулятора А с содержимым од­ного из регистров общего назначения

(ячейкой памяти М) или вторым байтом В2 (команды 10–11). При этом выполняется вычитание А –

или А – В2. Результат сравнения определяется по сигналам триггеров регистра признаков: если

или А > В2. Содержимое аккумулятора не изменяется;

и уменьшение на 1 (инкремент и декремент) содержимого реги­стров и регистровых пар. При программировании часто возникает необходи­мость увеличения или уменьшения на единицу значения операнда. Для этого можно использовать операции сложения А + В2 или вычитания А – В2, запи­сав в программе В2 = 1. Однако в системе команд предусмотрены специаль­ные команды (12–15) инкремента и декремента 8– и 16–разрядных операндов;

табл 2.8.3

содержимого аккумулятора после выполнения ариф­метических операций в двоично–десятичном коде 8421 (команда 16). При этом содержимое аккумулятора представляется в виде двух полубайтов, каж­дый из которых соответствует десятичной цифре. Коррекция производится блоком десятичной коррекции по правилам.

Команды логических операций (табл. 2.8.3). Команды этой группы позволяют реализовать:

двуместные логические операции умножения (И), сложения (ИЛИ) и исключа­ющее ИЛИ над 8–разрядными операндами (команды 1–6). Логические опера­ции являются поразрядными и выполняются независимо для каждого из восьми бит операндов. Неадресуемый операнд находится в аккумуляторе, туда же поступает результат операции. Вторым операндом является содер­жимое одного из регистров общего назначения (ячейки памяти М) или второй байт команды;

содержимого аккумулятора А (команда 7);

флаговые команды (8, 9) инвертирования и установки бита С триггера пере­носа регистра признаков;

два вида циклических сдвигов содержимого аккумулятора влево и вправо (команды 10–13). Первый вид сдвигов (сдвиги без переноса) реализуется пу­тем замыкания в кольцо всех триггеров аккумулятора, при втором виде сдви­гов (сдвиги с переносом, или расширенные сдвиги) в кольцо дополнительно вводится триггер переноса С регистра признаков. Отсутствующие в системе команд логические и арифметические сдвиги в обе стороны можно реализо­вать предварительной установкой бита С в 0 или 1 совместно с расширенным сдвигом.

Команды передачи управления.

При передаче управления наруша­ется последовательный ход выборки содержимого ячеек памяти и процессор ад­ресуется в другую область памяти. Следует выделить три вида команд передачи управления: команды перехода по заданному адресу (

) и возврата из подпрограммы

К ним относятся безусловные и ус­ловные команды. Условные команды осуществляют переход, вызов подпрограм­мы и возврат из подпрограммы в зависимости от состояния флага, задаваемого значением сигнала одного из четырех триггеров

табл 2.8.4

Р регистра признаков (или состояния).

В процессоре 8080 используются оба состояния (1 и 0) четырех флагов

позволяющих получить 8 вариантов каждой команды (табл. 2.8.4). Обозна­чение признака (условия) указывается в мнемонике условных команд

вместо звездочек (**). Например, признаку

для которого условия перехода считаются выполненными при С = 0, соответствует команда

В операциях как условного, так и безусловного перехода и вызова подпро­грамм используется полный прямой 16–разрядный адрес, обеспечивающий пере­дачу управления в любую точку 64К–байтовой области пространства памяти.

табл 2.8.5

Рассмотрим особенности команд, представленных в табл. 2.8.5.

С помощью трехбайтной команды

реализуется безусловная передача уп­равления. При этом второй и третий байты команды (адрес

продолжения программы) заносятся в счетчик команд РС (содержимое ВЗ в старшие разряды, В2 — в младшие).

Команды условной передачи управления

** реализуют разветвление вычисли­тельного процесса в зависимости от условия. При выполнении условия (ДА) в счетчик РС заносится второй и третий байты команды, в противном случае (НЕТ) содержимое счетчика увеличивается на 3 единицы. Продолжение програм­мы осуществляется по адресу, находящемуся в счетчике команд, т. е. со следу­ющей команды.

Команды безусловного (СА

) и условного (С**) вызовов используются для об­ращения к подпрограммам, хранящимся в другой части основной памяти. Эти ко­манды всегда предусматривают возможность возврата в прерванную основную программу путем сохранения в стеке содержимого программного счетчика РС, для чего используется предекрементный способ адресации. После этой операции:

● при безусловном вызове или выполнении условия второй и третий байты ко­манды заносятся в программный счетчик РС;

● при невыполнении условия содержимое программного счетчика увеличивает­ся на 3 единицы.

Продолжение программы осуществляется по адресу, находящемуся в счетчи­ке команд РС.

В наборе имеются команды, позволяющие реализовать безусловную (

**) передачу управления для возврата в прерванную программу. При выполнении этих команд адрес возврата переписывается из стека в про­граммный счетчик РС, для чего используется постинкрементный способ адреса­ции. При невыполнении условия возврата (для команды с условием) осуществля­ется переход к очередной команде путем увеличения на единицу содержимого программного счетчика РС.

Читайте также:
Вехов в б вредоносные компьютерные программы как предмет и средство совершения преступления

Команды возврата являются однобайтными, так как в указателе стека

табл 2.8.6

Р хра­нится адрес ячейки стека с адресом возврата в прерванную программу.

, загружает в программный счетчик РС адрес, хранящийся в ре­гистровой паре

Команды общего управления.

Команды этой группы (табл. 2.8.6) ис­пользуются для задания режима работы микропроцессора. Команда

используется для повторного пуска микропроцессора и при обслуживании прерываний. При ее выполнении:

● содержимое программного счетчика переносится в стек по адресам

Р – 2, формируемым в указателе стека, что обеспечивает возврат к основ­ной программе;

● в программный счетчик засылается 16–разрядный адрес начала одной из 8 программ обслуживания прерывания.

Команда разрешения прерывания

разрешения прерываний в единичное состояние, при этом микропроцессор реагирует на за­просы прерываний. Команда запрещения прерываний

в нулевое состояние. Пустая команда

используется в циклах програм­мируемой задержки. Команда останова

вызывает прекращение выполнения программы.

Источник: pue8.ru

Презентация на тему Программное управление компьютером

Программирование – это процесс создания программ. Программа – набор инструкций, посланный вычислительной машине (компьютеру). Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Гл.</p><p> 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Байт – группа из восьми бит, обрабатываемая как единое Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Команда состоит из кода выполняемой опера-ции (оператор) и адресной Гл.</p><p> 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ из ячейки памяти, адрес которой хранится в счетчике команд, Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Операционная система – комплекс программ, управляющих базовыми и периферийными Гл.</p><p> 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Двоичная система счисления – позиционная (основание - 2). Перевод Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Восьмеричная система счисления – позиционная (основание – 8, используются Гл.</p><p> 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Представление (вид) числа в памяти определяется тем типом, к Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Все математические операции с числами основаны на сложении. Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Вычитание заменяется сложением чисел, одно из который берется с Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Работа компьютера (в том числе выполнение арифметических операций) основана

Слайд 1 Программирование – это процесс создания программ. Программа – набор

Программирование – это процесс создания программ. Программа – набор инструкций, посланный вычислительной машине (компьютеру). Гл.

инструкций, посланный вычислительной машине (компьютеру).
Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ

КОМПЬЮТЕРОМ
Носителем информации является сообщение. Для кодировки сообщений применяется двоичный

набор, состоящий из двух знаков 0 и 1 (binary digit, сокращенно bit).

Данные – это сообщения, закодированные в форму, пригодную для хранения и обработки их компьютером на основе двоичного набора знаков.

Порядок выполнения операций над данными строится на основе некоторого алгоритма. Программу можно рассматривать как алгоритм, записанный на понятном для компьютера языке, и данные, которые компьютер будет обрабатывать в соответствии с этим алгоритмом.

Слайд 2 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ

Слайд 3 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Байт – группа

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Байт – группа из восьми бит, обрабатываемая как единое целое.

из восьми бит, обрабатываемая как единое целое. (бит –

единица измерения информации, байт – единица измерения объема данных).
Объем

ОЗУ измеряется в байтах. Емкость ячейки памяти – 1 байт. Производные: Кбайт (1024 (210) байт), Мбайт (1 048 576 (220) байт) , Гбайт (1 073 741 824 (230) байт). Шина – набор линий-проводников на материнской плате, по которым обмениваются информацией компоненты и устройства компьютера.

Системная шина – проводники, которыми процессор соединен с Chipset – набором микросхем, установленных на материнской плате для обеспечения обмена данными между разными устройствами компьютера и процессором. Архитектура любой из шин (системной, памяти, ввода-вывода и др.) включает: — линии для обмена данными (шина данных), — линии для адресации данных (шина адресов), — линии для управления данными (шины управления). Пропускная способность шины (Мбайт/с) определяется ее разрядностью, умноженной на тактовую частоту.

Слайд 4 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Команда состоит из

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Команда состоит из кода выполняемой опера-ции (оператор) и адресной части

кода выполняемой опера-ции (оператор) и адресной части (операнды).
Современные

компьютеры преимущественно базируются на архитектуре фон Неймана – совместное хранение

данных и программ. Алгоритм любой программы реализуется в виде команд, выполняемых процессором шаг за шагом (программа = данные + команды).

Закодированное представление команды процессора — машинный код.

одноадресная команда (содержимое ячейки х ОЗУ сложить с содержимым сумматора (регистр АЛУ процессора), а результат оставить в сумматоре);

двухадресная команда (сложить содержимое ячеек х и y, а результат поместить в ячейку y);

трехадресная команда (содержимое ячейки x сложить с содержимым ячейки y, сумму поместить в ячейку z);

Регистры – дополнительные поименованные ячейки памяти процессора.

Слайд 5 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
из ячейки памяти,

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ из ячейки памяти, адрес которой хранится в счетчике команд, выбирается

адрес которой хранится в счетчике команд, выбирается очередная команда;

содержимое счетчика команд при этом увеличивается на длину команды;
выбранная

команда передается в УУ на регистр команд;
устройство управления расшифровывает адресное поле команды;
по сигналам УУ операнды считываются из памяти и записываются в АЛУ на специальные регистры операндов;
УУ расшифровывает код операции и выдает в АЛУ сигнал выполнить соответствующую операцию над данными;
результат операции либо остается в процессоре, либо отправляется в память, если в команде был указан адрес результата.

Слайд 6 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Операционная система –

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Операционная система – комплекс программ, управляющих базовыми и периферийными устройствами

комплекс программ, управляющих базовыми и периферийными устройствами компьютера и

обеспечивающих правильную загрузку других программ (MS-DOS, Windows, UNIX, MacOS и

др.).
Для обслуживания периферийных устройств в состав операционной системы входят специальные программы – драйверы устройств.

Современные системы программирования (например, Borland Delphi, Microsoft Visual Basic, Borland C++) кроме трансляторов включают в себя интегрированную среду разработки: средства создания и редактирования текстов программ; обширные библиотеки стандартных программ и функций; отладочные программы и утилиты; встроенный ассемблер; справочную службу и т.д.

Системное программирование – процесс разработки операционных систем, утилит и трансляторов.
Прикладное программирование – процесс разработки прикладных программ.

Слайд 7 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Двоичная система счисления

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Двоичная система счисления – позиционная (основание - 2).Перевод целого числа

системы в десятичную:
(1101)2 = 1*20 + 0*21 + 1*22 +

Перевод целого числа из десятичной системы в двоичную осуществляется последовательным делением на 2. В качестве остатка от деления получается очередная цифра двоичного числа, начиная с младшей.
13/2 = 6 (остаток 1 — младшая цифра), 6/2 = 3 (0),
3/2 = 1 (1), 1/2 = 0 (1). Результат — (1101)2

Перевод дроби из двоичной системы в десятичную:
(0.1011)2 = 1*2-1 + 0*2-2 + 1*2-3 + 1*2-4 =
1/2 + 1/8 + 1/16 = 0.5 + 0.125 + 0.0625 = (0.6875)10

Перевод дроби из десятичной системы в двоичную осуществляется умножением на 2. Целая часть полученного числа – очередная цифра двоичного, начиная с первой цифры после запятой:
0.6875*2 = 1.375 (первая цифра — 1), 0.375*2 = 0.75 (0), 0.75*2 = 1.5 (1), 0.5*2 = 1.0 (1). Результат — (0.1011)2

Слайд 8 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Восьмеричная система счисления

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Восьмеричная система счисления – позиционная (основание – 8, используются цифры

– позиционная (основание – 8, используются цифры 0 1

2 3 4 5 6 7).
Шестнадцатеричная система счисления –

позиционная (основание – 16, используются цифры 0 1 2 3 4 5 6 7 8 9 и первые буквы латинского алфавита A B C D E F).
Перевод восьмеричных и шестнадцатеричных чисел в двоичную систему (и обратно) осуществляется заменой каждой цифры эквивалентной ей двоичной триадой (тройкой цифр) или тетрадой (четверкой цифр).

Слайд 9 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Представление (вид) числа

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Представление (вид) числа в памяти определяется тем типом, к которому

в памяти определяется тем типом, к которому он принадлежит.

В частности, тип числа задает количество двоичных разрядов, отводимых под

хранение числа.
Для хранения числа в памяти отводится целое число ячеек емкостью 1 байт – 8 бит (разрядов).

Целые беззнаковые типы (представление числа 5)

BYTE (1 байт, 0. 255)

WORD (2 байта, 0. 65535)

0000 0000 0000 0101

Для хранения чисел со знаком старший разряд отводится под знак (0 – если число положительное, 1 – если отрицательное).

Целые знаковые типы (представление числа 5)

SHORTINT (1 байт, -128. 127)

INTEGER (2 байта, -32768. 32767)

0 000 0000 0000 0101

Слайд 10 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Все математические операции

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Все математические операции с числами основаны на сложении. Сложение осуществляется

с числами основаны на сложении.
Сложение осуществляется поразрядно с

соблюдением дополнительного правила: «Если в результате сложения двух соответствующих разрядов

чисел получилось число большее или равное основанию системы счисления (2), то следует из полученного числа отнять основание системы счисления и записать в строке итога полученный результат. Кроме того, необходимо запомнить единицу с тем, чтобы добавить ее при сложении следующего разряда».

0 1 0 0 1 0 0 1 (73)10
+ 0 0 1 0 0 1 0 1 (37)10
_________________________
0 1 1 0 1 1 1 0 (110)10

Отрицательные числа представлены в виде дополнительного кода.
Для получения дополнительного кода необходимо сначала поменять все разряды числа на обратные, а затем к полученному результату прибавить 1.

Целые знаковые типы (представление числа -5)

SHORTINT (1 байт, -128. 127)

INTEGER (2 байта, -32768. 32767)

1 111 1111 1111 1011

Слайд 11 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Вычитание заменяется сложением

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Вычитание заменяется сложением чисел, одно из который берется с обратным

чисел, одно из который берется с обратным знаком (используется

дополнительный код).

1 1 1 (7)10
+ 1 1 1 1 1 0 1 1 (-5)10
_____________________________
0 0 0 0 0 0 1 0 (2)10

Умножение заменяется сложением чисел, сдвинутых на разное число двоичных разрядов подобно тому, как это делается при умножении чисел «в столбик». Деление, соответственно, выполняется через вычитание (путем многократного прибавления к делимому дополнительного кода делителя). Возведение в степень выполняется через умножение и т.д.
Современные компьютеры помимо центрального процессора оснащаются математическим сопроцессором – специальным устройством, выполняющим математические операции с плавающей точкой, что позволяет разгрузить центральный процессор. Его использование позволяет ~ на 80 % сократить время выполнения таких операций как умножение и возведение в степень.

Слайд 12 Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ
Работа компьютера (в

Гл. 2. ПРОГРАММНОЕ УПРАВЛЕНИЕ КОМПЬЮТЕРОМ Работа компьютера (в том числе выполнение арифметических операций) основана на

том числе выполнение арифметических операций) основана на логических действиях.

Возможны только четыре комбинации соответствующих разрядов при сложении двух чисел,

представленных в двоичном виде.

Правила по установке соответствующего разряда итогового числа построено по законам логики:

«Если складываются разряды с равным состоянием (ноль с нулем или единица с единицей), то итоговый разряд устанавливается равным нулю. В противном случае, он устанавливается равным единице. Если складываются два разряда, равные единице, то вырабатывается сигнал переноса единицы в следующий разряд».

Логическая конструкция «Если условие обращается в истину, то выполнить некую последовательность действий» называется импликацией.
В практическом программировании применяют более сложную конструкцию: «Если условие истинно, то выполнить последовательность действий №1, иначе (то есть если условие ложно) выполнить последовательность действий №2». Реализуется с помощью логического оператора: if – then – else.

Источник: mypreza.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru