
- •3.8Адресация оперативной памяти. Сегментные регистры.
- •3.9Система команд процессора i32. Способы адресации.
- •3.10Система команд процессора i32. Машинная команда. Байт способа адресации.
- •3.11Разветвляющий вычислительный процесс.
- •3.12Циклический вычислительный процесс.
- •3.13Рекурсивный вычислительный процесс.
3.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;
3.13Рекурсивный вычислительный процесс.
Процедура называется рекурсивной, если она прямо или косвенно обращается к себе самой. Рекурсия является естественным свойством для большого числа математических и вычислительных алгоритмов. Важно отметить, что любой рекурсивный алгоритм можно сделать итеративным, но это не всегда целесообразно. В теории программирования рекурсия как правило воспринималась неоднозначно. В конечном итоге была выработана следующая рекомендация — рекурсию следует избегать в случаях, когда имеется очевидное итерационное решение. Как мы убедимся из приведенного ниже обсуждения, очевидная рекурсивная задача вычисления факториала не дает никакого выигрыша в попытке программной реализации с помощью рекурсивных процедур. Настоящий эффект возникает в тех задачах, где рекурсия использована в определении обрабатываемых данных. Такими данными могут являться, например, динамические структуры данных — стеки, деревья, списки, очереди и т. п. fact proc: nop ... call fact ... ret