ОСНОВНЫЕ СВЕДЕНИЯ

Программирование разветвляющихся вычислений на языке ассемблера связано с использованием команд условного перехода. Каждая из этих команд проверяет некоторый код условия или их комбинацию, и в случае выполнения условия выполняет переход по указанному адресу. При невыполнении условия управление передается следующей команде программы.

Для выработки кода условия можно воспользоваться коман­дами cmp, test. Кроме того, коды условия вырабатываются ариф­метическими и логическими командами.

Для организации циклических вычислений можно также ис­пользовать команды условного перехода, однако в случае органи­зации цикла по счетчику удобнее воспользоваться командами цикла loop.

Одно из важнейших применений циклов – обработка массивов. В языке ассемблера существует возможность описывать только одномерные массивы. Для этого используют директивы описания данных db, dw, dd и др. При выполнении цикла часто требуется при каждом новом повторении обращаться к следующему эле­менту массива. Фактически это означает необходимость увеличе­ния адреса текущего элемента. Очевидно, это можно сделать, если для обращения к элементу массива применять индексный или ба­зовый режим адресации.

Важным моментом при программировании циклов является проверка условия окончания цикла. Есть несколько возможных вариантов организации такой проверки. Если число повторений заранее известно, то можно в одном из регистров (лучше в CX) вести счетчик повторений, тогда условием окончания будет дос­тижение счетчиком заданного значения. Иногда вместо счетчика удобнее использовать значение адреса обрабатываемого элемента массива, в этом случае за условие окончания следует принять вы­ход адреса за пределы массива.

Следует очень внимательно относиться к выбору конкретного значения счетчика или адреса, при котором заканчивается цикл. Практика программирования показывает, что одним из самых распространенных типов ошибок в программах является выполне­ние на одно повторение цикла больше или меньше, чем нужно.