Предыдущий раздел ВЫВОД НА ЭКРАН ЧИСЕЛ В ШЕСТНАДЦАТЕРИЧНОЙ ФОРМЕ Следующий раздел

6.4. Вывод старшей цифры двузначного шестнадцатеричного числа

Одна шестнадцатеричная цифра занимает четыре бита (четыре бита часто называют полубайтом или тетрадой). Двузначное шестнадцатеричное число занимает восемь бит (один байт). Это может быть, например, регистр BL. При выводе числа на экран сначала выводится старшая цифра, а затем – младшая. Соответствующий укрупненный алгоритм приведен на рис.15. При этом детальный алгоритм каждого из двух этапов “Вывод цифры на экран” приведен ранее на рис.14. Рассмотрим этап "Выделение старшей цифры". В результате него содержимое старшего полубайта должно быть переписано (сдвинуто) в младший полубайт.

 

 

Рис. 15.  Алгоритм вывода двузначного шестнадцатеричного числа

 

Несмотря на то, что нам надо выполнить сдвиг вправо, вспомним команду rcl, которая циклически сдвигает байт или слово влево через флаг переноса. Ранее мы использовали команду “rcl bl,1”, в которой единица есть сообщение для ЦП о том, что надо сдвинуть содержимое BL на один бит. Мы можем осуществить циклический сдвиг более чем на один бит, но мы не можем написать команду “rcl bl,2”. Для циклического сдвига необходимо поместить счетчик сдвигов в регистр CL, который используется здесь так же, как регистр CX применялся командой loop при определении числа повторений цикла. Так как не имеет смысла осуществлять циклический сдвиг более чем 16 раз, то для записи числа сдвигов вполне подойдет восьмибитовый регистр CL.

Для сдвига старшего полубайта вправо на четыре бита будем использовать команду сдвига shr (“Shift  Right" – логический сдвиг вправо). Данная команда не только выполняет сдвиг вправо, но и записывает в освобождающиеся старшие биты нули. В этом проявляется разница между терминами "логический" и "циклический", так как команда циклического сдвига записывает в освобождающиеся биты содержимое флага переноса. Что касается выталкиваемых младших битов байта (или слова), то они по очереди записываются во флаг переноса аналогично циклическому сдвигу.

З а г р у з и т е  числа 4 в СL и 5Dh в DL, а затем введите и протрассируйте следующую команду сдвига:

 

100      shr      dl,cl

 

DL должен теперь содержать число 05h. То есть этот регистр содержит в своем младшем полубайте старшую цифру числа 5Dh.

Реализацию этапа "Выделение старшей цифры" осуществляют команды:

 

mov       dl,bl

mov       cl,04

shr         dl,cl

 

П о м е с т и т е  эти команды в ОП, дополнив их командами этапа "Вывод цифры на экран". При этом не забудьте скорректировать адреса переходов. (Можно записать программу со старыми адресами, а затем скорректировать команды переходов.) Выполните программу, предварительно загрузив в регистр BL любую пару шестнадцатеричных цифр.

 


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