Войти
Спортивный клуб - Skrodina
  • Чудо - лошадь с гривой до земли Породистые красивые лошади
  • Методы контроля и восстановления в тренировочном процессе легкоатлетов
  • Анонсированы группы The Boston Major
  • Преодолеваем заикание с помощью упражнений дыхательной гимнастики
  • Российская биатлонистка Екатерина Юрьева
  • Презентация к уроку по окружающему миру (подготовительная группа) на тему: Как животные помогают человеку
  • Условные и безусловные переходы. Команды передачи управления Как называется безусловное выполнение команды

    Условные и безусловные переходы. Команды передачи управления Как называется безусловное выполнение команды
    логическое ИЛИ , сложение по модулю 2 (Исключающее ИЛИ);
  • логические, арифметические и циклические сдвиги;
  • проверка битов и операндов;
  • установка и очистка битов (флагов) регистра состояния процессора ( PSW ).
  • Команды логических операций позволяют побитно вычислять основные логические функции от двух входных операндов. Кроме того, операция И (AND ) используется для принудительной очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие очистки, установлены в нуль). Операция ИЛИ (OR ) применяется для принудительной установки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие установки в единицу, равны единице). Операция "Исключающее ИЛИ" (XOR ) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащие инверсии, установлены в единицу). Команды требуют двух входных операндов и формируют один выходной операнд.

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

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

    Для примера на рис. 3.12 показаны действия, выполняемые командами сдвигов вправо.

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


    Рис. 3.12.

    Наконец, команды установки и очистки битов регистра состояния процессора (то есть флагов) позволяют установить или очистить любой флаг, что бывает очень удобно. Каждому флагу обычно соответствуют две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в нуль. Например, флагу переноса C (от Carry ) будут соответствовать команды CLC (очистка) и SEC или STC (установка).

    3.3.4. Команды переходов

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

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

    • команды безусловных переходов ;
    • команды условных переходов .

    В обозначениях этих команд используются слова Branch (ветвление ) и Jump (прыжок).

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

    Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий. В качестве таких условий обычно выступают значения флагов в регистре состояния процессора ( PSW ). То есть условием перехода является результат предыдущей операции, меняющей значения флагов. Всего таких условий перехода может быть от 4 до 16. Несколько примеров команд условных переходов :

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

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

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

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


    Рис. 3.13.


    Рис. 3.14.

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

    Для обратного возврата в точку вызова

    Операция безусловного перехода(БП) относится к операциям безусловной передачи управления и заключается в следующем. В начале операции содержимое СчК, указывающее на команду, которая следует за БП(адрес возврата), пересылается в Р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 Взаимодействие узлов и элементов структурной схемы процессора СВ при выполнении операций управления процессором и системой.

    Основы программирования МП устройств (Лекция)

    ПЛАН ЛЕКЦИИ

    1.Классификация команд микропроцессора

    2.Виды адресации

    3. Структура и форматы команд МП КР580ВМ80

    1.Классификация команд микропроцессора

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

    Классификация команд МП представлена на рисунке 8.

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

    Во многих случаях,в частности при сравнении МП со сходной архитектурой, оказывается полезной классификация команд в соответствии с архитектурными характеристиками МП.

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

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

    К командам связанным с обращением к памяти относятся:

    ЗАПОМНИТЬ (ЗАПИСАТЬ), по которой содержимое регистра засылается в ячейку памяти.

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

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

    ЗАГРУЗИТЬ НЕПОСРЕДСТВЕННО ,покоторойв регистр записывается константа, указанная в коде команды;

    ПЕРЕСЛАТЬ , по которой содержимое одного регистра пересылается в другой.

    К командам ввода–вывода относятся:

    ВВОД , покоторойсодержимоеустройства ввода засылается во внутренний регистр МП;

    ВЫВОД , покоторойсодержимоевнутреннего регистра МП (обычно аккумулятора) пересылается в устройство вывода.

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

    К командам безусловного перехода относятся:

    БЕЗУСЛОВНЫЙ ПЕРЕХОД (БП),по которой в программный счетчик записывается содержимое адресного поля команды БП, т.е. обеспечивается переход в программе по адресу, указанному в команде;

    БЕЗУСЛОВНЫЙ ПЕРЕХОД С ВОЗВРАТОМ (переход кподпрограмме),по которой впрограммныйсчетчик записывается новое содержимое (адрес первой команды подпрограммы),но в отличие от команды БПвпамяти сохраняется состояниепрограммногосчетчика и некоторых других регистров. При выполнении подпрограммы по ее последней команде ВОЗВРАТ восстанавливается содержимое программного счетчика и всех регистров.

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

    УСЛОВНЫЙ ПЕРЕХОД (УП) по адресу.В коде команды УП обязательно указывается проверяемое условие,в качестве которого в МП используются нулевоеилиненулевое значение результата,положительный или отрицательный знак результата, наличие или отсутствие сигналов переноса, переполнения и др.При выполнении условия в программный счетчик записывается содержимое адресного поля команды УП, т.е. обеспечивается переход в программе по адресу указанному в команде. При невыполнении условия управление передается следующей команде программы;

    УСЛОВНЫЙ ПЕРЕХОД С ВОЗВРАТОМ , которая отличается от команды БЕЗУСЛОВНЫЙ ПЕРЕХОД С ВОЗВРАТОМ тем, что переход к подпрограмме происходит только при выполнении указанного условия.

    Обычно в систему команд МП включается ещенескольковспомогательных команд, которые позволяют управлять состоянием регистров или триггеров влияющих на выполнение условных переходов, например: УСТАНОВИТЬ ФЛАГ,СБРОСИТЬ ФЛАГ, УСТАНОВИТЬ СТАРШИЙ РАЗРЯД АККУМУЛЯТОРА, СБРОСИТЬ СТАРШИЙ РАЗРЯД АККУМУЛЯТОРА и др.

    Команды обработкиданных делятся на арифметические и логические. К арифметическим относятся:

    СЛОЖИТЬ содержимое двух регистров или регистра и ячейки памяти;

    ВЫЧЕСТЬ из содержимого ячейки памятиилирегистрасодержимое регистра;

    УВЕЛИЧИТЬ НА 1 (ИНКРЕМЕНТ) содержимое ячейки памяти или регистра (указателя стека, индексного регистра, аккумулятора);

    УМЕНЬШИТЬ НА 1 (ДЕКРЕМЕНТ) содержимое ячейки памяти или регистра;

    СЛОЖИТЬ С УЧЕТОМ ПЕРЕНОСА ,по которой выполняетсясложениес учетом состояния триггера переноса. Это позволяет легко организовать обработку чисел большой длины;

    ВЫЧЕСТЬ С УЧЕТОМ ЗАЕМА ;

    СДВИГ содержимого ячейки памяти или регистра(обычнонаодин разряд).

    В подгруппу логических команд входят команды:

    И (ЛОГИЧЕСКОЕ УМНОЖИТЬ),по которой выполняется операция конъюнкции между содержимым двух регистров или ячейки памяти и регистра;

    ИЛИ (ЛОГИЧЕСКИ СЛОЖИТЬ),по которой выполняется операция дизъюнкции между содержимым двух регистров или ячейки памяти и регистра;

    НЕРАВНОЗНАЧНОСТЬ , по которой производится поразрядное сравнение содержимого двух регистров или ячейки памяти и регистра;

    ИНВЕРСИЯ содержимого ячейки памяти или регистра.

    2.Виды адресации

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

    Во–первых, большой объем памяти требует большойдлиныадреса, так какn–разрядный адрес позволяет обращаться к памяти емкостью 2n слов. Типовые 8–разрядные слова МП дают возможностьнепосредственно обращаться только к 256 ячейкам памяти,что явно недостаточно. Если учесть, что обращение к памяти является наиболее часто встречающейся операцией, то очевидно, что эффективность использования МП во многом определяется способами адресации к памяти большого объема прималой разрядности МП.

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

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

    Для согласования адресного поля команды малой разрядности с памятью большогообъема (для решения “страничной” проблемы) в МП применяются различные виды адресации:

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

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

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

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

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

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

    3. Структура и форматы команд МП КР580ВМ80

    Система команд МП серии КР580ВМ80 содержит команды трехформатов: однобайтные,двухбайтные и трехбайтные .

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

    Если в выполнении операции участвуют регистры, то один или два из них могут быть указаны в первом байте команды. При этом под номера регистров в поле команды отводятся вполнеопределенныеразряды: три младших разряда (b2 – b0) кодируют номер регистра источника, содержащего операнд, а три средних (b5 – b3) – номер регистра–приемника, вкоторый засылается результат операции.В тех случаях,когда оба или один из этих регистров не участвуют ввыполненииоперации, соответствующие разряды используются под код операции.

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

    000 – регистр В,100 – регистр Н,

    001 – регистр С,101 – регистр L,

    010 – регистр D,110 – ячейка памяти,

    011 – регистр Е,111 – аккумулятор А.

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

    Ряд команд МП предусматриваетобработкуилипередачучисел двойной длины. В этих случаях пары регистров В и С, D и Е или Н и L объединяются в 16–разрядные регистры,имеющие номера 00,01 и10 соответственно. Под номера регистровых пар в командах отводятся разряды b2 и b1 (регистр–источник),b5 и b4 (регистр–приемник), а разряды b0 и b3 используются для указания кода операции.

    К двухбайтным командам в МП относятся команды снепосредственной адресациейикоманды ввода–вывода.Соответственно второй байт команды этой группы содержит 8–разрядный операнд или 8–разрядный адрес устройства ввода или вывода.

    В трехбайтных командах второй и третий байтысодержат16–разрядные адреса (в командах с прямой адресацией) или 16–разрядные операнды (в командах загрузки регистровых пар и указателя стека).

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

    Для удобствасохранения и восстановления состояния МП во время прерываний и перехода к подпрограммам все указанные признакисохраняются вспециальномрегистре– регистре признаков. Расположение признаков в разрядах регистра приведено в таблице.

    гдеS – признак “знака” (принимает значениестаршегоразряда

    результата);

    Z – признак нулевого результата;

    АС –признак вспомогательного переноса (если есть перенос

    между тетрадами байта, то АС=1, иначе АС=0;

    Р – признак четности результата (если число единиц в байте

    результата четно, то Р=1, иначе Р=0);

    С – признак переноса или заема(если при выполнении коман–

    ды возник перенос из старшего разряда или заем в стар–

    ший разряд то С=1, иначе С=0).

    Примечание: Для команд логического умножения признак вспомогательного переноса АС принимает значение четвертого разряда результата.

    Полностью система команд МП серии КР580ВМ80 приведена в приложении учебного пособия "Микропроцессоры и микропроцес­сорные системы". Там же для каждой команды указывается как,после ее выполнения, изменяется значение каждого признака: устанавливается в соответствии с результатом операции (+), не изменяется (–), сбрасывается в нуль (0) или устанавливается в единицу (1).

    В общем случае команда должна содержать следующую информацию:

    –код операции,указывающий операцию,которую должен выполнить МП;

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

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

    –адрес следующей команды.

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

    В системе команд МП серии 580 имеются однобайтные, двухбайтные и трехбайтные команды.

    Информация о способе адресации выполняемой команды содержитсяв коде операции первого байта команды.

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

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

    Арифметические команды рассматривают коды операндов как числовые двоичные или двоично-десятичные коды. Эти команды могут быть разделены на пять основных групп:

    Команды операций с фиксированной запятой (сложение, вычитание, умножение, деление);

    Команды операций с плавающей запятой (сложение, вычитание, умножение, деление);

    Команды очистки;

    Команды инкремента и декремента;

    Команда сравнения.

    Команды операций с фиксированной запятой работают с кодами в регистрах процессора или в памяти как с обычными двоичными кодами. Команда сложения (ADD) вычисляет сумму двух кодов. Команда вычитания (SUB) вычисляет разность двух кодов. Команда умножения (MUL) вычисляет произведение двух кодов (разрядность результата вдвое больше разрядности сомножителей). Команда деления (DIV) вычисляет частное от деления одного кода на другой. Причем все эти команды могут работать как с числами со знаком, так и с числами без знака.

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

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

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

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

    Логические команды

    Логические команды выполняют над операндами логические (побитовые) операции, то есть они рассматривают коды операндов не как единое число, а как набор отдельных битов. Этим они отличаются от арифметических команд. Логические команды выполняют следующие основные операции:

    Логическое И, логическое ИЛИ, сложение по модулю 2 (Исключающее ИЛИ);

    Логические, арифметические и циклические сдвиги;

    Проверка битов и операндов;

    Установка и очистка битов (флагов) регистра состояния процессора (PSW).

    Команды логических операций позволяют побитно вычислять основные логические функции от двух входных операндов. Кроме того, операция И (AND) используется для принудительной очистки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие очистки, установлены в нуль). Операция ИЛИ (OR) применяется для принудительной установки заданных битов (в качестве одного из операндов при этом используется код маски, в котором разряды, требующие установки в единицу, равны единице). Операция "Исключающее ИЛИ" (XOR) используется для инверсии заданных битов (в качестве одного из операндов при этом применяется код маски, в котором биты, подлежащие инверсии, установлены в единицу). Команды требуют двух входных операндов и формируют один выходной операнд.

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

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

    Для примера на рис. 2.3 показаны действия, выполняемые командами сдвигов вправо.

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

    Рис. 2.3. Команды сдвигов вправо .

    Наконец, команды установки и очистки битов регистра состояния процессора (то есть флагов) позволяют установить или очистить любой флаг, что бывает очень удобно. Каждому флагу обычно соответствуют две команды, одна из которых устанавливает его в единицу, а другая сбрасывает в нуль. Например, флагу переноса C (от Carry) будут соответствовать команды CLC (очистка) и SEC или STC (установка).

    Команды переходов

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

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

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

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

    В обозначениях этих команд используются слова Branch (ветвление) и Jump (прыжок).

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

    Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий. В качестве таких условий обычно выступают значения флагов в регистре состояния процессора (PSW). То есть условием перехода является результат предыдущей операции, меняющей значения флагов. Всего таких условий перехода может быть от 4 до 16. Несколько примеров команд условных переходов:

    Переход, если равно нулю;

    Переход, если не равно нулю;

    Переход, если есть переполнение;

    Переход, если нет переполнения;

    Переход, если больше нуля;

    Переход, если меньше или равно нулю.

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

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

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

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

    Рис. 2.4. Реализация разветвления на две ветки .

    Рис. 2.5. Реализация разветвления на три ветки .

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

    Для обратного возврата в точку вызова подпрограммы (точку перехода) используется специальная команда возврата (RET или RTS). Эта команда извлекает из стека значение адреса команды перехода и записывает его в регистр-счетчик команд.

    Особое место среди команд перехода с возвратом занимают команды прерываний (распространенное название - INT). Эти команды в качестве входного операнда требуют номер прерывания (адрес вектора). Обслуживание таких переходов осуществляется точно так же, как и аппаратных прерываний. То есть для выполнения данного перехода процессор обращается к таблице векторов прерываний и получает из нее по номеру прерывания адрес памяти, в который ему необходимо перейти. Адрес вызова прерывания и содержимое регистра состояния процессора (PSW) сохраняются в стеке. Сохранение PSW - важное отличие команд прерывания от команд переходов с возвратом.

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

    Для возврата из подпрограммы, вызванной командой прерывания, используется команда возврата из прерывания (IRET или RTI). Эта команда извлекает из стека сохраненное там значение счетчика команд и регистра состояния процессора (PSW).

    Отметим, что у некоторых процессоров предусмотрены также команды условных прерываний, например, команда прерывания при переполнении.

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


    Предыдущее обсуждение выявило некоторые детали механизма перехода. Команды перехода модифицируют регистр указателя команды EIP/IP и, возможно, сегментный регистр кода CS. Что именно должно подвергнуться модификации, зависит:

    от типа операнда в команде безусловного перехода (ближний или дальний);

    от модификатора, который указывается перед адресом перехода в команде перехода и может принимать следующие значения (сам адрес при прямом переходе находится непосредственно в команде, а при косвенном - в регистре или ячейке памяти):

    NEAR PTR - прямой переход на метку внутри текущего сегмента кода, при этом модифицируется только регистр EIP/IP (в зависимости от заданного типа сегмента кода use16 или use32) на основе указанного в команде адреса (метки) или выражения, использующего символ извлечения значения счетчика адреса команд ($);

    FAR PTR - прямой переход на метку в другом сегменте кода, при этом адрес перехода задается в виде непосредственного операнда или адреса (метки) и состоит из 16-разрядного селектора и 16/32-разрядного смещения, которые загружаются, соответственно, в регистры CS и EIP/IP;

    WORD PTR - косвенный переход на метку внутри текущего сегмента кода, при этом модифицируется (значением смещения размером 16 или 32 бита из памяти по указанному в команде адресу или из регистра) только регистр EIP/IP;

    DWORD PTR - косвенный переход на метку в другом сегменте кода, при этом модифицируются (значением из памяти - и только из памяти, из регистра нельзя) оба регистра, CS и EIP/IP (первое слово/двойное слово адреса перехода, представляющее собой смещение, загружается в EIP/IP; второе/третье слово - в CS).

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

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

    возврата:

    jmp [модификатор] адрес_перехода

    Здесь адрес_перехода представляет метку или адрес области памяти, в которой находится указатель перехода.

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

    Внутрисегментный переход предполагает, что изменяется только содержимое регистра EIP/IP. Можно выделить три варианта внутрисегментного использования команды JMP:

    Прямой короткий переход;

    Прямой переход;

    Косвенный переход.

    Прямой короткий внутрисегментный переход применяется, когда расстояние от команды JMP до адреса перехода не превышает -128 или +127 байт. В этом случае транслятор ассемблера формирует машинную команду безусловного перехода длиной всего два байта (размер обычной команды внутрисегментного безусловного перехода составляет три байта). Первый байт в этой команде - код операции, значение которого говорит о том, что процессор должен особым образом трактовать второй байт команды. Значение второго байта вычисляется транслятором как разность между значением смещения команды, следующей за JMP, и значением адреса перехода. При осуществлении прямого короткого перехода нужно иметь в виду следующий важный момент, связанный с местоположением адреса перехода и самой команды JMP. Если адрес перехода расположен до команды JMP, то ассемблер формирует короткую команду безусловного перехода без дополнительных указаний. Если адрес перехода расположен после команды JMP, транслятор не может сам определить, что переход короткий, так как у него еще нет информации об адресе перехода. Для оказания помощи компилятору в формировании команды короткого безусловного перехода в дополнение к ранее упомянутым модификаторам используют модификатор SHORT PTR:

    jmp short ptr ml

    ... ;не более 35-40 команд (127 байт)

    Еще вариант:

    ...;не более 35-40 команд (-128 байт)

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

    Расстояние более 128 байт и менее 64 Кбайт

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

    jmp bx ;адрес перехода в регистре bх

    jmp addr_ml ;адрес перехода в ячейке памяти addrjnl

    Еще несколько вариантов косвенного внутрисегментного перехода:

    <3>addr dw ml

    <10>jmpaddr;адрес перехода в слове памятиaddr+(si)

    <12>mov si.2

    <13>jmp cycl

    В этом примере одна команда JMP (строка 10) может выполнять переходы на разные метки. Выбор конкретной метки перехода определяется содержимым регистра SI. Операнд команды JMP определяет адрес перехода косвенно после вычисления выражения addr+(SI).

    <3>addr dw ml

    <7> lea si ,addr

    <8> jmp near ptr ;адрес перехода в ячейке памяти addr

    В данном случае указание модификатора NEAR PTR обязательно, так как, в отличие от предыдущего способа, адрес ячейки памяти addr с адресом перехода транслятору передается неявно (строки 3, 7 и 8), и, не имея информации о метке, он не может определить, какой именно переход осуществляется - внутрисегментный или межсегментный. Межсегментный переход предполагает другой формат машинной команды JM Р. При осуществлении межсегментного перехода кроме регистра EIP/IP

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

    прямой и косвенный.

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

    jmp far ptr m2 ;здесь far обязательно

    jmp ml ;здесь far необязательно

    Рассматривая этот пример, обратите внимание на модификатор FAR PTR в команде JMP. Его необходимость объясняется все той же логикой работы однопроходного транслятора. Если описание метки (метка ml) встречается в исходном тексте программы раньше, чем соответствующая ей команда перехода, то задание модификатора необязательно, так как транслятор все знает о данной метке и сам формирует нужную пятибайтовую форму команды безусловного перехода. В случае, когда команда перехода встречается до описания соответствующей метки, транслятор не имеет еще никакой информации о метке, и модификатор FAR PTR в команде JMP опускать нельзя, так как транслятор не знает, какую форму команды формировать - трехбайтную или пятибайтную. Без специального указания модификатора транслятор будет формировать трехбайтную команду внутрисегментного перехода.

    Команда косвенного межсегментного перехода в качестве операнда имеет адрес области памяти, в которой содержатся смещение и сегментная часть целевого адреса перехода:

    addrjnl dd ml ;в поле addr_ml значения смещения

    ;и адреса сегмента метки ml

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

    addr_ml dd ml ;в поле addr_ml значения смещения

    ;и адреса сегмента метки ml

    jmp dword ptr

    Таким образом, модификаторы SHORT PTR, NEAR PTR и WORD PTR применяются для организации внутрисегментных переходов, a FAR PTR и DWORD PTR - межсегментных.

    Для полной ясности нужно еще раз подчеркнуть, что если тип сегмента - use32, то в тех местах, где речь шла о регистре IP, можно использовать регистр EIP и, соответственно, размеры полей смещения увеличить до 32 битов.