PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Купить лучшее качество бумаги для печати ochprosto.com. Самая подробная информация фотограф москва репортаж здесь.

Процессор

Команды обработки

Арифметические команды

Минимальный набор арифметических команд очень мал. Это (например):

  • сложение — ADD;
  • инвертирование — COM / NOT (такая ЭВМ действительно была: PDP-8 (DEC));
  • прибавление "единицы" — INC.

Все остальное можно сделать, комбинируя эти команды.

Однако в современном микропроцессоре арифметических команд обычно больше:

  • SUB — вычитание;
  • CMP — сравнение операндов. Эта команда выполняет вычитание операндов, по результату изменяет флаги, после чего результат теряется (команда предназначена для проверки условий);
  • NEG — смена знака операнда;
  • ASR, ASL, SAR, SAL — арифметические сдвиги операнда (Arithmetic Shift to Right/Left);
  • INC, DEC — увеличение или уменьшение операнда на 1;
  • ADC, SBC/SBB - операции с переносом C (carry-bit) — для выполнения действий с повышенной точностью, когда операнд занимает несколько слов;
  • SXT, SEX, CBW, CWD, CDQ — расширение знака (преобразование в формат с повышенной разрядностью);
  • MUL, DIV — умножение и деление беззнаковых и знаковых чисел.
  • Набор операций с плавающей точкой, включающий обычно значительное количество команд (несколько десятков), в которые часто входят команды вычисления элементарных функций — Sin, Cos, Log, Exp и т.п.

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

Логические команды — это команды побитовой обработки.

  • OR — поразрядное логическое сложение. Фактически это команда побитовой установки (т.е. записи "единицы" в заданные биты операнда). Пример:
    or opr, 0Ch ;Установка в 1 битов в позициях 2 и 3 в операнде al

Если исходно в al содержался, например, операнд 1101 10012, то после выполнения команды в al будет содержаться: 1101 1101 (отмечены установленные биты). Второй операнд — обычно константа, задавая которую, программист указывает, какие биты следует установить (он на жаргоне программистов носит название "маска").

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

  • AND — поразрядное логическое умножение. Это команда побитового сброса (записи в заданные биты "нулей"). Пример:
    and bh, 0Fh ;Сброс старшей тетрады (старшего ниббла) в байтовом операнде.

Если, например, исходно в регистре bh содержался операнд 1101 10012, то после выполнения команды в регистре bh будет содержаться 0000 10012 (отмечены очищенные биты). Действие команды AND можно описать следующим образом: команда безусловно сбрасывает в 0 биты в тех позициях первого операнда, которые отмечены "нулями" в маске, оставляя прочие биты первого операнда неизменными.

  • XOR — поразрядное исключающее ИЛИ, eXclusive OR (иногда на русском эту операцию называют "ЛИБО"). Эта двухоперандная команда фактически выполняет выборочное инвертирование битов. Например:
    xor cl,0F0h ;Инвертирование битов старшей тетрады

Если исходно в cl содержалось 1101 10012, то после выполнения команды в cl будет содержаться 0010 10012 (отмечены проинвертированные биты). Действие команды xor можно описать так: команда инвертирует в первом операнде биты в позициях, которые отмечены в маске "единицами", оставляя прочие биты неизменными.

  • TEST — проверка битовых полей. Команда чаще всего двухоперандная, выполняет поразрядное логическое умножение операндов и по результату операции изменяет состояние флагов "нуля" zf и "знака" sf, после чего результат операции теряется.
  • NOT, COM — инвертирование операнда (замена значения каждого бита на противоположное). Это однооперандная команда.

Сдвиги

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

  1. ROR, ROL, RCR, RCL — циклические сдвиги. При циклическом сдвиге то, что выходит за границу разрядной сетки, помещается в освобождающуюся позицию на другом конце операнда.
  2. ASR, ASL/SAR, SAL — арифметические сдвиги. Эта разновидность сдвига осуществляется таким образом, что результат оказывается эквивалентен умножению (при сдвиге влево) или делению (при сдвиге вправо) операнда на основание системы счисления, т.е. на 2. Сравните: если "сдвинуть" цифры в десятичном числе на разряд влево, результат будет эквивалентен исходному числу, умноженному на 10 (12 и 120 после сдвига). Более подробно особенности арифметического сдвига обсуждаются при рассмотрении системы команд процессоров х86.
  3. SHL, SHR — логические сдвиги. При выполнении логических сдвигов биты, "выдвигаемые" из разрядной сетки, теряются, а противоположный конец операнда заполняется "нулями".

Каждая из упомянутых разновидностей может также иметь варианты.

Например, в составе системы команд х86 различают пять видов сдвигов.