Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Быстрый сдвиг регистра

Вопрос:
Пусть A и B – два 8-разрядных регистра в обыкновенном 16-разрядном процессоре. Следующая процедура выполняет сдвиг регистра A на число разрядов, заданное в регистре B.
Loop:
SHR A ; shift right A
DEC B ; decrement B
JNZ Loop ; loop again
Напишите программу, которая выполняет сдвиг быстрее. Без оператора многократного сдвига.
Ответ:
Для процессора 8086/8088 необходимо, чтобы регистром B служил исключительно регистр CL Тогда решить требуемое можно с помощью:
SHR A, CL
где под A понимается любой регистр из AL, AH, BH, BL, CH, DH, DL
"обыкновенным 16-разрядным процессором" будем считать INTEL 8086. Проведем подсчет тактов процедуры:
SHR reg,1 - 2
DEC reg - 3
JNZ - 16
--------------------
21

21 такт на каждую итерацию - 21*n

Если в роли B принять CL:

SHR reg,CL - 8+4*n

(8+4*n) < 21*n для всех n > 0, следовательно SHR A,CL теоретически быстрее.

   Вперёд
   Содержание