Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОВТ 2012.doc
Скачиваний:
6
Добавлен:
28.09.2019
Размер:
414.72 Кб
Скачать

12. Циклический вычислительный процесс

Цикл со счетчиком можно организовать, используя те же условные команды, взяв в качестве счетчика любой свободный регистр. Но в микропроцессоре предусмотрены специальные команды для организации таких циклов: loop / loope / loopne . Эти команды используют в качестве счетчика регистр cx, они сами уменьшают его значение после каждой итерации цикла и сравнивают после уменьшения с нулём.

Команда loop <метка перехода> выполняет следующие действия:

  • уменьшает регистр cx ;

  • сравнивает cx с нулем, если cx >0, то управление передается на метку перехода (продолжаем цикл).

Команды loope/loopne позволяют выйти из цикла по дополнительному условию.

loop метка – цикл. Уменьшает регистр ecx на 1 и выполняет переход типа short (не дальше, чем на 127 байт) на метку, если ecx<>0. Например, в следующем фрагменте команда add выполнится 10 раз:

mov ecx, 10; loop: add eax, ecx;

13. Рекурсивный вычислительный процесс

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

Обычно, в программировании под рекурсией понимают такую реализацию, в которой подпрограмма использует в своем теле вызов самой себя. Такие вызовы называют рекурсивными. Когда функция A в своем теле вызывает только одну рекурсивную функцию (саму себя), то говорят о простой рекурсии. Под косвенной рекурсией понимают явление, когда рекурсивные функции вызывают друг друга (например, функция А вызывает B, а функция B вызывает A).

Рекурсия часто применяется при решении задач с нисходящим динамическим программированием, а так же в переборных задачах.

Нахождение факториала и числа Фибоначчи будет легче воспроизведены с помощью рекурсии.

  1. Программирование для операционной системы windows.

Программирование на ассемблере под Win32 воспринимается весьма не однозначно. Считается, что написание приложений слишком сложно для применения ассемблера. В первую очередь, это связано с тем, что обращение к сервису операционной системы в Windows осуществляется посредством вызова функций, а не прерываний. Написание программ под Win32 стало значительно проще благодаря следующими факторами:

  • гибкая система адресации к памяти: возможность обращаться к памяти через любой регистр общего назначения; "отсутствие" сегментных регистров;

  • доступность больших объёмов виртуальной памяти;

  • развитый сервис операционной системы, обилие функций, облегчающих разработку приложений;

  • многообразие и доступность средств создания интерфейса с пользователем (диалоги, меню и т.п.).

Современный ассемблер, к которому относится и TASM в свою очередь, развивал средства: макроопределение вызова процедур, возможность введения шаблонов процедур (описание прототипов) и даже объектно-ориентированные расширения. Однако, ассемблер сохранил и такой прекрасный инструмент, как макроопределения вводимые пользователем. Все эти факторы позволяют рассматривать ассемблер, как самостоятельный инструмент для написания приложений под платформы Win32 (Windows NT). Описание прототипов функций обеспечивает строгий контроль со стороны компилятора за количеством и типом параметров, передаваемых в функции. Это существенно облегчает жизнь программисту, позволяя избежать ошибок времени исполнения, тем более, что число параметров в некоторых функциях API Win32 весьма значительно.макроопределения способны не только облегчить чтение и восприятие программ, но и облегчить жизнь программистов. в Win32 фрагменты кода часто повторяются, имея при этом не принципиальные отличия. Наиболее показательна, в этом смысле, оконная и/или диалоговая процедура. Если в программе активно используются диалоговые окна, то аналогичные фрагменты кода сильно перегрузят программу, сделав её малопригодной для восприятия. Применение макроопределений в таких ситуациях более чем оправдано.