
Микропроцессоры Токхайм / 6.4. СОСТАВ КОМАНД ЛОГИЧЕСКИХ ОПЕРАЦИИ
.doc6.4. СОСТАВ КОМАНД ЛОГИЧЕСКИХ ОПЕРАЦИИ
Логические команды составляют еще одну группу команд типового микропроцессора. Они сведены в табл. 6.4 и содержат команды И, ИЛИ, ИЛИ ИСКЛЮЧАЮЩЕЕ,
НЕ (инверсия) и сдвига. Здесь именно аккумулятор составляет ядро большинства операций. Как и при арифметических командах, способ адресации и здесь влияет на способ и место нахождения других данных в системе.
Рассмотрим выполнение типовым микропроцессором команды И непосредственно (рис. 6.12, а). Содержимое
аккумулятора (0001 0011) подвержено операции И побитно. Согласно таблице истинности для операции И (см. табл. 3.1) только самые младшие биты каждого числа равны 1, следовательно, результатом будет 0000 0001, он помещается в аккумулятор. Согласно последней колонке табл. 6.4 результатом всех операций И будет сброс индикатора переноса, мы это видим также на рис. 6.12, а. Результат операции И проверяется с целью определения — не нуль ли он, и если нет, то индикатор нуля сбрасывается в 0. Отметим использование точки (•) в табл. 6.4 в колонке символов для обозначения операции И.
На рис. 6.12,б приведен другой пример использования команды И, в этом случае — И косвенной адресации (мнемоника ANA М). Содержимое аккумулятора подвержено операции И (бит с битом) с содержимым ячейки памяти, указанной парой HL. После операции 0011 1100 И
0000 0001 полученный результат 0000 0000 помещен в аккумулятор. Индикатор переноса сбрасывается (СБРОС) согласно табл. 6.4. Помещенный в аккумулятор результат проверяется, и, поскольку он равен 0, индикатор нуля устанавливается в 1.
Внимательно рассмотрим рис. 6.12,б. В этих двух примерах второй операнд — 0000 0001, он используется как маска. Маска 0000 0001 на рис. 6.12, с и б может быть использована для сброса в 0 семи старших бит или, с учетом наличия индикатора нуля, для тестирования значений 0 или 1 в позиции младшего бита аккумулятора (в этом случае на единственную 1 надевается маска 0000 0001). Но нужно быть осторожным. Заметим, что содержимое аккумулятора изменилось после операции И. Некоторые микропроцессоры снабжены специальными командами тестирования битов, которые выполняют операции И с содержимым аккумулятора и с маской байта без изменения содержимого всего аккумулятора, изменяя состояние индикаторов.
Четыре команды
ИЛИ (см. табл. 6.4) выполняются с содержимым
аккумулятора и содержимым какой-либо
другой ячейки памяти и регистра. На
рис. 6.13 приведен при
мер операции ИЛИ, когда содержимым
аккумулятора будет 1100 1100, тогда как
регистр L содержит 0000 1111. Результат—1100
1111. Числа подвержены операции ИЛИ
побитно согласно таблице истинности
ИЛИ (табл. 3.1). Содержимое 0000 1111 регистра
L может рассматриваться как маска,
которая всегда будет обращать 4 младших
бита в 1111. Отметим использование
логического знака (+) для обозначения
операции ИЛИ в колонке символов в табл.
6.4.
В табл. 6.4 приведены пять команд ИЛИ ИСКЛЮЧАЮЩЕЕ для типового микропроцессора. На рис. 6.14 показан процесс выполнения команды ИЛИ ИСКЛЮЧАЮЩЕЕ Л с Л. Результатом ИЛИ ИСКЛЮЧАЮЩЕЕ
1010 1010 с самим собой (рис. 6.14) будет 0000 0000. Выполнение этой операции любого числа с самим собой всегда дает результат 0000 0000, индикатор нуля всегда устанавливается в 1, что означает нулевое содержимое индикатора, а в соответствии с табл. 6.4 индикатор переноса CY всегда будет сброшен в 0.
Две последние логические операции табл. 6.4 осуществляются командами циклического сдвига с переносом.
Схемы в колонке символики показывают результат сдвига, выполняемого этими командами.
Рассмотрим приведенный на рис. 6.15 пример использования команды циклического сдвига вправо с переносом: содержимое аккумулятора (ООП 0001) сдвинуто на одну позицию вправо и его младший бит (1 в этом примере) передается в позицию бита индикатора переноса, тогда как имевшийся там бит занимает позицию старшего бита аккумулятора, в котором содержится 0001 1000 после завершения операции. Индикатор переноса установится в 1, индикатор нуля не изменится.
Используя одну или несколько команд циклического сдвига, можно тестировать весь заданный состав бит, а индикатор переноса может быть сброшен или установлен. Индикатор переноса может быть тестирован затем командой условного ветвления. Тест паритета является другим приложением использования команд сдвига. Паритет двоичного числа определяется числом содержащихся в нем единиц: четный паритет — общее число единиц четное; не-четный паритет — общее число единиц нечетное.
Заметим, что команды сдвига оперируют только данными аккумулятора и не требуют других операндов, расположенных в памяти или регистрах. Поэтому здесь способ адресации называется неявным, а иногда вообще не указывается. Многие МП обладают несколькими иными, чем типовой микропроцессор, типами команд сдвига.
Таким образом, команды логических операций используются для манипуляции с переменными по законам алгебры логики. Они могут быть использованы для тестирования и сравнения бит.
Упражнения
Все упражнения связаны с табл. 6.4, обращаться к которой следует постоянно.
6.24. Какой КОП (шестнадцатеричный) имеет команда ANA Н на рис. 6.16? Ее формат ______ байт.
6.25. Каково содержимое аккумулятора на рис. 6.16 после операции И?
6.26. Назвать состояние индикаторов на рис. 6.16 после операции И.
6.27. Если роль байта в регистре Н на рис. 6.16 состоит в тестировании старшего бита аккумулятора (0 или 1),
слово 1000 0000 в регистре Н называется ______ (маской,
словом теста).
6.28. Откуда поступает операнд, подверженный операции ИЛИ непосредственное (ORI) с содержимым аккумулятора?
6.29. Знак ( + ) в табл. 6.4 означает операцию ________
(сложение, ИЛИ).
Каков
источник адреса (LOC) операнда на рис.
6.17 в памяти данных?
Каково содержимое аккумулятора на рис. 6.17 после операции ИЛИ?
Назвать состояния индикаторов в регистре состояния на рис. 6.17 после операции ИЛИ.
6.33. Мнемоника команды ИЛИ ИСКЛЮЧАЮЩЕЕ на ассемблере на рис. 6.18 _______.
6.34. Что является источником операнда, подверженного операции ИЛИ ИСКЛЮЧАЮЩЕЕ с содержимым аккумулятора на рис. 6.18?
6.35. Каково содержимое аккумулятора на рис 6.18 после операции ИЛИ ИСКЛЮЧАЮЩЕЕ?
6.36. Каково состояние индикаторов на рис. 6.18?
Каково содержимое аккумулятора на рис. 6.19 после выполнения команды сдвига?
Какие состояния индикаторов на рис. 6.19 после операции циклического сдвига влево?
6.24. А4Н; 1. 6.25. 1111 ООП и 1000 0000 выполняется побитно и дает 1000 0000, что и будет содержимым аккумулятора. 6.26. В индикаторах переноса и нуля будут нули. 6.27. Слово 1000 0000 является маской, если его роль состоит в тестировании наиболее значимого бита аккумулятора. Используя эту маску с командой ANA Н, получаем: если в индикаторе нуля 1, наиболее значимый бит байта в аккумуляторе 0; если в индикаторе нуля 0, старший бит байта в аккумуляторе 1. 6.28. Команда ORI извлекает операнд из 2-го байт памяти. 6.29. ИЛИ. 6.30. Пара регистров HL. 6.31. 1000 0111. 6.32. Индикатор переноса сброшен; индикатор нуля сброшен — 0. 6.33. КОП ИЛИ ИСКЛЮЧАЮЩЕЕ АСН (см. табл. 6.4), его мнемоника XRA Н. 6.34. Операцией является ИЛИ ИСКЛЮЧАЮЩЕЕ А с Н. Значит, операнд поступит из регистра Н. 6.35. 1100 ООП. Заметим, что ИЛИ ИСКЛЮЧАЮЩЕЕ с 1111 1111 дает инвертирование байта аккумулятора. 6.36. Индикатор переноса сброшен; индикатор нуля сброшен—0. 6.37. 1110 0111. 6.38. Только индикатор переноса подвержен влиянию операции циклического сдвига влево; следовательно, индикатор переноса принимает 0 (значение бывшего старшего бита в аккумуляторе), а индикатор нуля остается 0.