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

По косвенному адресу

PCHL – адрес перехода хранится в регистровой паре HL. При ее выполнении (HL) → PC.

Команды условного перехода

Jcon @, где con – мнемоника условия от английского слова condition.

Ранее отмечалось, что в качестве условия перехода используют состояние разрядов (флажков) РгП (F). Мнемоника, соответствующая этим состояниям, представлена на рис. 6.18.

Например: JC 8BFE – при C=1 переход по адресу 8BFE, при C=0 выполняется следующая по адресу команда.

Команды вызова ПП и возврата

Ранее отмечалось, что адрес возврата автоматически сохраняется в стеке, т.е. (PC) ® стек.

Безусловные команды

CALL @ – вызов подпрограммы;

RET – возврат из подпрограммы.

Условные команды

Ccon @ – вызов подпрограммы;

Rcon – возврат из подпрограммы.

Действие команд аналогично действию команд условного перехода, т.е. если условие истинно, то вызов или возврат. Если нет, то выполняются следующие команды.

Прочие команды управления

RST n, где n = 0,1,...,7 – рестарт по вектору прерывания n.

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

Этот адрес задается следующим образом. Команда RST имеет структуру 11NN N111, т.е. один байт. Трехразрядная комбинация NNN задается значением n (n = 0...7). В счетчик команд РС заносится значение 0000 0000 00NN N000, которое служит адресом соответствующего вектора прерывания.

Таким образом, задавая определенное значение n, можно сформировать адрес одного из 8- векторов прерывания. Эти адреса располагаются в зоне от 0000H до 0038H адресного пространства и идут через 8 байт, т.е. под них зарезервированы первые 64 ячейки памяти (каждому из 8- векторов отведено по 8 байт). В этих зонах (по 8 байт) записывают только команды перехода к соответствующим подпрограммам (обработчикам), которые располагаются в других областях памяти.

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

EI – разрешение прерывания. Эта команда ставится в начале участка программы, на котором разрешено прерывание. По этой команде триггер разрешения прерывания в УУ МП устанавливается в состояние 1.

DI – запрещение прерывания. Эта команда ставится в конце участка программы, на котором разрешалось прерывание, и сбрасывает триггер в состояние 0.

NOP – "пустая" команда. Осуществляет пропуск 4- тактов. Изменяется только PC.

HLT – останов. Вызывает прекращение выполнения программы и переход в состояние останова. МП отключается от внешних шин адреса и данных (т.е. их буферы переходят в состояние Z). На выходе WAIT (ожидание) устанавливается уровень 1. Это состояние может быть прервано сигналами запуска МП либо переводом его в состояние прерывания.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

1. Какие устройства необходимы для создания простейшей микро-ЭВМ?

2. Перечислите 5 вариантов структур микро-ЭВМ.

3. Использование промежуточного интерфейса.

4. Что включает в себя понятие "контроллер ПУ"?

5. Перечислите характеристики процессора I8080.

6. Регистры данных. Их назначение.

7. Регистры признаков. Какие признаки хранятся в этих регистрах?

8. Опишите принцип двунаправленного обмена данными между внутренней и внешней ШД.

9. Какими регистрами программист может пользоваться?

10. Приведите структурную схему микро-ЭВМ на базе МП КР580ВМ80.

11. Из каких тактов состоит машинный цикл?

12. Перечислите форматы данных МП КР580ВМ80.

13. Перечислите форматы команд МП КР580ВМ80.

14. Какие способы адресации используются в МП КР580ВМ80?

15. На какие группы можно разделить команды МП КР580ВМ80?

16. Пересылки однобайтовые. Приведите примеры команд из этой группы.

17. Пересылки двухбайтовые. Приведите примеры команд из этой группы.

18. Какие операции в аккумуляторе вы знаете.

19. Операции в РОН и памяти. Какие операции к ним относятся?

20. Перечислите команды управления.

КОНТРОЛЬНЫЕ ЗАДАНИЯ

1. На листах ответа должны быть указаны номер группы, фамилия студента и номер его варианта.

2. Номера вопросов выбираются студентом в соответствии с его двумя последними цифрами в зачетной книжке. В табл.6.1 а n-1 – это предпоследняя цифра номера, а n – последняя цифра. В клетках таблицы стоят номера вопросов, на которые необходимо дать письменный ответ.

Номера вопросов Таблица 6.1

a n a n-1
1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18
3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17
2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18
3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18
1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17
3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16
1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19
4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19
1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19
3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19

Операция безусловного перехода(БП) относится к операциям безусловной передачи управления и заключается в следующем. В начале операции содержимое СчК, указывающее на команду, которая следует за БП(адрес возврата), пересылается в Р1 АУ в случае, если в программе предусмотрен возврат; это позволяет сохранить адрес возврата путем дальнейшей пересылки содержимого Р1(например, операцией ЗГ) в память. Для этого в первых командах участка пограммы, к которому выполнен переход, должна быть предусмотрена соответствующая операция. На следующем этапе операции из ячейки ОЗУ или ПЗУ с адресом, указанном в команде БП, в СчК считывается содержимое 1-14 разрядов, которое является адресом перехода. По данному адресу далее делается обращение в ПЗУ за командой, к которой осуществляется переход.

Операция сдвига

В формате сдвига(ФСД) кодируются операции «Сдвиг арифметический правый(левый)» «Сдвиг логический правый(левый)». При их выполнении действия производятся над числом, находящимся в АУ. Признаками в команде задаются: направление сдвига(5 р), типы сдвигов(8,9 р) и их количество (1-4 р). В процессе выполнения операции сдвигаются разряды регистра Р2, результат фиксируется в регистрах Р2 и РСм, причем сдвиг вправо осуществляется на 3 разряда одновременно, сдвиг влево- на 1 разряд. Значение 5 разряда, равное «1» определяет сдвиг влево, равное «0» -вправо.

Операции являются циклическими. Количество циклов сдвига подсчитывается счетчиком циклов (СчЦ). Перед выполнением циклической части операции в СчЦ пересылается содержимое 1-5 разрядов команды, содержащей константу и знак сдвига. Далее содержимое Р2 пересылается в РСм. Сам сдвиг осуществляется за счет «косой» переписи содержимого регистров Р2 и Рсм в Р2’ и Рсм’ соответственно. Затем результат сдвига из РСм’ и Р2’ через СМ1 и СМ2 переписывается в Р2 и РСМ. Об окончании операции свидетельствует значение СчЦ =0.

В зависимости от типа сдвига(Л или А) сдвигаются либо все 16 разрядов(Л) либо только 15 разрядов(мантисса) без знакового(А). При А сдвиге вправо освободившиеся старшие разряды заполняются знаком, а при сдвиге влево освободившиеся младшие разряды заполняются нулями. При логическом сдвиге вправо или влево освободившиеся разряды заполняются нулями.

Так же можно программно изменять константу сдвигов.

32 Взаимодействие узлов и элементов структурной схемы процессора СВ при выполнении операций условного перехода.

Операции условного перехода



Выполнение операции начинается с проверки выполнимости условия перехода путем сравнивания значения признака результата предыдущей операции с кодом «маски» в команде. Если условие выполнено, то происходит переход к исполнению команды, адрес которой находится в адресно-операндной части формата ФУП. Если же условие перехода не выполняется, то исполняется команда, следующая в программе за командой «Условный переход».

Команда «Условный переход»(УП) занимает две рядом расположенные ячейки ПЗУ. В первой ячейке содержится команда, во второй адрес перехода. Условный переход определяется комбинацией в 7-9 разрядах команды, условие размещения адреса возврата определяется 6 разрядом.

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

При невыполнении условия перехода следующая команда выбирается из ячейки с кодом адреса i+2. В данном случае указанный код(адрес возврата) заносится в Р1 независимо от значения 6 разряда команды. Последнее определяется алгоритмом работы процессора СВ при расшифровке кода операции УП.

Занесение адреса возврата на РСМ связано с тем, что выход в кодувую шину из АУ имеет только указанный регистр.

Особенностью выполнения операции УП является то, что при наличии в разрядах «маски» команды кода 111 или 000 условный переход вырождается в безусловный или операцию засылки в базовые регистры соответственно. В этих случаях адресам перехода или адресом засылки в базовые регистры является содержимое адресно-операндной части команды(АОЧ).

При выполнении операции засылки в БР содержимое АОЧ пересылается в один или сразу несколько БР в зависимости от содержимого 15-17 разрядов команды. Адрес возврата в данном случае в Р1 и Рсм не пересылается.



Выполнение операции УП как операции БУП может быть использовано в прерываниях для перехода к прерывающим программам. Для этого в 5 разряде команды выставляется признак напрограммированного перехода(ПНП). В этом случае команда считывается в процессор из ПЗУ по сигналу прерывания (НПП). При этом адрес обращения в ПЗУ(адрес прерывания) вырабатывается схемой прерывания процессора.

Особенностью выполнения операции в этом случае является то, что адресом возврата при прерываниях является не адрес команды, следующей за командой в формате ФУП, а адрес команды, перед которой произошло прерывание. Обработка сигнала НПП происходит следующим образом. По этому сигналу схема прерывания процессора вырабатывает адрес прерывания(АПр), равный адресу первой ячейки команды перехода в формате ФУП(i). Этот адрес через коммутатор и регистр адреса ПЗУ передается в память. Адреса прерываний подобраны таким образом, что адрес первой ячейки команды УП(i) является четным, а адрес второй ячейки (i+1) – нечетным. Второй адрес получается путем изменения (аппаратурно) младшего разряда без участия СчК с нуля на единицу. В процессе считывания команды из ПЗУ и ее выполнения содержимое СчК (K+1) запоминается в регистре Р1 АУ, а содержимое второй ячейки команды (i+1), являющееся адресом перехода к команде с адресом j заносится в СчК. По новому содержимому СчК делается обращение в ПЗУ. Таким образом, в регистре Р1 запоминается адрес следующей команды на момент прерывания(K+1). После отработки прерывания этот адрес используется для возврата к прерванной программе.

33 Взаимодействие узлов и элементов структурной схемы процессора СВ при выполнении операций управления процессором и системой.

Команды микропроцессора.

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

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

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

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

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

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

Пример.

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

Очевидно, что для реализации данного алгоритма придется прервать последовательное выполнение команд. Для того, чтобы программа имела возможность менять алгоритм своей работы в зависимости от какого-либо условия, в системе команд любого процессора обязательно имеются команды передачи управления. К командам передачи управления отно­сятся следующие виды команд: команды условного перехода; команды безусловного перехода; команды перехода к подпрограмме; команды организации цикла. Рассмотрим все эти виды команд по порядку.

Команды условного и безусловного перехода

Оба этих вида команд предназначены для того, чтобы прерывать после­довательное выполнение программы и вызывать так называемый переход. Причем условный переход происходит только при соблюдении какого-либо условия. Безусловный переход выполняется всегда, как только программа встретит соответствующую команду. В качестве условий перехода может выступать одно из следующих логических выражений:

♦ величина А равна величине В;

♦ величина А не равна величине В;

♦ величина А меньше величины В;

♦ величина А больше величины В;

♦ величина А меньше или равна величине В;

♦ величина А больше или равна величине В.

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

Пример.

Рассмотрим пример применения условного и безусловного переходов. Для наглядности изобразим цепочку команд в программной памяти в виде последовательности графических элементов (см. рис. 2.2). Ход выполнения программы показан при помощи стрелок. Квадратиками обозначены обычные команды (команды перемещения и команды пре­образования данных). Кружочек с вопросом - это команда условного перехода. Скругленный элементе восклицательным знаком - это безусловный переход. Такая программа имеет две ветви. В случае, если условие есть ложь, выполняется ветвь номер 1. В случае, если условие - истина, выполняется ветвь номер 2.

Допустим, что условный переход производит сравнение кода нажатой клавиши с некоторой константой. Тогда действие, выполняемое услов­ным оператором, можно записать так: «Если код нажатой клавиши равен 0, перейти к выполнению ветви номер 2». Соответственно, в случае невы­полнения условия (например, считанное число равно 1), программа про­должит свою работу в обычном режиме и перейдет, таким образом, к выполнению ветви номер 1.

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

Команды безусловных переходов. Включают три мнемокода: JMP (безусловный переход), CALL (вызов подпрограммы) и RET (возврат из подпрограммы).

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

Первый формат обеспечивает переход в произвольную точку программы внутри текущего программного сегмента, для чего к содержимому IP добавляется в дополнительном коде 16-разряд­ное смещение, старший разряд которого является знаковым. Вто­рой, укороченный формат позволяет перейти к точке программы, отстоящей не более чем на -128-f-127 адресов от команды JMP. Наконец, третий формат осуществляет загрузку указателя команд 16-разрядным числом, которое размещено по исполни­тельному адресу ЕА, определяемому постбайтом. Этот переход называется косвенным, так как используется косвенная адреса­ция.

Для реализации безусловного перехода к точке программы, расположенной вне текущего программного сегмента, когда тре­буется перезагрузка сегментного регистра CS, используются четвертый и пятый форматы команды JMP.

Четвертый формат определяет прямой межсегментный пере­ход, при котором во втором и третьем байтах формата указан относительный адрес точки перехода, а в четвертом и пятом бай­тах- новое значение CS. Пятый формат с помощью постбайта позволяет определить исполнительный адрес ЕА, по которому на­ходится относительный адрес точки перехода (в байтах памяти с адресами ЕА, ЕА+1), и новое значение CS (в байтах памяти ЕА+2, ЕА+3).

Команда CALL позволяет вызвать подпрограмму, располо­женную как в текущем программном сегменте, так и в другой области памяти. Она имеет такие же форматы, что и команда JMP, за исключением укороченного. В отличие от команды JMP аналогичного формата по команде CALL перед изменением зна­чений IP или IP и CS происходит автоматическая запись в стек текущих значений этих регистров, что обеспечивает запомина­ние точки возврата из подпрограммы.

Для возврата из подпрограммы используется команда RET, под действием которой происходит передача управления по ад­ресу возврата, занесенному в стек при выполнении предыдущей команды CALL. При возврате из подпрограмм, расположенных в текущем программном сегменте, применяются первые два фор­мата команды RET, причем второй формат отличается от перво­го тем, что к содержимому указателя стека добавляется констан­та, записанная во 2-м и 3-м байтах команды. Это позволяет одновременно с возвратом из подпрограммы сбрасывать пара­метры, записанные в стек при выполнении этой подпрограммы и не используемые в дальнейшем.

Для межсегментного возврата применяются третий и четвер­тый форматы RET, которые обеспечивают восстановление содер­жимого как указателя команд, так и программного сегмента.

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

В мнемокодах команд условных переходов при сравнении чи­сел со знаком для обозначения условия «больше» используется буква G (Greater - больше), а для обозначения - «меньше» буква L (Less - меньше). Для аналогичных условий при сравне­нии чисел без знака используются соответственно буквы A (Abo­ve - над) и В (Below - под). Условие равенства обозначается буквой Е (Equal - равно), а невыполнение некоторого условия - буквой N (Not - не). Следует отметить, что допускается исползование двух различных мнемокодов для каждой команды; на­пример, мнемокоды JL и JNGF - эквивалентны, поскольку ус­ловия «меньше» и «не больше или равно» - идентичны.

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

Таблица 1.4

Мнемокод команды Условие Значение флагов
Для чисел со знаком
JL/JNGE Меньше/не больше или равно SF + OF = l
JNL/JGE Не меньше/больше или равно SF + OF = 0
JG/JNLE Больше/не меньше или равно (SF + OF) V ZF = 0
JNG/JLE Не больше/меньше или равно Для чисел без знака (SF + OF) V ZF = l
JB/JNAE Меньше/не больше или равно CF = 1
JNB/JAE Не меньше/больше или равно CF = 0
JA/JNBE Больше CF V ZF = 0
JNA/JBE Не больше Для прочих данных CF V ZF = 1
JE/JZ Равно/по нулю ZF = 1
JNE/JNZ Не равно/по нулю ZF = 0
JS По минусу SF = 1
JNS По плюсу SF = 0
JO По переполнению OF = l
JNO По отсутствию переполнения OF = 0
JP/JPE По четному паритету PF = 1
JNP/JPO По нечетному паритету PF = 0

Все команды условных переходов имеют одинаковый двух­байтовый формат, в первом байте которого задается код опера­ции (КОП), а во втором - 8-разрядное смещение, которое рас­сматривается как число со знаком и, следовательно, позволяет осуществлять изменение адреса в диапазоне от -128 до +127. При необходимости более отдаленного («дальнего») перехода по выполнению условия используется дополнительно команда безусловного перехода.

Время выполнения каждой из команд условных переходов указано для двух случаев: 1) условие выполнено и управление действительно передается в соответствии со смещением, 2) ус­ловие не выполнено, так что управление передается следующей команде.

Команды организации циклов. Введены в ЦП для удобства выполнения вычислительных циклов. К ним относятся следующие мнемокоды: LOOP (цикл, пока (СХ) не равно 0), LOOPNZ/LOOPNE (цикл, пока не нуль/не равно), LOOPZ/LOOPE (цикл, пока нуль/равно) и JCXZ (переход по нулю в СХ). Каждая из этих команд имеет двухбайтовый формат, во втором байте кото­рого указывается 8-разрядное смещение, используемое для орга­низации перехода. Это смещение рассматривается как число со знаком и перед вычислением адреса перехода оно расширяется со знаком до 16 разрядов.

Используя команды циклов совместно с командами манипу­ляции элементами строк, можно составлять достаточно сложные программы преобразования строк. Рассмотрим пример составле­ния программы для перевода строки данных, записанных в шестнадцатеричной системе счисления, в некоторый код, для которого перекодировочная таблица находится в памяти с начального ад­реса, указанного в ВХ, как это требуется для использования команды табличного преобразования кодов XLAT. Пусть далее исходная строка содержит 80 элементов и находится в памяти с относительного начального адреса 100, а строка-результат дол­жна быть размещена с относительного адреса 200. Программа, выполняющая перекодировку исходной строки в строку-резуль­тат, при значении флага направления DF=0 будет иметь вид:

MOV SI ,100
MOV DI ,200
MOV СХ, 80

Здесь использована команда табличного преобразования кодов XLAT, описанная в 1.2.

Команды прерывания. Включают три мнемокода: INT (пре­рывание), INTO (прерывание при переполнении) и IRET (воз­врат из прерывания).

Команда прерывания INT при v = 1 имеет двухбайтовый фор­мат, второй байт которого содержит 8-разрядное число, определя­ющее тип (type) или уровень прерывания. По команде INT type процессор переходит к выполнению программы обслуживания прерывания указанного уровня, причем автоматически выполня­ются действия, необходимые для обеспечения возврата в точку прерывания. Эти действия состоят в следующем: содержимое регистра флагов F записывается в стек (PUSHF), сбрасывают­ся флаги IF и TF, текущие значения регистра CS и указателя команд IP записываются в стек.

Для определения начального адреса программы обслужива­ния в соответствии со значением type используется таблица уровней прерывания. Для каждого из 256 уровней прерываний в этой таблице от­ведено по четыре байта: первые два байта определяют значение указателя команд IP, вторые - значение сегментного регистра CS. Эта четверка байтов определяет начальные адреса программ обслуживания (пары значений CS, IP), которые должны быть предварительно записаны в ячейки памяти по абсолютным адре­сам 0-3FFH. Адрес таблицы, соответствующий указанному в команде INT type уровню прерывания, определяется в ЦП сле­дующим образом. После запоминания в стеке текущих значений CS и ГР осуществляются загрузки: CS = type x 4 + 2 и IP = type x 4. Новые значения CS и IP, взятые соответственно из ячеек с адресами type x 4 + 2 и type x 4, определяют начальный адрес требуемой программы обслуживания.

Рассмотренная выше команда прерывания INT при значении поля v = 0 имеет однобайтовый формат, т. е. не требует специаль­ного указания уровня прерывания. Эта команда автоматически воспринимается процессором как прерывание третьего уровня (type=3) и обычно используется в программах в качестве контрольной точки.

Команда прерывания при переполнении INTO вызывает пе­реход на обслуживание прерывания четвертого уровня (type = 4) в случае, когда значение флага переполнения OF = 1. Команда INTO обычно используется после арифметических команд над числами со знаком. Обычно несколько первых уровней прерыва­ний (до 32) резервируются под обработку ряда специфических ситуаций, таких, например, как попытка деления на нуль, переполнение и тому подобных.

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

Однобайтовая команда IRET ставится в конце каждой про­граммы обслуживания прерывания и обеспечивает возврат из прерывания. По этой команде процессор извлекает из стека значение указателя команд IP и программного сегмента CS, а также восстанавливает прежнее содержимое регистра флагов F (как и по команде POPF). При необходимости содержимое остальных регистров ЦП, соответствующее прерываемой программе, может быть запомнено в стеке при переходе на программу обслужива­ния и затем восстановлено при возврате из нее с помощью команд обращения к стеку.

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

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

Х байтовая

JMP ADDR - безусловный переход. Управление передается команде, адрес которой указан во втором и третьем байтах команды перехода. (РС) ß [(ВYTE3)(ВYTE2)].

При выполнении команд условного перехода дальнейший выбор одной из последовательности команд зависит одного из четырех флагов: нуля (Z), знака результата (S), четности (P), переноса (C), т. е. сначала проверяется состояние одного из четырех флагов МП на выполнение указанного в команде условия, а затем происходит выполнение команды. При выполнении условия осуществляется переход по новому адресу, в противном случае выполняется следующая команда. Для удобства программирования предусмотрены проверки условий по единичным и нулевым значениям флагов CY (C), Z, S, P. Мнемоника команд условного перехода образуется добавлением буквы J (условие) к названию условия, а затем указывается адрес, куда следует перейти, если условие выполнено.



Все команды 3-х байтовые.

Условия переходов приведены в таблице 1

Таблица 1

Команды вызова подпрограмм и возврата из них, программное прерывание

Х байтовая

CALL ADDR - безусловный вызов подпрограммы по адресу, загружаемом в программный счётчик;

Однобайтовые

RET - возврат из подпрограммы безусловный;

RSTN - вызов подпрограммы прерывания. (N – номер прерывающей программы)

Составление программ

Язык ассемблер – это машинно-ориентированное средство программирования. Программа на языке ассемблер называется исходной .

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

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

Поле метки;

Поле кода операции;

Поле операнда;

Поле комментария.

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

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

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

Поле комментария начинается символом «;». Размещают описание назначения оператора. Это поле имеет вспомогательные функции и используется только программистом при составлении программы.

Все операторы записываются с помощью символов кода ASCII (американский стандартный код для обмена информацией).

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