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

5.3. Организация циклов

Если мы хотим вывести на экран все биты BL, то мы должны повторить  операции циклического сдвига и распечатки флага переноса CF восемь раз (число битов в BL). Неоднократное повторение одних и тех же операций называется циклом.

Соответствующий алгоритм приведен на рис.13. На первом этапе  переменной CX присваивается значение 8. Именно столько раз мы хотим повторить выполнение этапов, образующих “тело цикла”. Переменная CX называется счетчиком повторений. Тело цикла образуют этапы “Получение кода ASCII для бита” и “Вывод символа”. После того как тело цикла выполнено, значение CX уменьшается на 1. На следующем этапе алгоритма значение CX сравнивается с 0. Если это значение ненулевое, то делается возврат для повторения тела цикла. Иначе – выполняется этап алгоритма, расположенный после цикла. На рис.13 это этап “Завершение алгоритма”.

 


Рис. 13.  Алгоритм вывода на экран содержимого байта

 

Для организации циклов используются специальные машинные команды. Одной из них является команда loop. Она записывается в конце цикла, т.е. после тех команд, выполнение которых следует повторить. Данная команда имеет один операнд – адрес первой из повторяемых машинных команд.  Счетчик повторений цикла содержится в регистре CX. Данный регистр используется потому, что буква С в названии регистра СХ означает “счетчик” (от “Count”). CX может использоваться также как регистр общего назначения.

Выполнение команды loop сводится к следующему. Во-первых, она вычитает из содержимого регистра CX единицу. Во-вторых, она сравнивает полученное содержимое регистра CX с нулем, и если оно не равно 0, то делает переход по адресу, заданному в качестве операнда команды loop. В-третьих, если переход не делается, то на ЦП начинает выполняться машинная команда, расположенная в программе сразу же за командой loop. Таким образом, наличие данной команды обеспечивает реализацию двух этапов алгоритма, приведенного на рис.13.

В качестве примера применения команды loop приведем программу, выполняющую вывод на экран четырех звездочек:

 

100                 mov   ah,02

102                 mov   dl,2a

104                 mov   cx,4

107                 int     21

109                 loop  107

10B                 int     20

 

В ы п о л н и т е  трассировку данной программы, наблюдая за cодержимым регистров IP и . При этом следует вспомнить, что не следует использовать команду Т Debug для команды int. При достижении этой команды следует набрать команду Debug  “G  d”, где d – адрес в памяти команды, следующей за int. При достижении команды “int 20”  вводится команда Debug.

При применении команды “G d” необходимо знать адрес останова d. Исключить трассировку при достижении машинной команды int проще, если использовать команду Debug  Р (от "Proceed" – переходить, продолжать). Эта команда является удобным средством обхода команд int, вызывающих подпрограммы  DOS.

В ы п о л н и т е  написание и ввод в память  программы вывода двоичного содержимого байта (cодержится в регистре BL) на экран (алгоритм на рис.13).

 


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