Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы НЕРЕТИНА.docx
Скачиваний:
350
Добавлен:
18.03.2015
Размер:
4.91 Mб
Скачать

94. Команды сдвига. Команды сравнения и тестирования.

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

Выполнение основных команд сдвига показано на рис. 8.8. При логических сдвигах влево (SHL) и вправо (SHR) производится заполнение освободившихся разрядов операнда нулями. Команда арифметического сдвига влево SAL реализуется аналогично команде логического сдвига SHL. При арифметическом сдвиге влево производится заполнение освободившихся разрядов значением старшего (знакового) разряда. Поэтому при таком сдвиге сохраняется знак операнда. Два варианта циклических сдвигов выполняются с включением признака С в цепь переноса (команды RCL, RCR) или с использованием признака С для хранения последнего выдвигаемого разряда операнда (команды ROL, ROR).

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

Рис. 8.8. Реализация команд сдвига

Команды сравнения и тестирования. Сравнение операндов обычно осуществляется с помощью команды CMP, которая производит вычитание операндов с установкой значений признаков N, Z, V, C в регистре состояний в соответствии с полученным результатом. При этом результат вычитания не сохраняется, и значения операндов не изменяются. Последующий анализ полученных значений признаков позволяет определить относительное значение (<, >, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производить сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Некоторые микропроцессоры выполняют команду тестирования TST, которая является однооперандным вариантом команды сравнения. При выполнении этой команды устанавливаются признаки N, Z в соответствии со знаком и значением (равно или не равно нулю) адресуемого операнда.

95.Команды битовых операций. Операции управления программой

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

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

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

– команды безусловной передачи управления;

– команды условных переходов;

– команды организации программных циклов;

– команды прерывания;

– команды изменения признаков.

Безусловная передача управления производится командой JMP, которая загружает в программный счетчик PC новое содержимое, являющееся адресом следующей выполняемой команды. Этот адрес либо непосредственно указывается в команде JMP (прямая адресация), либо вычисляется как сумма текущего содержимого PC и заданного в команде смещения, которое является числом со знаком (относительная адресация). Так как PC содержит адрес очередной команды программы, то последний способ задает адрес перехода, смещенный относительно очередного адреса на заданное число байтов. При положительном смещении производится переход к последующим командам программы, при отрицательном смещении – к предыдущим.

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

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

Таблица 8.1

Мнемокод

Условие

Мнемокод

Условие

JO

Переполнение V=1

JNO

Нет переполнения V=0

JB

Ниже (не выше и не равно) C=1

JNB

Не ниже (выше или равно) C=0

JE

Равно (нуль) Z=1

JNE

Не равно (не нуль) Z=0

JBE

Ниже или равно (не выше) C+Z=1

JNBE

Не ниже и не равно (выше) C+Z=0

JS

Отрицательный знак N=1

JNS

Положительный знак N=0

JL

Меньше (не больше и не равно) NV=1

JNL

Не меньше (больше или равно) NV=0

JLE

Меньше или равно (не больше) (NV)+Z=1

JNLE

Не меньше и не равно (больше) (NV)+Z=0

В качестве условия часто используется относительное значение двух операндов, определяемое с помощью команды сравнения CMP. Например, равенство операндов определяется значением признака нуля Z после команды CMP: операнды равны, если Z=1 (результат равен 0); не равны, если Z=0 (результат не равен 0). Если сравниваются беззнаковые операнды, то соотношение их значений «выше–ниже–равно» определяют следующие условия:

– ниже/не выше и не равно (<), команда JB;

– не ниже/выше или равно (>=), команда JNB;

– ниже или равно/не выше (<=), команда JBE;

– не ниже и не равно/выше (>), команда JNBE.

Если сравниваются операнды со знаком, то соотношение между ними «больше–меньше–равно» определяют условия:

– меньше/ не больше и не равно (<), команда JL;

– не меньше/больше или равно (>=), команда JNL;

– меньше или равно/не больше (<=), команда JLE;

– не меньше и не равно/больше (>), команда JNLE.

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

Команда организации программных циклов осуществляют условный переход в зависимости от значения содержимого заданного регистра, который используется как счетчик циклов. Например, в процессорах Pentium для организации циклов используется команда LOOP и регистр ECX. Команда LOOP уменьшает содержимое ECX на 1 (декремент) и проверяет полученное значение. Если содержимое ECX = 1, то выполняется переход к команде, адрес которой определяется с помощью относительной адресации (смещение задано в команде LOOP). Если ECX = 0, то выполняется следующая команда программы. Команда LOOP обычно ставится в конце цикла, обеспечивая его выполнение n раз, где n задается начальным значением ECX. Команды LOOPZ, LOOPNZ аналогичны команде LOOP, но используют дополнительные условия для выхода из цикла. Команда LOOPZ обеспечивает выход из цикла до выполнения заданного числа циклов n при получении ненулевого результата, т.е. при установке признака Z=0. Если в каждом цикле реализуется нулевой результат, то выполняется n циклов, как в команде LOOP. Команда LOOPNZ прекращает выполнение циклов при получении нулевого результата, т.е. при установке Z=1.

Команды прерываний INT обеспечивают переход к одной из подпрограмм обслуживания исключений и прерываний. При этом текущее содержимое PC и регистра состояния заносится в стек. Каждая из подпрограмм обработки соответствует определенному типу исключения или прерывания. Например, в процессорах Pentium выбор программы обработки определяется 8-разрядным операндом, задаваемым во втором байте команды INT. Вызов соответствующей программы обслуживания производится с помощью таблицы, в которой содержатся векторы исключений (прерываний) – адреса первых команд программ обслуживания. Каждый вектор задает необходимое содержимое PC, загрузка которого обеспечивает переход к выполнению первой команды программы обслуживания. Команда IRET обеспечивает возврат из подпрограммы обслуживания прерывания путем извлечения из стека и восстановления содержимого программного счетчика и регистра состояния, соответствующих прерванной процедуре.

Команды управления признаками обеспечивают запись-чтение содержимого регистра состояния, в котором хранятся признаки, а также изменение значений отдельных признаков. Например, в процессорах Pentium реализуются команды LAHF и SAHF, которые выполняют загрузку младшего байта, где содержатся признаки, из регистра состояния EFLAGS в младший байт регистра EAX и заполнение младшего байта EFLAGS из регистра EAX. Команды CLC, STC осуществляют установку значений признака переноса C = 0, C = 1, а команда CMC вызывает инвертирование этого признака. Так как признаки определяют ход выполнения программы при условных переходах, то команды изменения признаков обычно используются для управления программой.

Команды управления процессором. К этой группе относятся команды останова, отсутствия операции и ряд команд, определяющих режим работы процессора или его отдельных блоков. Команда HLT прекращает выполнение программы и переводит процессор в состояние останова, выход из которого происходит при поступлении сигналов прерывания или перезапуска (RESET). Команда NOP («пустая» команда), которая не вызывает выполнения каких-либо операций, служит для реализации программных задержек или заполнения пропусков, образовавших в программе.

Специальные команды CLI, STI запрещают и разрешают обслуживание запросов прерывания, устанавливая соответствующее значение бита управления I в регистре состояния процессора. В процессорах Pentium для этого используется бит управления (флаг) IF в регистре EFLAGS.

Многие современные микропроцессоры выполняют команду идентификации, которая позволяет пользователю или другим устройствам получить информацию о типе процессора, используемого в данной системе. В процессорах Pentium для этого служит команда CPUID, при выполнении которой необходимые данные о процессоре поступают в регистры EAX, EBX, ECX, EDX и могут затем считываться пользователем или операционной системой.

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

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

Некоторые процессоры производят арифметические операции с двоично-десятичными числами или выполняют специальные команды коррекции результата при обработке таких чисел. В состав многих высокопроизводительных процессоров входит FPU – блок обработки чисел с «плавающей точкой». Соответственно такие процессоры выполняют большую группу команд, реализующих операции с этими числами и управляющих работой блока FPU.

В ряде современных процессоров реализована групповая обработка нескольких целых чисел или чисел с «плавающей» точкой с помощью одной команды по принципу SIMD («Single Instruction-Multiple Data») – «Одна команда – Множество данных». Одновременное выполнение операций над несколькими операндами существенно повышает производительность процессора при работе с видео- и аудиоданными. Такие операции широко используются для обработки изображений, звуковых сигналов и в других приложениях. Для выполнения этих операций в состав процессоров введены специальные блоки, реализующие соответствующие наборы команд, которые в различных типах процессоров (Pentium, Athlon) получили название MMX («Multi-Media Extension») – Мультимедийное расширение, SSE («Streaming SIMD Extension») – Потоковое SIMD-расширение, «3D-Extension» – Трехмерное расширение.