Процессор х86: инструкции сдвига. Умножение и деление на константы.

Процессор х86: инструкции сдвига. Умножение и деление на константы.

Команда: SAR приемник, счетчик
Предназначение: Арифметический сдвиг на право
Команда: SAL приемник, счетчик
Предназначение: Арифметический сдвиг на лево
Команда: SHR приемник, счетчик
Предназначение: Логический сдвиг на право
Команда: SHL приемник, счетчик
Предназначение: Логический сдвиг на лево
Микропроцессор:

Эти четыре команды делают двоичный сдвиг приемника (регистр либо переменная) на право Процессор х86: инструкции сдвига. Умножение и деление на константы. (в сторону старшего бита) либо на лево (в сторону младшего бита) на значение счетчика (число либо регистр CL, из которого учитываются только младшие 5 бит, которые могут принимать значения от 0 до 31), Операция сдвига на 1 эквивалентна умножению (сдвиг на лево) либо делению (сдвиг на право) на 2. Так, число 0010b (2) после сдвига Процессор х86: инструкции сдвига. Умножение и деление на константы. на 1 на лево преобразуется в 0100b (4). Команды SAL и SHL делают одну и ту же операцию (по сути это одна и та же команда) — на каждый шаг сдвига старший бит заносится в CF, все биты сдвигаются на лево на одну позицию, и младший бит обнуляется. Команда SHR делает прямо Процессор х86: инструкции сдвига. Умножение и деление на константы. обратную операцию: младший бит заносится в CF, все биты сдвигаются на 1 на право, старший бит обнуляется. Эта команда эквивалентна беззнаковому целочисленному делению на 2. Команда SAR действует по аналогии с SHR, только старший бит не обнуляется, а сохраняет предшествующее значение, так что, к примеру, число 11111100b (-4) перейдет в 11111110b (-2). SAR, таким макаром Процессор х86: инструкции сдвига. Умножение и деление на константы., эквивалентна знаковому делению на 2, но, в отличие от IDIV, округление происходит не в сторону нуля, а в сторону отрицательной бесконечности. Так, если поделить -9 на 4 при помощи IDIV, итог будет -2 (и остаток -1), а если выполнить арифметический сдвиг на право числа -9 на 2, итог будет -3. Сдвиги больше чем на 1 эквивалентны Процессор х86: инструкции сдвига. Умножение и деление на константы. подходящим сдвигам на 1, выполненным поочередно. Схема всех сдвиговых операций приведена на рис. 7.

Рис. 7. Сдвиговые операции

Сдвиги на 1 изменяют значение флага OF: SAL/SHL устанавливают его в 1, если после сдвига старший бит поменялся (другими словами старшие два бита начального числа не были схожими), и в 0, если старший бит остался этим же. SAR Процессор х86: инструкции сдвига. Умножение и деление на константы. устанавливает OF в 0, и SHR устанавливает OF в значение старшего бита начального числа. Для сдвигов на несколько бит значение OF не определено. Флаги SF, ZF, PF инсталлируются всеми сдвигами в согласовании с результатом, значение AF не определено (не считая варианта, если счетчик сдвига равен нулю, в каком ничего не происходит Процессор х86: инструкции сдвига. Умножение и деление на константы. и флаги не меняются).

В микропроцессорах 8086 конкретно можно было задавать в качестве второго операнда только число 1 и при использовании CL учесть все биты, а не только лишь младшие 5, но уже начиная с 80186 эти команды приняли собственный окончательный вид.

 Команда: SHRD приемник, источник, счетчик
 Предназначение: Сдвиг завышенной точности на право
 Команда Процессор х86: инструкции сдвига. Умножение и деление на константы.: SHLD приемник, источник, счетчик
 Предназначение: Сдвиг завышенной точности на лево
 Микропроцессор:

Приемник (регистр либо переменная) двигается на лево (в случае SHLD) либо на право (в случае SHRD) на число бит, обозначенное в счетчике (число либо регистр CL, откуда употребляются только младшие 5 бит, которые могут принимать значения от 0 до 31). Старший Процессор х86: инструкции сдвига. Умножение и деление на константы. (для SHLD) либо младший (в случае SHRD) бит не обнуляется, а считывается из источника (регистр), значение которого не меняется. К примеру, если приемник содержал 00101001b, источник 1010b, счетчик равен 3, SHRD даст в итоге 01000101b, a SHLD — 01001101b (см. рис. 8).

Рис. 8. Сдвиги двойной точности

Флаг OF устанавливается при сдвигах на 1 бит Процессор х86: инструкции сдвига. Умножение и деление на константы., если поменялся символ приемника, и сбрасывается, если символ не поменялся; при сдвигах на несколько бит флаг OF не определен. Во всех случаях SF, ZF и PF инсталлируются в согласовании с результатом и AF не определен, не считая варианта со сдвигом на 0 бит, в каком значения флагов Процессор х86: инструкции сдвига. Умножение и деление на константы. не меняются. Если счетчик больше, чем разрядность приемника, — итог и все флаги не определены.

 Команда: ROR приемник, счетчик
 Предназначение: Повторяющийся сдвиг на право
 Команда: ROL приемник, счетчик
 Предназначение: Повторяющийся сдвиг на лево
 Команда: RCR приемник, счетчик
 Предназначение: Повторяющийся сдвиг на право через флаг переноса
 Команда: RCL приемник, счетчик
 Предназначение: Повторяющийся Процессор х86: инструкции сдвига. Умножение и деление на константы. сдвиг на лево через флаг переноса
 Микропроцессор:

Эти команды производят повторяющийся сдвиг приемника (регистр либо переменная) на число бит, обозначенное в счетчике (число либо регистр CL, из которого учитываются только младшие 5 бит, принимающие значения от 0 до 31). При выполнении повторяющегося сдвига на 1 команды ROR (ROL) сдвигают каждый бит приемника на право Процессор х86: инструкции сдвига. Умножение и деление на константы. (на лево) на одну позицию, кроме самого младшего (старшего), который записывается в позицию самого старшего (младшего) бита. Команды RCR и RCL делают аналогичное действие, но включают флаг CF в цикл, как если б он был дополнительным битом в приемнике (рис. 9)

.

Рис. 9. Циклические сдиги

После выполнения команд повторяющегося сдвига флаг CF Процессор х86: инструкции сдвига. Умножение и деление на константы. всегда равен последнему вышедшему за границы приемника биту, флаг OF определен только для сдвигов на 1 — он устанавливается, если поменялось значение самого старшего бита, и сбрасывается, если старший бит не поменялся. Флаги SF, ZF, AF и PF не меняются.


prochitajte-tekst-i-vipolnite-zadaniya-8-16.html
prochitajte-tekst-i-vipolnite-zadaniya-a12-a15-b1-v5-s1-s2.html
prochitajte-tekst-i-vipolnite-zadaniya-s-4-s-8.html