Методическое пособие по решению задач лабораторного практикума по курсу "ЭВУ и системы" (изучение архитектуры и системы команд INTEL-совместимых микропроцессоров). Коршунов А.Д. - 9 стр.

UptoLike

Составители: 

9
Логические команды (Таблица 3, 13…16 и 21). Смысл команд очевиден из их
названия - AND (конъюнкция), OR (дизъюнкция), NOT (инверсия), XOR (exclusive OR -
Исключающее ИЛИ). Команды выполняются поразрядно над своими операндами, в
отношении которых можно сказать всё то же самое, что говорилось выше про операнды
команд сложения и вычитания. Команда TEST выполняет поразрядное логическое И
(конъюнкцию) над своими операндами; как и в команде CMP, результат не сохраняется в
операнде-получателе, а лишь определяет значения флагов. Часто после команды TEST
ставится какая-либо команда условного перехода.
Существуют и примеры нестандартного использования логических команд. Так,
команду XOR можно использовать для очистки (записи нулей во все биты) операнда. В
этом случае необходимый операнд указывается в команде дважды: в качестве источника и
в качестве получателя. Предположим, надо очистить регистр AX. Это можно сделать не
только командой
MOV AX, 0
Можно использовать и команду
XOR AX, AX
При выполнении всех логических команд по результату операции устанавливаются
лишь флаги SF, ZF и PF. Флаги CF и OF не изменяют своих значений, а флаг AF
принимает неопределённое (произвольное) значение.
Команды обработки строк данных (Таблица 4). Строка - это последовательность
байтов или слов, размещаемых в смежных ячейках памяти. Микропроцессоры,
совместимые с 8086, могут выполнять несколько базовых операций, значительно
упрощающих написание программ обработки строк. Сюда относятся: пересылка элемента
строки (MOVS, MOVSB), сравнение элементов строк (CMPS, CMPSB), сканирование
строки (SCAS, SCASB), загрузка элемента строки (LODS, LODSB) и запись элемента
строки (STOS, STOSB). Если обрабатываемая строка состоит из 16-разрядных машинных
слов, то применяются мнемокоды команд без буквы “B” на конце (например, LODS); если
строка состоит из байтов, то - мнемокоды команд с буквой “B” (например, LODSB).
Операнды команд после из мнемокодов, как правило, не указываются; везде используется
подразумеваемая (неявная) адресация. Рассмотрим каждую из команд.
MOVS, MOVSB (move strings). Это пересылка элемента строки из одной области
памяти в другую (в отличие от MOV, которая не может выполнять пересылки «память-
память»). Строка-источник адресуется регистрами DS:SI (то есть находится в сегменте
памяти, на который указывает DS - data segment, и имеет смещение, находящееся в SI -
source index), строка-получатель - регистрами ES:DI (extra segment, destination index).
Таким образом, строка-получатель размещается в дополнительном сегменте данных, если
только значения DS и ES не равны. Для организации циклического повторения этой и
других строковых команд можно, конечно, было бы использовать команду LOOP либо
какую-нибудь из команд условных переходов. Однако в системе команд рассматриваемых
МП имеется более удобное средство - специальные команды-префиксы REP (repeat),
REPE, REPNE (и ещё несколько других). Они записываются перед основной командой
(например, REP MOVSB) и обеспечивают её выполнение не один, а N раз, организуя по
сути дела аппаратный (очень быстрый) цикл. Число повторений N предварительно
записывается в CX и на каждом шаге содержимое CX автоматически уменьшается на 1.
Префикс REPповторять, пока не обнулится счётчик») анализирует только одно
условие окончания повторений, а именно CX = 0.
Префикс REPEповторять, пока равно») анализирует следующее составное
условие окончания повторений: (CX = 0) ИЛИ (ZF = 0).
Префикс REPNEповторять, пока не равно») в качестве условия окончания
повторений использует следующее: (CX = 0) ИЛИ (ZF = 1).
                                                                                      9
       Логические команды (Таблица 3, № 13…16 и 21). Смысл команд очевиден из их
названия - AND (конъюнкция), OR (дизъюнкция), NOT (инверсия), XOR (exclusive OR -
Исключающее ИЛИ). Команды выполняются поразрядно над своими операндами, в
отношении которых можно сказать всё то же самое, что говорилось выше про операнды
команд сложения и вычитания. Команда TEST выполняет поразрядное логическое И
(конъюнкцию) над своими операндами; как и в команде CMP, результат не сохраняется в
операнде-получателе, а лишь определяет значения флагов. Часто после команды TEST
ставится какая-либо команда условного перехода.
       Существуют и примеры нестандартного использования логических команд. Так,
команду XOR можно использовать для очистки (записи нулей во все биты) операнда. В
этом случае необходимый операнд указывается в команде дважды: в качестве источника и
в качестве получателя. Предположим, надо очистить регистр AX. Это можно сделать не
только командой
        MOV AX, 0
Можно использовать и команду
       XOR AX, AX
       При выполнении всех логических команд по результату операции устанавливаются
лишь флаги SF, ZF и PF. Флаги CF и OF не изменяют своих значений, а флаг AF
принимает неопределённое (произвольное) значение.
       Команды обработки строк данных (Таблица 4). Строка - это последовательность
байтов или слов, размещаемых в смежных ячейках памяти. Микропроцессоры,
совместимые с 8086, могут выполнять несколько базовых операций, значительно
упрощающих написание программ обработки строк. Сюда относятся: пересылка элемента
строки (MOVS, MOVSB), сравнение элементов строк (CMPS, CMPSB), сканирование
строки (SCAS, SCASB), загрузка элемента строки (LODS, LODSB) и запись элемента
строки (STOS, STOSB). Если обрабатываемая строка состоит из 16-разрядных машинных
слов, то применяются мнемокоды команд без буквы “B” на конце (например, LODS); если
строка состоит из байтов, то - мнемокоды команд с буквой “B” (например, LODSB).
Операнды команд после из мнемокодов, как правило, не указываются; везде используется
подразумеваемая (неявная) адресация. Рассмотрим каждую из команд.
       MOVS, MOVSB (move strings). Это пересылка элемента строки из одной области
памяти в другую (в отличие от MOV, которая не может выполнять пересылки «память-
память»). Строка-источник адресуется регистрами DS:SI (то есть находится в сегменте
памяти, на который указывает DS - data segment, и имеет смещение, находящееся в SI -
source index), строка-получатель - регистрами ES:DI (extra segment, destination index).
Таким образом, строка-получатель размещается в дополнительном сегменте данных, если
только значения DS и ES не равны. Для организации циклического повторения этой и
других строковых команд можно, конечно, было бы использовать команду LOOP либо
какую-нибудь из команд условных переходов. Однако в системе команд рассматриваемых
МП имеется более удобное средство - специальные команды-префиксы REP (repeat),
REPE, REPNE (и ещё несколько других). Они записываются перед основной командой
(например, REP MOVSB) и обеспечивают её выполнение не один, а N раз, организуя по
сути дела аппаратный (очень быстрый) цикл. Число повторений N предварительно
записывается в CX и на каждом шаге содержимое CX автоматически уменьшается на 1.
       Префикс REP («повторять, пока не обнулится счётчик») анализирует только одно
условие окончания повторений, а именно CX = 0.
       Префикс REPE («повторять, пока равно») анализирует следующее составное
условие окончания повторений: (CX = 0) ИЛИ (ZF = 0).
       Префикс REPNE («повторять, пока не равно») в качестве условия окончания
повторений использует следующее: (CX = 0) ИЛИ (ZF = 1).