ОСНОВНЫЕ СВЕДЕНИЯ
Программирование разветвляющихся вычислений на языке ассемблера связано с использованием команд условного перехода. Каждая из этих команд проверяет некоторый код условия или их комбинацию, и в случае выполнения условия выполняет переход по указанному адресу. При невыполнении условия управление передается следующей команде программы.
Для выработки кода условия можно воспользоваться командами cmp, test. Кроме того, коды условия вырабатываются арифметическими и логическими командами.
Для организации циклических вычислений можно также использовать команды условного перехода, однако в случае организации цикла по счетчику удобнее воспользоваться командами цикла loop.
Одно из важнейших применений циклов – обработка массивов. В языке ассемблера существует возможность описывать только одномерные массивы. Для этого используют директивы описания данных db, dw, dd и др. При выполнении цикла часто требуется при каждом новом повторении обращаться к следующему элементу массива. Фактически это означает необходимость увеличения адреса текущего элемента. Очевидно, это можно сделать, если для обращения к элементу массива применять индексный или базовый режим адресации.
Важным моментом при программировании циклов является проверка условия окончания цикла. Есть несколько возможных вариантов организации такой проверки. Если число повторений заранее известно, то можно в одном из регистров (лучше в CX) вести счетчик повторений, тогда условием окончания будет достижение счетчиком заданного значения. Иногда вместо счетчика удобнее использовать значение адреса обрабатываемого элемента массива, в этом случае за условие окончания следует принять выход адреса за пределы массива.
Следует очень внимательно относиться к выбору конкретного значения счетчика или адреса, при котором заканчивается цикл. Практика программирования показывает, что одним из самых распространенных типов ошибок в программах является выполнение на одно повторение цикла больше или меньше, чем нужно.