Assembler для начинающих


         

скорость выполнения. Команда IMUL требует


 
      PUSH    DX
      MOV     DX,9
      IMUL    DX
      POP     DX
 
      Кроме того, умножение на 9 с помощью сдвига дает 16=битовый
    результат, а не 32=битовый, как команда IMUL.
 
      Все же в программе умножение с помощью сдвига может оказаться
    желательным в некоторых случаях. В первую очередь, его преимущество
    - скорость выполнения. Команда IMUL требует много времени, тогда
    как команда сдвига выполняется гораздо быстрее. В случае примера на
    Фиг. 4.21, метод сдвига работает примерно на 25% быстрее. Выигрыш
    небольшой, но может оказаться решающим для приложения, зависящего
    от умножения целых чисел на 9. Умножения на степень 2 могут дать и
    больший выигрыш в скорости выполнения.
          Microsoft (R) Macro Assembler Version 5.00              1/1/80 04:01:21
          Фиг. 4.21 Примеры инструкций сдвига               Page  1-1
 
                                        PAGE    ,132
                                        TITLE   Фиг. 4.21 Примеры инструкций сдвига
           0000                   CODE    SEGMENT
                                        ASSUME  CS:CODE,DS:CODE
 
                                  ;--------------------------------------------------
                                  ; Эта программа умножает число, заданное в регистре AX
                                  ; на 9 без использования команды умножения
                                  ;--------------------------------------------------
 
           0000                   MUL9    PROC    NEAR
 
           0000  51                           PUSH    CX              ; Сохранение регистра CX в стеке
           0001  50                           PUSH    AX              ; Временное сохранение AX
           0002  B1 03                  MOV     CL, 3     ; Будем сдвигать регистр AX на 3 разряда,
           0004  D3 F8                  SAR     AX, CL          ;  тем самым уножая на 8
           0006  8B C8                  MOV     CX, AX          ; CX <- AX * 8

Содержание  Назад  Вперед