Предыдущий раздел ВЫВОД НА ЭКРАН ДВОИЧНЫХ ЧИСЕЛ Следующий раздел

5.2. Циклический сдвиг

Допустим, что нам надо выполнить вывод на экран двоичного числа. За шаг мы выводим только один символ, и нам надо произвести выборку всех битов двоичного числа, одного за другим, слева направо. Например, пусть требуемое число есть 10000000b. Если мы сдвинем весь этот байт влево на одну позицию, помещая единицу во флаг переноса и добавляя ноль справа, а затем повторим этот процесс для каждой последующей цифры, то во флаге переноса будут по очереди содержаться все цифры нашего двоичного числа.

Команда rcl (от "Rotate Carry Left" – циклический сдвиг влево с переносом) сдвигает крайний левый бит во флаг переноса (в примере это 1), в то время как бит, находившийся до этого во флаге переноса, сдвигается в крайне правую позицию (т.е. в нулевой бит). В процессе сдвига все остальные биты сдвигаются влево. После определенного количества циклических сдвигов (17 для слова, 9 для байта) биты возвращаются на их начальные позиции, и вы получаете исходное число. На рис.12 показано наглядное представление работы команды rcl.

 

Рис. 12. Команда циклического сдвига влево через перенос rcl

 

В ы п о л н и т е  с помощью Debug размещение по адресу 100h команды “rcl bl,1”, которая циклически сдвигает байт в BL влево на один бит, используя флаг переноса. Поместите в регистр ВХ число B7h и протрассируйте эту команду несколько раз. Убедитесь, что после 9 циклов регистр ВХ содержит опять B7h.

Как вывести на экран двоичное значение флага переноса? Из таблицы кодов ASCII видно, что символ “0” есть 30h, а символ "1" есть 31h. Таким образом, сложение флага переноса и 30h дает символ "0", когда флаг сброшен и символ “1”, когда он установлен. Для выполнения такого сложения удобно использовать команду adc (от “Add with Carrу” - сложение с переносом). Эта команда складывает три числа: два числа, как и команда add,  а также  один бит из флага переноса.

П о м е с т и т е  в память после команды  “rcl bl,1”  команду “adc dl,30 “, которая выполнит сложение содержимого DL (0), 30h и флага переноса, поместив результат в ВL. Записав далее команды, обеспечивающие вывод символа на экран и завершение программы, получим программу, выполняющую вывод на экран старшего бита регистра BL:

 

mov       dl, 00

rcl         bl, 1

adc        dl, 30

mov       ah, 02

int         21

int         20

 

В ы п о л н и т е  эту программу для обоих значений старшего бита ВL. Для записи в ВХ используйте команду R Debug.

 


Предыдущий раздел В начало Следующий раздел