1. Основные элементы ЭВМ их назначение и взаимодействие
2. Пример типовой процедуры в ЭВМ.
3. Числа, кодирование и арифметическая информация.
4. Дополнительный код. Арифметика в дополнительном коде.
9. Структура элементарного МП.
11. Микропроцессор.
12. Использование регистра адреса\данных.
13. Этапы обработки требования прерывания.
14. указателя стека.
15. Состав команд арифметических действий.
16. состав команд логических операций
17. состав команд операций передачи данных
18. Состав команд операций ветвление
19. состав команд операций вызова программ и возврата в основную программу
20. запись программы
22. ЦИКЛЫ

Типовая ЭВМ состоит из пяти основных элементов:
И ПЗУ и ОЗУ представлены в виде множества локализованных ячеек памяти. Размер ячейки – это количество БИТ информации, которую можно поместить в ячейку памяти или прочитать из нее.
Для организации взаимодействия и управления всеми устройствами ЭВМ в нее включены три шины:
А) шина адреса (ША) – выбирает (указывает) ячейку памяти или адрес портов ввода-вывода. В зависимости от количества ячеек памяти и устройства ввода-вывода (УВВ) ША бывают 16, 32, 64 и т.д. разрядов.
Б) линия управления (ЛУ) - представляет из себя шину, состоящую из нескольких проводов, на каждом из которых формируются управляющие сигналы, обеспечивающие необходимую временную последовательность работы всех устройств ЭВМ.
В) шина данных (ШД) – является двунаправленной и служит для передачи данных в МП или из него.
Рассмотрим пример типовой процедуры в ЭВМ:
1. Нажатие клавиши «А».
2. Размещение буквы «А» в памяти.
3. Воспроизведение буквы «А» на экране дисплея.
Текущими командами в ПЗУ являются:
- Ввести (INPUT) данные через порт 1
- Разместить (STORE) данные, поступающие из порта 1 в ячейку памяти с адресом 200.
- Вывести данные (OUTPUT) через порт 10.

Проследим все этапы выполнения этой программы.
Этап №1: МП выставляет адрес 100 на ША. Линия управления активизирует ввод считывания из интегральной схемы программной памяти.
Этап №2: Программная память выставляет первую программу (INPUT) на шину данных (ШД), а МП принимает эту кодированную информацию. Это сообщение помещается в регистр команд и МП декодирует (интерпретирует) это сообщение. В результате интерпретации он определяет, что это за команда и что ей нужен операнд.
Этап №3: МП выставляет на ША адрес 101, линией управления активизируется вход считывания из программной памяти.
Этап №4: Программная память помещает операнд (Из порта 1) на ШД. Этот операнд находится в ячейке памяти 101, кодированное сообщение (адрес порта 1) взято на ШД и помещено в регистр команд. Теперь МП декодирует полную команду (ввести данные, поступающие из порта 1).
Этап №5: МП побуждает открыть Порт 1 посредством ША и линии управления устройствами ввода. Кодированная буква «А» из Порта 1 по ШД передается в МП и размещается в аккумуляторе.
Примечание: МП все время действует в последовательности:.
Этап №6: МП выставляет на ША адрес ячейки памяти 102 и активизирует вход считывания из программной памяти посредством управляющих линий.
Этап №7: Код команды поместить (STORE) считывается с ШД, принимается МП и помещается в регистр команд.
Этап №8: МП декодирует эту команду и определяет, что нужен операнд. Он выставляет на ША следующий адрес 103 и активизирует вход считывания из ПЗУ.
Этап №9: Код операнда в ячейку памяти 200 из памяти помещен на ШД, МП принимает операнд и помещает его в регистр команд. Команда «поместить данные в ячейку памяти 200» полностью извлечена и декодирована.
Этап №10: Начинается процесс выполнения: МП выставляет на ША адрес 200 и активизирует вход записи в ОЗУ.
Этап №11: МП выдает помещенную в аккумулятор информацию (код буквы «А») на ШД. Этот код записывается в ячейку 200 и таким образом теперь выполнена вторая команда.
Этап №12: МП теперь должен извлечь следующую команду - он адресует ячейку памяти 104 и активизирует вход считывания из памяти.
Этап №13: Команда вывести данные (OUTPUT) помещена на ШД. МП принимает ее, помещает в регистр команд, декодирует и определяет, что нужен операнд.
Этап №14: МП помещает адрес 105 на ША и активизирует вход считывания из ПЗУ.
Этап №15: Память помещает код операции в порт 10 на ШД. Этот код принимается МП, который помещает его в регистр команд.
Этап №16: МП декодирует команду «ввести данные в порт 10» полностью, т.е. он активизирует порт 10 посредством ША и линии управления выводом. Он помещает код буквы «А» (из аккумулятора) на ШД, по которой передается в порт 10 и далее из него на монитор.
МП является центром всех операций и полностью ими управляет. Он следует последовательности: извлечение – декодирование – выполнение, а выполняемые операции диктуются командами, помещенными в памяти ПЗУ.
Так как информационные процессы в цифровых системах принимают значения только 0 и 1, то и представления данных осуществляется с помощью двоичных чисел. Сложение и вычитание двоичных чисел, а так


же и все остальные арифметические действия выполняются по тем же правилам, что и в десятичной арифметике.
Сложение двоичных чисел: Вычитание двоичных чисел:
Умножение двоичных чисел:
![]() |
Если нужно использовать числа со знаком, в ЭВМ используется специальный код. Применение его существенно упрощает аппаратные средства ЭВМ.
Изобразим условно ячейку памяти или регистр ЭВМ.

1 – имеет вес 16 (24).
Для представления знака числа принято соглашение о том, что если старший значащий разряд в числе равен нулю, то число положительное.

В остальных ячейках записывается второе параллельное число. Если старший разряд слова равен 1, то число является отрицательным, а в остальных рядах слова записано двоичное число в дополнительном коде.
Использование дополнительного кода позволяет операцию вычитания заменить сложением.

арифметика в дополнительном коде:
Процессоры ЭВМ неприспособленны для выполнения операций вычитания, поэтому эту операцию заменили операцией сложения, в которой отрицательные числа представлены в дополнительном коде.
Рассмотрим на примерах все возможные ситуации, при арифметических действиях с числами:
1. сложение двух положительных чисел: 5+3=8

2. сложить числа: 7+(-3)=4
00000011
Проинвертируем это число и и полученному числу прибавим 1:


В результате получили девятиразрядное число, причем старший разряд является переполнением восьмиразрядного числа, поэтому им пренебрегаем. Оставшееся число в старшем разряде имеет 0, поэтому является положительным
3. Сложить 2 отрицательных числа: (-5)+(-7)=-12
00000101
Проинвертируем это число и и полученному числу прибавим 1:

00000111
Проинвертируем это число и и полученному числу прибавим 1:


Входящий в состав микропроцессора регистр – аккумулятор является очень важной частью всей вычислительной системы. Все операции над данными, как правило, выполняются через аккумулятор, в котором информация записана в виде слова. Обычно длина слова микропроцессора составляет 8 бит (байт) (4,8,16,32,64).
Слово – одна группа обрабатываемых бит, единое выражение или одна команда. Восьмиразрядный микропроцессор переносит и помещает все данные группами из 8 бит, которые передаются восемью параллельными проводниками, составляющими шину данных.
Каждое запоминаемое слово имеет особое значение, когда оно извлечено и декодировано МП. Содержание любой ячейки памяти может иметь один из следующих смыслов: двоичное число; двоичное число со знаком; двоично-десятичное число; буква алфавита; команда; адрес памяти; адрес порта ввода или вывода.
Рассмотрим ячейку памяти с адресом 01100100 (100) и содержимым 11011011. Это число может быть интерпретировано как: число 219; число со знаком (-37); буква алфавита в коде ASCII; команда INPUT; адрес ячейки памяти – DB и др.
МП включает счетчик команд (счетчик команд – устройство, содержимым которого является текущий адрес памяти и который изменяет свое состояние на +1 с каждым тактом выполнения программы). С адреса 100 извлечет, а затем декодирует слово в памяти 11011011, как команду – ввести данные (INPUT). Затем МП обратится к следующему адресу 101 и найдет там адрес порта (1), из которого поступают данные. И так далее по тексту программы.

1. Код команды- ввести данные (INPUT);
2. Двоичный адрес Порта 1;
3. Код команды-разместить данные (STORE);
4. Двоичный адрес памяти;
5. Код команды – вывести данные (OUTPUT);
6. Двоичный адрес Порта 10;
7. Код ASCII буквы «А».
Команды программы помещены в 6 верхних ячеек памяти (100 - 105). Нижняя ячейка памяти (200) является местом размещения данных, т.е. в эту ячейку помещен код буквы «А».
Важно отметить, что биты информации сгруппированы в слова внутри ЭВМ. Эти слова в памяти программы интерпретируются МП одно за другим последовательно.
Программисту важно знать, как ЭВМ располагает и интерпретирует данные. У каждого типа МП имеется свой состав команд, но у всех у них доступ к памяти осуществляется одинаково.

МП является центром всех операций, ему необходимо питание и тактовые импульсы. ГТИ может быть отдельным устройством или входить в состав (быть интегрированным) МП. Типовой МП содержит 16 (32, 64…) адресных линий, которые образуют однонаправленную ША. А так же, обычно, 8 (16, 32…) линий, которые составляют двунаправленную ШД. В представленной архитектуре имеет места 2 типа памяти: ОЗУ и ПЗУ. ПЗУ представляет собой память, которая содержит программу – монитор системы, а так же пользовательские программы. ПЗУ имеет адресные входы, а так же входы активизации только чтения и выбора кристалла. Тристабильные выходы ПЗУ подключены к ШД. ОЗУ тоже, что и ПЗУ, только предусмотрено использование полной команды чтение/запись.
Для того, чтобы активизировать (включить в работу) требуемое устройство, дешифратор адреса считывает данные с ША. Комбинационной логикой линейной комбинации ША активизируется линия выбора соответствующего кристалла, включая, таким образом, выбранное устройство.
ГТИ предназначено для формирования базовой задающей тактовой последовательности импульсов, обеспечивающей временную синхронизацию работы всей системы.
Запись в память или считывание из нее происходит при наличии доступа в память. Обычно память выполняется с последовательным или произвольным доступом. Последовательный доступ означает, что к требуемым данным нужно последовательно пройти всю память, расположенную до размещения искомых данных.
В случае, произвольного доступа данные могут быть записаны (считаны) в любую ячейку памяти за определенное фиксированное время называемое временем доступа в памяти.
ОЗУ и ПЗУ ЭВМ являются устройствами с произвольным доступом к памяти, т.к. они обеспечивают существенно большее быстродействие, по – сравнению с последовательным доступом.
МП, например, может иметь 16 линий адреса, которые могут обеспечить 65536 различных комбинаций 0 и 1, т.к. запись не экономична, то двоичный адрес принято представлять в 16-тиричной системе.
Так как размер ячейки памяти 8 бит (1 байт), а адрес – 2 байта, то для хранения адреса в памяти необходимо выделять 2 ячейки, в одну из которых помещают старший байт адреса, а в другую младший байт адреса.
Группа команд, которая может выполнять микропроцессор (МП) называется его составом команд. В зависимости от типа МП и его назначения состав команд варьируется от 8 до 200.
Типовой МП представлен следующим составом команд, в соответствии с нормативами. К ним относятся: арифметические, логические, передачи данных, ветвление, вызова подпрограмм, возврата из подпрограмм и прочее.
В свою очередь эти группы команд делятся:
А) Арифметические - сложение, вычитание, инкремент, сравнение и отрицание.
Б) Логические - И, ИЛИ, ИЛИ – исключающее, НЕ, а так же сдвиг вправо, сдвиг влево (часто встречаются команды циклического сдвига влево, вправо с переносом, тестированием и т.п.).
В) Передачи данных - загрузка, размещение, перемещение, ввод и вывод.
Г) Ветвление - безусловный переход, переход, если ноль, переход, если не ноль, переход, если равенство, переход, если не равенство, переход, если положительно, переход, если отрицательно.
Д) Вызов подпрограмм – это команда, предназначенная для того, чтобы программа могла перейти к специальной группе команд, которые решают поставленную задачу.
Последней командой в этой группе всегда стоит команда возврата из подпрограммы. Прочими командами типового МП будут: нет операций, поместить в стек, выйти из стека, ожидание, остановка.
Центральным устройством вычислительной системы является МП, который содержит обычно элементы размещения данных называемые регистрами и устройства счета (арифметическое логическое устройство – АЛУ). МП содержит так же цепь декодирования команд и секцию управления и синхронизации. МП так же снабжен необходимыми соединениями с устройствами ввода/вывода.
Основными функциями МП являются:
1. Извлечение, декодирование и выполнение команд программы в указанном порядке.
2. Передача данных из памяти в память, а так же из устройств ввода/вывода и в устройство ввода/вывода.
3. Ответы на внешние прерывания.
4. Установка общей синхронизации и сигнал управления для всей системы.
АЛУ МП выполняет такие операции, как сложение, сдвиг/расстановка, сравнение, инкремент, декремент, отрицание, И, ИЛИ, ИЛИ – исключающее, дополнение, сброс, инициализация.

Рассмотрим, например, операцию сложения (ADD).

Рассмотрим подробнее состав АЛУ.

Типовое АЛУ содержит сумматор и устройство сдвига, а результаты арифметической операции пересылают обратно в аккумулятор, посредством внутренней шины данных. Регистр состояния слова в АЛУ является чрезвычайно важным устройством. Этот регистр состоит из группы триггеров, которые могут быть установлены или сброшены, исходя из результатов последней операции, выполненной АЛУ. Эти триггера содержат указатели (флаги) нуля, отрицательного результата, переноса и т.д.
Пусть требуется сложить числа 10+5+18=33. Программа для выполнения этой задачи может быть записана в следующей последовательности:
1. загрузить (LOAD) первое число (10) в МП;
2. сложить (ADD) второе число (5) с первым;
3. сложить (ADD) третье число (18) с двумя первыми;
4. поместить (STORE) сумму (33) в ячейку памяти с адресом 2ØØØН.


1. Операция показывает, что содержимым ячейки памяти 0001 загружено в аккумулятор, который содержит после этого 00001010 (0000А), т.е. первое слагаемое. В результате выполнения операции LOAD предыдущее содержимое аккумулятора стирается.

2. Операция ADD. Содержимое ячейки памяти 0003 складывается с содержимым аккумулятора, что дает сумму OF (00001111), помещаемую в аккумулятор.

3. Содержимое аккумулятора - сложение 00001111 сложена с содержимым ячейки памяти 0005 (00010010), т.е. выполнена операция.


4. Содержимое аккумулятора 00100001 передано и размещено в ячейку памяти с адресом 2000. Эта ячейка памяти была индефицирована в тексте программы двумя раздельными байтами (0007 и 0008). Таким образом, ячейка памяти программы 0006 содержит код операции (КОП) В7 прямой команды STORE, два следующих байта за ней указывают соответственно на старший и младший байты адреса.
Типовая документация содержит информацию о структуре интегральной схемы, схемы выводов и назначения каждого из них. Схематизируется архитектура МП, описываются его основные свойства. Обычно МП помещается в корпус интегральной системы с 42 – строчными выводами, эти корпуса бывают пластмассовыми и керамическими (количество выводов может быть значительно больше). На корпусе всегда есть метка в виде точки или желобка, непосредственно после этой отметки, в направлении обратным ходом часовой стрелки, находится вывод 1 интегральные схемы и далее в том же направлении выхода нумеруются.
INTL 80-80:

Выводы 20,2,11,28 - являются выводами питания.
Выводы 15 и 22 – являются входами внешнего двухфазного генератора тактовых импульсов (таймер).
Вывода
SYNC, DBIN, WAIT,
, HLDA, INTE – несут сигналы
управления и синхронизации всем прочим элементам системы.
Выводы READY, HOLD, INT, RESET – являются входами управления, они воспринимают информацию от прочих элементов вычислительной системы.
Типовая документация содержит так же структурную схему МП, которая содержит внутренние регистры: аккумулятор; пары регистров ВС, DE и HL; указатель стека SP; регистр состояния, а так же несколько регистров временного хранения данных. На этой схеме так же отражены: регистр команд, дешифратор команд и устройство управления и синхронизации. Используемые программистом регистры B и С, D и Е, H и L – являются универсальными. Указатель стека, счетчик команд и регистр состояния являются специальными регистрами.
Важной особенностью является то, что пара регистров H и L может быть использована в качестве адресного регистра, при косвенной адресации. Документация содержит разработанные временные диаграммы, которые показывают соотношение во времени между тактовыми импульсами на выходе ГТИ и другими внешними сигналами (синхронизации, записи, ввода/вывода и т.п.).
Использование пары регистров HL (имя регистра) в качестве указателя адреса является важным свойством типового МП.
Рассмотрим задачу сложение содержимого трех последовательных ячеек памяти и размещение суммы в следующей ячейке памяти. Программа загружается в ячейке памяти с 2000Н по 200А, а три слагаемых (ØС + ØА + Ø7) расположены в ячейке памяти в 2100 по 2102. Программа содержит 7 команд. Так же следует помнить, что текущая сумма будет всегда помещаться в аккумулятор, который вначале содержит первое слагаемое ØС.
Команда 1– 3А: приказывает МП загрузить (LOAD) в аккумулятор содержимое ячейки памяти 2100Н.

После выполнения команды аккумулятор будет содержать первое слагаемое ØС.
Команда 2 – 21Н: приказывает МП загрузить (LOAD) число 2101Н в пару регистров HL. Емкость этой пары 16 бит (2 байта). Содержимое 1-ой ячейки памяти 2004 представляет собой младший байт регистра L, а 2005 старший байт регистра Н.

Команда 3 – 86Н: приказывает МП выполнить сложение (ADD) содержимого аккумулятора (ØС) с содержимым ячейки памяти, адрес которой содержится в паре регистров HL.

Команда 4 – 23Н: содержимое пары регистров HL инкрементируется.

Команда 5 – 86Н: сложить содержимое аккумулятора с содержимым ячейки памяти с адресом 2102, на который указывает пара регистров HL.

Команда 6 – 23Н: инкрементировать пару регистров HL.

Команда 7 – 77Н: поместить (STORE) содержимое аккумулятора (окончательную сумму) в ячейку памяти, на которую указывает пара регистров HL, т.е. по адресу 2103.

Вход требования прерывания INTR отвечает на высокий уровень сигнала внешнего устройства. Предполагаем, что в устройстве интерфейса ввода загружается 8 бит параллельных данных готовых для передачи в МП. Тогда, описание процедуры прерывания имеет следующую последовательность:
1. Интерфейс ввода выдает сигнал требования прерывания в направлении МП.
2. МП завершает выполнение текущей команды, находящейся в памяти по адресу 2006.
3. Поскольку, управление должно обеспечить последующее обращение к команде по адресу 2007, содержимое счетчика команд (именно 2007) и содержимое большинства регистров МП помещается в специальную область ОЗУ, называемую стеком. Содержимое стека будет позже извлечено в определенном порядке в регистры МП и счетчик команд.

4. В МП разветвляется в предопределенный адрес памяти и начинает выполнение программы обслуживания прерывания (20D0). МП тогда выполняет команды подпрограммы, которые обеспечивает выполнение операции ввода и размещения. По адресу 20DE МП находит конец этой подпрограммы и получает приказ вернуться в основную программу.
5. Перед возвращением в основную программу данные регистров и счетчик команд, помещенные в стеке, возвращаются в МП.
6. Теперь счетчик команд отсылает МП в память по адресу 2007, т.е. в основную программу и нормальное ее выполнение продолжается.
Прерывание является нужным способом, позволяющим периферийным устройствам вмешаться и заставить МП выполнять требуемую операцию почти сразу.
Многие МП обладают несколькими прерываниями. Обслуживание и последовательность прерывания обеспечивается соответствующими инструкциями в тексте некой программы программистом.
Типовой МП содержит указатель стека. Указатель стека – это специализированный 16-тиразрядный регистр – счетчик, содержимым которого всегда является адрес. Этот адрес принадлежит особой группе ячеек памяти данных, который называется стеком. Стек, как правило, размещается в ОЗУ или иногда в физической локализованной на кристалле МП группе ячеек памяти. Стек типового МП будет находиться в ОЗУ и его положение определяется программистом. Указатель стека загружается старшим адресом, представляющим собой вершину стека.

В примере указатель стека содержит адрес 220А, что на единицу старше первой ячейки памяти стека 2209. Данные в стек можно записать, используя команды поместить (PUSH) и вызвать (CALL). Данные могут быть считаны из стека по командам извлечь (POP) и возврат (RETERN). Стек функционирует как память с последовательными доступом по типу: данные, поступившие последними, извлекаются первыми. Например, команда PUSH приводит к тому, что содержимое пары регистров HL помещается в стек.

1. Указатель стека МП декрементируется от 220А до 2209.
2. Указатель стека показывает на ячейку памяти 2209 по адресной шине и старший байт регистра HL помещается в стек.
3. Указатель стека снова декрементируется от 2209 до 2208.
4. Указатель стека указывает на ячейку 2208 по адресной шине и младший байт из регистра HL загружается в стек.
Рассмотрим так же операцию загрузки в стек, содержимого аккумулятора и регистра состояния.

5. До операции указатель стека указывает на ячейку памяти 2208, ее называют вершиной стека, затем указатель стека декрементируется до 2207.
6. Указатель стека указывает на ячейку памяти 2207 и содержимое аккумулятора загружается в стек по этому адресу.
7. Указатель стека декрементируется до 2206.
8. Указатель стека указывает на ячейку памяти 2206 и содержимое регистра состояния (11111111) загружается по этому адресу.
Стек может продолжать расти, пока длится процесс загрузки в него, т.е. длина стека формально не имеет ограничений, единственным ограничением является объем ОЗУ.
Рассмотрим команду POP – аккумулятор и регистр состояния свободны до операции извлечения из стека.

1. Указатель стека указывает на вершину, т.е. на адрес 2206, содержимое регистра состояния (11111111) извлечено из стека и переслано в АЛУ.
2. Указатель стека инкрементируется с 2206 до 2207.
3. Указатель стека указывает на адрес 2207, содержимое вершины стека извлекается и пересылается в аккумулятор.
4. Указатель стека инкрементируется до 2208 и указывает теперь на следующий адрес извлечения из стека.
Содержимое аккумулятора и регистра состояния было восстановлено до тех значений, которые были до операции PUSH.
Команды PUSH и POP используются всегда совместно, однако, между ними располагаются другие команды, которые меняют данные, содержащиеся в регистрах МП.
ADI – C6 – сложить аккумулятор с данными.
ADD L – 85 – сложить содержимое регистра L с содержимым аккумулятора.
ADD H – 84 – сложить содержимое регистра H с содержимым аккумулятора.
ADD М – 86 – сложить содержимое аккумулятора с содержимым ячейки памяти, на которую указывает пара регистров HL.
SUI – Ø6 – вычесть данные из аккумулятора.
SUB L – 95 – вычесть содержимое регистра L из содержимого аккумулятора.
SUB H – 94 – вычесть из содержимого регистра Н в аккумулятор.
SUB М – вычесть данные, расположенные по адресу, на которую указывает пара регистров HL, из аккумулятора.
INR A – 3C – к содержимому аккумулятора +1.
INX H – 23 – инкремент пары регистров HL.
DCR A – 3D – декрементировать (- 1) аккумулятор.
DCX H – 2B – декрементировать пару регистров HL.
CPI – FE – сравнить содержимое аккумулятора с данными (в следующей ячейке памяти).
CMP L – BD – сравнить содержимое аккумулятора с содержимым регистра L.
CMP H – сравнить содержимое аккумулятора с содержимым регистра H.
CMP M – сравнить аккумулятор с ячейкой памяти, на которую указывает пара регистров HL.
Содержит команды сложить, вычесть, инкрементировать, декрементировать и сравнить.
Каждая команда точно оговаривает различные источники другого слагаемого.
Команда ADI – это команда сложить непосредственно, она является двухбайтовой. Ее формат (код операции С6) содержится в первом байте команды, а непосредственно за ним, во втором байте, находятся данные для сложения с содержимым аккумулятора.

Команда ADD L – содержимое аккумулятора (OF) складывается с содержимым регистра L (01). Полученная в результате выполнения команды сумма (10) помещается в аккумулятор.

Команда ADD H – выполняется так же.
Команда ADD М – однобайтовая команда – сложить с косвенным адресом. Адрес второго слагаемого задан в более сложной форме с использованием так называемого способа косвенной регистровой адресации. При такой адресации пара регистров HL указывает 16-тиразрядный адрес памяти, где хранится второе слагаемое.

Команда вычитания SUI.
Эта операция выполняется следующим образом: осуществляется сложение первого числа и второго, представленного в дополнительном коде.
Дополнительный код FF второго числа складывается с первым числом, что дает сумму 100001000. В старшем девятом бите суммы единица является переполнением и не принадлежит разности 00001000. МП использует это переполнение для установления индикатора переноса CY в регистре состояния. Вычитая, МП инвертирует переполнение, и результат становится содержимым индикатора переноса CY.
Допустим,
первое слагаемое 5 находится в аккумуляторе, а второе слагаемое находится в регистре
L.

Команда сравнение (СМР) – вычитает содержимое регистра памяти из содержимого аккумулятора, но при этом не изменяет содержимого ни того, ни другого. Индикаторы регистра состояния подвержены воздействию команд сравнения.
Например, сравнить содержимое аккумулятора с содержимым регистра L.

Логические команды составляют еще одну группу команд МП. Состав этих команд следующий: логическое умножение – И, логическое сложение – ИЛИ, ИЛИ – исключающее, отрицание – НЕ и сдвиг. В этой группе команд именно аккумулятор составляет ядро большинства операций. Как и при арифметических операциях, способ адресации и здесь влияет на способ и место нахождения других данных в системе. Команда ANI выполняет логическое умножение над содержимым аккумулятора (00010011) и содержимым программной памяти после команды (00000001). Содержимое аккумулятора подтверждается операции И побитно. И в соответствии с таблицей истинности для этой операции имеем: 00000001. Результатом всех операций И будет сброс индикатора переноса. Так же результат операции И проверяется с целью определения не ноль ли он и если нет, индикатор нуля Z сбрасывается в ноль.

Пример операции И с косвенной операцией (ANA M). Содержимое аккумулятора подвергается операции И (бит с битом) с содержимым ячейки памяти указанной парой регистров HL. Допустим, в аккумуляторе – 00111100, а в ячейке памяти – 00000001. Результат умножения будет 00000000, этот результат размещается в аккумуляторе. Индикатор переноса CY сбрасывается в ноль, кроме того, результат проверяется на ноль и поскольку, ответ да, индикатор нуля Z устанавливается в единицу.

В обоих примерах второй операнд (00000001) используется как маска. В первом примере она используется для сброса в ноль 7 старших бит, а во втором примере, с учетом наличия индикатора нуля, для тестирования значений ноль или единица в позиции младшего бита аккумулятора.
Команда ИЛИ
Мнемоника ORA. Выполняется с содержимым аккумулятора и содержимым какой-либо ячейки памяти или регистра.

Команда ИЛИ – исключающее
Мнемоника XRA. Этих команд так же несколько, в зависимости от способа получения данных.
Например. Выполним команду ИЛИ -
исключающее над самим аккумулятором, т.е. Аккумулятор
Аккумулятор.

Выполнение этой операции любого числа с самим собой всегда даст результат все нули, при этом индикатор нуля Z устанавливается в единицу, что означает нулевое содержимое аккумулятора.
Команда циклического сдвига с переносом
Мнемоника RAR.
Например, RAR А (сдвиг вправо с переносом).
![]()
Например.

Содержимое аккумулятора сдвинуто на одну позицию вправо и его младший бит (единица) передается в позицию индикатора переноса CY, тогда как имевшийся там бит (ноль) занимает позицию старшего бита аккумулятора. После завершения операции CY =1, а Z=0. Используя одну или несколько команд циклического сдвига, можно тестировать весь заданный состав бит, а индикатор переноса, может быть, затем проверен командой условного ветвления.
Команды логических операций используются, как правило, для манипуляции с переменными по законам алгебры логики. Они так же могут быть использованы для тестирования и сравнения бит в слове.
Эти команды выполняют передачу данных из регистра в регистр, размещение данных в памяти, размещение извлеченных из памяти данных в устройство ввода/вывода. Так же эти команды устанавливают индикатор переноса. Почти все эти команды не влияют на индикаторы регистра состояния. Каждая команда передачи данных содержит адрес источника и назначения данных. Способы адресации ориентированны на то, где и как осуществляется поиск данных. К основным в этой группе команд относятся:
· MOV R1, R2 – передача из регистра 2 в регистр 1,
· MVI, R (M) – загрузить регистр (или память),
· LXI R1.2 – загрузить пару регистров LHL, LDA, STA, SHLD, IN, OUT, STC – команды передачи данных.
Например, команда MOV A, L – следующая за мнемоникой буква А указывает назначения тогда как последняя буква L индефицирует источник данных.

Команда SPHL – здесь источником данных является пара регистров HL, приемником 16-тиразрядный указатель стека SP.

Существует несколько команд непосредственной загрузки данных. Эти команды часто используются для размещения начальных значений в регистры МП.
Команда LXI H – пара регистров HL должна быть загружена данными, следующими непосредственно за кодом операции в программной памяти. Эта команда является трехбайтовой: 1 байт – код операции (21); 2-ой байт – содержит младший байт и помещается в регистр L; 3-й байт – это старший байт, который помещается в регистр H.

Команда загрузки пары регистров HL с прямой адресацией LHLD. Второй и третий байт являются 16-тиразрядным адресом памяти данных для загрузки.

МП преобразует 2 следующих за кодом операции байта в 16-тиразрядный адрес, который служит указателем адреса памяти данных (ОЗУ) и загружается в пару регистров HL.
Типовой МП снабжен несколькими командами размещения. Например, команда STA - загрузка данных с прямой адресацией. Содержимое аккумулятора помещается в память, на которую указывает 16-тиразрядный адрес, составленный 2 и 3 байтом команды.

Команда ввода (IN) – по сути, идентична команде загрузки, только здесь источником данных является порт ввода, который идентифицируется 8-миразрядным числом (адрес устройства ввода/вывода). Назначение данных из порта всегда аккумулятор.

Данные порта 00001111, на который указывает второй байт команды, передаются и размещаются в аккумулятор.
К этим командам относятся:
· IMP – безусловный переход по адресу;
· IZ – перейти, если ноль по адресу;
· INZ – перейти, если не ноль по адресу;
· IC - перейти, если перенос;
· INC – перейти, если нет переноса по адресу.
Обычно МП выполняет команды последовательно, т.е. 16-тиразрядный счетчик команд типового МП содержит всегда адрес следующий, извлекаемый из памяти команды до ее выполнения. Его содержимое (счетчик команд) обычно повышается на 1, при каждом счете.
Команды ветвления или перехода являются средством изменения значения содержимого счетчика команд и следовательно изменение нормальной последовательности выполнения программы.
Команда IMP – перейти. Она является трехбайтовой. Используется для изменения специфического адреса в счетчике команд.

Адрес 2000Н загружен в счетчик команд, информация об этом адресе следует непосредственно за кодом операции, поэтому такая адресация называется непосредственной. Младший байт адреса находится во втором байте памяти сразу за кодом операции. Команду безусловного перехода можно рассматривать как способ загрузки новой информации об адресе в счетчике команд.
Остальные команды ветвления являются командами условного перехода. Эти команды повлекут за собой непосредственную загрузку адреса только, если будет выполнены специальные условия. В противном случае, счетчик команд будет нормальным способом инкрементирован.
Например, команда IZ – перейти, если ноль.
В этом случае счетчик команд 2017Н до операции будет нормально инкрементирован, если только индикатор нуля Z неустановлен в 1. МП проверяет это и находит 1, значит, результат последней арифметической или логической операции был ноль. Условие перехода выполнены и МП загружает новый адрес 2008Н в счетчик команд. Этот новый адрес поступает из ПЗУ. Следующей выполненной командой программы будет команда размещения данных в памяти по адресу 2008Н (но не 2018Н).

Команды перехода или ветвления существуют практически во всех программах МП. Они очень эффективны, как средство принятия решений и удобны для формирования циклов программ.
Этих команд две: команда вызова CALL и команда возврата RET. Эти команды всегда используются парами, т.е. если в тексте программы есть команда CALL, ее всегда сопровождает команда RET. Трехбайтовая команда CALL используется основной программой для перехода МП к подпрограмме.

В примере подпрограмма (п/п) является короткой последовательностью команд, целью которой является создание интервала времени в течение 1 секунды.
Когда МП передает первую команду CALL по адресу 1000Н, он находит адрес перехода в двух следующих байтах программы. Адрес, следующий за CALL команды, отправляется (2010) в стек и МП переходит тогда в начало подпрограммы по адресу 1000Н. Команды, составляющие эту программу, выполняются до тех пор, пока МП не встретит команду возврата RET. Сохраняющий в стеке адрес 2010 помещается в счетчик команд и МП продолжает выполнение основной программы, принимая ее там, где он ее покинул. Эта программа выполняется до тех пор, пока МП не встретит другую команду подпрограммы вызова CALL по адресу 2020. МП сохраняет адрес следующей команды 2023 в стеке и переходит к подпрограмме, находящейся по адресу 1000Н. После завершения выполнения этой подпрограммы команда возврата RET извлекает из стека адрес следующей команды основной программы (2023) и загружает ее в счетчик команд.
Данная подпрограмма может быть использована много раз в ходе выполнения одной и той же основной программы.
Подпрограммы, как правило, размещены в ПЗУ МП, но в некоторых случаях для ускорения выполнения программ, подпрограммы размещают в ОЗУ.
Команда вызова сочетает функции оператора загрузки в стек и перехода.
Эта команда сначала загружает в стек содержимое счетчика команд. После этого счетчик команд должен быть загружен новым адресом для выполнения перехода к подпрограмме.
Нарисуем блок-схему выполнения этой команды:

Имеет место следующей последовательности операции:
1. Указатель стека декрементирован от 210А до 2109.
2. Старший байт счетчика команд загружается в стек по адресу 2109.
3. Указатель стека декрементируется до 2108.
4. Младший байт счетчика команд загружается в ячейку памяти с адресом 2108.
5. Младший байт адреса подпрограммы загружается в младший байт счетчика команд.
6. Старший байт адреса перехода загружается в старший байт счетчика команд.
После этого МП ответвляется по адресу, на который указывает счетчик команд (в примере 1000Н). Этот адрес является началом подпрограммы. В конце подпрограммы находится команда RETERN. Обнаружив ее, МП извлекает в известном порядке из стека сначала младший, затем старший байты и размещает их в счетчике команд (в примере 2010). После этого продолжается выполнение основной программы до следующей команды CALL.
Имеется ряд других таких команд, как команды обслуживания стека, отсутствие операции, команда остановок и др. При их выполнении индикаторы регистра состояния не меняются.
Программист должен:
1. Знать состав команд МП.
2. Быть хорошо знаком с расположением регистров МП.
3. Знать общую архитектуру ЭВМ.
Этапы развития программы могут быть представлены следующим образом:
· Определить и проанализировать задачу.
· Начертить структурную схему решения.
· Записать программу на ассемблере.
· Записать или генерировать программу в кодах.
· Загрузить программу на решение.
· Документировать программу.
Например.
Сложение содержимого трех последовательных ячеек памяти и размещение суммы в памяти.

Эта схема называется функционально-структурной. Она не содержит адекватных деталей, которые не позволяют перейти ее прямо в сегмент программы на ассемблере или в машинном коде.
Нарисуем подробную функциональную схему:

Подробная функциональная схема организации решения задачи сильно зависит от архитектуры и состава команд данного МП. В то время, как общая функциональная схема может быть использована для любой вычислительной системы, т.е. она инвариантна по отношению к системе команд и архитектуре.
Затем следует записать версию подробной структурной схемы на ассемблере в 4 типовых поля: метка, мнемоника, операнд и комментарий.
Метка |
Мнемоника |
Операнд |
Комментарий |
|
|
LXI |
Н, 2010Н |
Загрузить адрес 2010Н в пару регистров HL. Эта пара регистров используется как указатель адреса. |
|
|
MOV |
А, М |
Поместить первое число из ячейки памяти с адресом 2010Н в аккумулятор (А). |
|
|
INX |
Н |
Инкрементировать пару регистров HL до 2011Н. |
|
|
ADD |
М |
Сложить второе число в ячейке памяти 2011Н с содержимым А. |
|
|
INX |
H |
Инкрементировать пару регистров HL до 2012. |
|
|
ADD |
M |
Сложить третье число в ячейке памяти 2012 с содержимым А. |
|
|
INX |
Н |
Инкрементировать пару регистров HL до 2013. |
|
|
MOV |
М, А |
Поместить сумму из А в ячейку памяти 2013. |
|
|
HLT |
|
Остановить МП. |
Записанная версия должна быть переведена в состав бит из 0 и 1, понимаемых МП и называемых машинным кодом.
Это можно сделать с помощью специальных программ или вручную.
Вручную кодирование выполняется следующим образом:
1. найти код операции каждой мнемоники в таблице состава команд.
2. определить операнды (данные и адреса), когда это необходимо передать командами из нескольких байт.
3. установить адреса памяти в последовательности каждой команды и операнда.
|
Шестнадцатеричная |
Мнемоника |
Операнд |
Комментарий |
|
|
Адрес |
Содержимое |
|||
|
2020 2021 2022 |
21(код операции) 10 (младший байт) 20 (старший байт) |
LXI |
Н, 2010Н |
Загрузить адрес 2010Н в пару регистров HL, как указатель адреса. |
|
2023 |
7Е |
MOV |
А, М |
Загрузить первое число из ячейки памяти с адресом 2010Н в А. |
|
2024 |
23 |
INX |
Н |
Инкрементировать пару регистров HL до 2011Н. |
|
2025 |
86 |
ADD |
М |
Сложить второе число с адресом 2011Н с содержимым А. |
|
2026 |
23 |
INX |
H |
Инкрементировать пару регистров HL до 2012. |
|
2027 |
86 |
ADD |
M |
Сложить третье слагаемое из ячейки памяти 2012 с содержимым А. |
|
2028 |
23 |
INX |
Н |
Инкрементировать пару регистров HL до 2013. |
|
2029 |
77 |
MOV |
М, А |
Поместить сумму из А в ячейку памяти, на которую указывает содержимое пары регистров HL. |
|
202А |
76 |
HLT |
|
Остановить программу. |
Затем нужно проверить программу в том смысле работает ли она. Эта операция представляет собой процесс отладки программы (поиск и устранение ошибок).
Последним этапом программирования является документирование. Документировать программу значит дать ее описание, указывающее в какой последовательности выполняются операции. Сюда входят: блок-схемы алгоритмов вычислений, списки, данные, адреса использованных подпрограмм и развернутый комментарий.
Пример: Найти большее число и поместить его в определенную ячейку памяти.

Во-первых, в 2-х кадрах блок-схемы представлены операции загрузки чисел в регистре A и L. Команда сравнение, не разрушая содержимого регистров, вычитает из содержимого Аккумулятора содержимое регистра L. Результат сравнения изменяет состояние индикаторов (флагов) в регистре состояния. Следующий кадр называется знаком принятия решений. Он завершает в программе этап решения и содержит поставленный вопрос [(A) ≥ (L)]? Если да, то программа продолжается последовательно и содержимое аккумулятора помещается в память, затем МП останавливается. Если нет, то программа ответвляется и содержимое регистра L помещается в память, затем МП останавливается.
|
Метка |
Мнемоника |
Операнд |
Комментарий |
|
|
MVI |
A, ØF |
Загрузить число 15 (в десятичной форме) в аккумулятор. |
|
|
MVI |
L, Ø6 |
Загрузить число Ø6 в регистр L. |
|
|
CPM |
L |
Сравнить содержимое А с содержимым регистра L, индикатор CY регистра состояния =1, если А<L. |
|
|
JC |
STORE, L |
Перейти к STORE, L,если CY=1 (если A<L). В противном случае продолжить последовательность. |
|
|
STA |
2040H |
Загрузить содержимое А в ячейку памяти 2040. |
|
|
HLT |
|
Остановить МП. |
|
STORE, L |
MOV |
A, L |
Поместить регистр L в А. |
|
|
STA |
2040H |
Загрузить содержимое А в ячейку памяти 2040. |
|
|
HLT |
|
Остановить МП. |
В таблице представлена программа на ассемблере, которая решает задачу нахождения наибольшего числа и размещения его в памяти по адресу 2040.
Таким образом, рассмотренный на структурной схеме способ ветвления осуществляется командами перехода, согласно которым принимаются решения, основанные на состоянии индикаторов в регистре состояния.
Вычислительные машины (системы) особенно эффективны в случае выполнения повторяющихся задач.
Пример.

Структурная схема размещения ряда чисел (от 0 до 8) последовательно в память с адресами от 2040 до 2048. Два первых кадра соответствуют начальной загрузке пары регистров HL и аккумулятора значениями 2040 и ØØ соответственно. Третий кадр соответствует процессу размещения данных в памяти, он будет повторяться 9 раз, в ходе выполнения этой программы. МП, повторяя свои действия, размещает содержимое аккумулятора в памяти по адресу, указанному в паре регистров HL. Четвертый и пятый кадры представляют операции, которые изменяют адрес в паре регистров HL и числа в аккумуляторе. Кадр сравнение и знак принятия решения составляют операцию тестирования. Команда сравнение вычитает число Ø9 из содержимого аккумулятора для установки или сброса индикатора нуля в регистре состояния.
Если содержимое аккумулятора меньше 9 индикатор нуля сброшен. Команда сравнения и условного перехода используются для проверки изменяющегося счета и определения момента выхода из цикла.
|
Метка |
Мнемоника |
Операнд |
Комментарий |
|
|
LXI |
H, 2040 |
Загрузить число 2040 в пару регистров HL. |
|
|
XRA |
A |
Сброс А в ØØ. |
|
LOOP |
MOV |
M, A |
Поместить А в М. |
|
|
INX |
H |
Инкремент HL. |
|
|
INR |
A |
Инкремент А. |
|
|
CPI |
Ø9 |
Сравнить А= Ø9. Если да, то индикатор нуля Z установится в единицу. |
|
|
JZ |
LOOP |
Перейти к LOOP, если Z=0, т.е. если содержимое А ≠ Ø9, если да, то продолжить последовательно. |
|
|
HLT |
|
Остановить МП. |
Существуют подпрограммы, очень часто используемые одной и той же типовой программой или одним и тем же программистом в различных программах. Передача управления программой в подпрограмме выполняется одной командой вызова (CALL). Возврат или восстановление управления основной программой осуществляется командой возврата (RET). Кроме того, используются команды размещения в стек и извлечения из стека – используются как текущие вместе с подпрограммой.
Пример: В задачу МП входит ввести 2 отобранных числа, образовать их сумму и сохранить ее, затем, эта сумма должна быть умножена на масштабирующий коэффициент и размещена так же в памяти. Это связано с тем, что предыдущая сумма должна быть восстановлена в аккумулятор, затем эта сумма проверяется знаком принятия решения и в этом случае, если она больше 10Н, программа переводится на сигнализацию.
Нарисуем блок-схему.
Три первые команды восстанавливают указатель стека пару регистров HL и аккумулятор соответственно до 20СØ, 2040 и ØØ.
Четвертая команда складывает содержимое аккумулятора с содержимым ячейки памяти, на которую указывает пара регистров HL. Например, содержимое памяти по адресу 2040 – Ø5. После выполнения четвертой команды, содержимое аккумулятора будет Ø5 (ØØ + Ø5 = Ø5).
Пятая команда основной программы инкрементирует содержимое пары регистров HL.
Шестая команда складывает содержимое памяти по адресу 2041 (Ø9) с содержимым аккумулятора. В результате Ø5 + Ø9= ØЕ.
Следующая команда PUSH PSW сохраняет содержимое аккумулятора и индикаторы регистра состояния. Это должно быть выполнено потому, что следующая команда вызова подпрограммы разрушит содержимое этих регистров, при выполнении программы умножения.
Операция вызова помещает адрес команды в последовательность основной программы в стек и затем переходит к адресу первой команды подпрограммы умножения.
Например, адрес 2050 (adr. 2050). В примере подпрограммы осуществляется умножение суммы ØЕ * 2 = 1С и произведение помещается в аккумулятор. После возврата в основную программу адрес следующей последовательной команды извлекается из стека и например, равен 200Е.
Т.к. команды размещения в стек и извлечение из него парные, то содержимое аккумулятора и регистра состояния восстанавливается командой POP PSW.
Теперь содержимое аккумулятора является не произведением, а сумма ØЕ. Эта сумма будет тестируема следующей командой CPI. Две следующие команды основной программы для тестирования суммы в аккумулятор. Команда сравнить непосредственно (CPI) выполняет операцию вычитание (ØЕ – 10 = FE). Результат вычитания будет FE, который представлен в дополнительном коде. Т.е. содержимое аккумулятора меньше, чем 10. Индикатор CY равен 1 и МП переходит к символическому адресу START.
Метка |
Мнемоника |
Операнд |
Комментарий |
|
|
LXI |
SP, 20CØ |
Поместить число 20CØ в указатель стека. |
|
|
LXI |
Н, 2040 |
Поместить адрес 2040 в пару регистров HL (указать область ОЗУ, в которой будут находиться данные). |
|
|
XRA |
A |
Сброс аккумулятора в ØØ. |
|
|
ADD |
М |
Сложить содержимое аккумулятора с М (2040). |
|
|
INX |
H |
Инкрементировать пару регистров HL. |
|
|
ADD |
M |
Сложить содержимое аккумулятора с содержимым ячейки памяти 2041. |
|
|
PUSH |
PSW |
Поместить в стек содержимое аккумулятора и индикатора регистра состояния. |
|
|
CALL |
MULTIPLAY |
Вызов подпрограммы MULTIPLAY, начинающейся с адреса 2042. |
|
|
INX |
H, 2042 |
Инкремент HL до 2042. |
|
|
MOV |
M, A |
Разместить произведение в ячейку памяти 2042. |