Организация циклов. При организации циклов широко используются команды INC (инкремент) и DEC (декремент), что означает добавление или вычитание единицы из целого числа
При организации циклов широко используются команды INC (инкремент) и DEC (декремент), что означает добавление или вычитание единицы из целого числа, помещенного в ячейку памяти, РОН или индексный регистр. Команды имеют формат: INC операнд, DEC операнд. Такую программную конструкцию как цикл можно реализовать, используя в программе операции инкремента, декремента, условного и безусловного переходов. Но, учитывая важность такого алгоритмического элемента, как цикл, разработчики ассемблера предусмотрели специальные команды цикла, например: LOOP метка_перехода. Команда означает ’повторить цикл’. Выполнение команды заключается в следующем: - вычитании 1 из регистра СХ; - сравнении регистра СХ с нулем; - если СХ=0, то управление передается на следующую после LOOP команду, иначе осуществляется передача управления на метку_перехода. Другими командами цикла являются команды: LOOPE/LOOPZ метка_перехода, которые означают “повторить цикл, пока СХ< > 0 или ZF=0”. Обе команды совершенно идентичны, поэтому использовать можно любую из них. Отличаются эти команды от предыдущей команды анализом окончания цикла: - если СХ> 0 и ZF=1, управление передается на метку_перехода, иначе если СХ=0 или ZF=0, то выполняется следующая после команды LOOPE/LOOPZ команда. Еще одной модификацией являются команды цикла LOOPNE/LOOPNZ метка_перехода, которые означают, “повторить цикл, пока СХ< > 0 или ZF=1”. Как и в предыдущем случае обе команды совершенно идентичны. В них анализ окончания цикла выполняется по следующему правилу: - если СХ> 0 и ZF=0, управление передается на метку перехода, иначе если СХ=0 или ZF=1, то выполняется следующая после команды LOOPNE/LOOPNZ операция. Общая особенность команд цикла в том, что они используют регистр общего назначения СХ как счетчик числа повторений цикла, поэтому при их использовании не забудьте до метки_перехода послать в этот регистр нужное число – количество повторений цикла! Недостаток всех команд цикла в том, что они реализуют только короткие переходы. Для работы с длинными циклами используются комбинации команд условного перехода и безусловного перехода. Приведем пример использования вышеописанных команд в контексте подсчета количества нулевых, положительных и отрицательных элементов вектора (одномерного массива), состоящего из однобайтовых чисел. Описания переменных в сегменте данных могут быть следующими: Mas db -1, 0, 3, -8, 0, 9, -6, 1, 2, -5; заданный вектор Len_mas =$-mas; количество элементов в векторе
|