Эта программа программа выделяет один
0008 58 POP AX ; Восстановление AX
0009 03 C1 ADD AX, CX ; AX <- исходное значение * 9
000B 59 POP CX ;
000C C3 RET
000D MUL9 ENDP
;--------------------------------------------------
; Эта программа программа выделяет один бит в
; регистре AX, номер которого задан в регистре CL
;--------------------------------------------------
000D 53 PUSH BX ; Сохранение регистра BX в стеке
000E BB 0001 MOV BX, 1 ; Создание маски (1 в разряде 0 регистра BX)
0011 D3 C3 ROL BX, CL ; Сдвиг маски
0013 23 C3 AND AX, BX ; Выделение требуемого разряда
0015 5B POP BX ; Восстановление регистра BX
0016 C3 RET
0017 CODE ENDS
END
Фиг. 4.21 Примеры сдвига
Второй пример на Фиг. 4.21 показывает, как использовать сдвиг
на переменное число разрядов для выборки отдельного бита. Этот
фрагмент предполагает, что исходная информация находится в регистре
AX, а регистр CL содержит номер бита, выбираемого из регистра AX:
если содержимое регистра CL равно 8, из регистра AX выбирается бит
8. Программа сдвигает маску в регистре BX на указанную в регистре
CL позицию, а команда AND изолирует выбранный бит.
Для того чтобы этот пример работал правильно, число в регистре
CL должно быть в диапазоне 0 - 15. Можно было бы использовать
команду AND, чтобы выделить младшие четыре бита значения сдвига в
регистре CL; команда AND CL, 0FH гарантирует, что число в регистре
CL находится в пределах 0 - 15. Вы можете изменить этот пример так,
чтобы выделить более одного бита из слова. Можно было бы выделить
тетраду из 16=битового слова, заменив значение маски в регистре BX.
Содержание Назад Вперед