Архитектура ЭВМ Практика 5. Программирование циклов.
Команды для организации цикла. Организовать циклическое выполнение некоторого участка программы можно «вручную», используя команды условной передачи управления или команду безусловного перехода jmp. Но, учитывая важность такого алгоритмического элемента, как цикл, разработчики микропроцессора ввели в систему команд группу команд, облегчающую программирование циклов. Эти команды используют регистр ecx/cx как счетчик цикла.
loop Команда позволяет организовать циклы, подобные циклам for в языках высокого уровня с автоматическим уменьшением счетчика цикла. Работа команды: уменьшение регистра ecx/cx на 1; если (ecx/cx) > 0, то управление передается на метку перехода; если (ecx/cx) = 0, то управление передается на следующую после loop команду.
loope/loopz Работа команд: уменьшение регистра ecx/cx на 1; анализ состояния флага нуля zf: если (ecx/cx) > 0 и zf = 1, то управление передается на метку перехода; если (ecx/cx) = 0 или zf = 0, то управление передается на следующую после loop команду.
loopne/loopnz Работа команд: уменьшение регистра ecx/cx на 1; анализ состояния флага нуля zf: если (ecx/cx) > 0 и zf = 0, то управление передается на метку перехода; если (ecx/cx) = 0 или zf = 1, то управление передается на следующую после loop команду.
Пример программы с циклом
Пример программы с вложенным циклом
Практическое задание Изучить пример программы. Разработать программу для своего варианта арифметических действий. Протестировать программу. Записать в отчет заданные исходные данные и полученные результаты.
ВарЗадания 1 1.Составить программу вычисления суммы первых N натуральных четных чисел. Протестировать программу при N=5. 2.Составить программу, подбирающую натуральные X и Y (одну комбинацию, наибольшее Y при наибольшем X), удовлетворяющие равенству: 2*X + 3*Y = 120. Найденные X, Y записать в память. 2 1.Составить программу вычисления произведения первых N натуральных четных чисел. Протестировать программу при N=4. 2.Составить программу, подбирающую натуральные X и Y (одну комбинацию, наименьшее Y при наименьшем X), удовлетворяющие равенству: 2*X + 3*Y = 120. Найденные X, Y записать в память. 3 1.Составить программу вычисления суммы первых N натуральных нечетных чисел. Протестировать программу при N=5. 2.Составить программу, подбирающую натуральные X и Y (одну комбинацию, наименьшее Y при наименьшем X), удовлетворяющие равенству: X 2 + Y 2 = Найденные X, Y записать в память.
ВарЗадания 4 1.Составить программу вычисления произведения первых N натуральных нечетных чисел. Протестировать программу при N=4. 2.Составить программу вычисления двойной суммы: Протестировать программу при: n=3; m = Составить программу вычисления суммы первых N натуральных чисел. Протестировать программу при N=5. 2.Составить программу вычисления двойной суммы: Протестировать программу при: n=3; m = Составить программу вычисления произведения первых N натуральных чисел (факториала N). Протестировать программу при N=5. 2.Составить программу вычисления двойной суммы: Протестировать программу при: n=3; m = 5.
ВарЗадания 7 1.Составить программу вычисления суммы N натуральных чисел, хранящихся в памяти как массив A. Протестировать программу при: N=5; A=(2, 5, 1, 3, 7). 2.Составить программу вычисления суммы произведения: Протестировать программу при: n=3; m = Составить программу вычисления произведения N натуральных чисел, хранящихся в памяти как массив. Протестировать программу при: N=5; A=(2, 5, 1, 3, 7). 2.Составить программу вычисления суммы произведения: Протестировать программу при: n=3; m = Составить программу вычисления суммы 6-ти байт памяти от адреса start_adr в сегменте данных. Протестировать программу при следующем определении в сегменте данных: start_adr db 'Program' 2. Составить программу вычисления произведения суммы: Протестировать программу при: n=3; m = 5.
ВарЗадания 10 1.Составить программу вычисления произведения 6-ти байт памяти от адреса start_adr в сегменте данных. Протестировать программу при следующем определении в сегменте данных: start_adr db '14.03' 2.Составить программу вычисления произведения суммы: Протестировать программу при: n=3; m = Составить программу вычисления суммы 5-ти слов в памяти от адреса start_adr в сегменте данных. Протестировать программу при следующем определении в сегменте данных: start_adr dw F1h, A10h, Ah, ADh, 123h 2.Составить программу вычисления двойного произведения: Протестировать программу при: n=3; m = Составить программу вычисления произведения 5-ти слов в памяти от адреса start_adr в сегменте данных. Протестировать программу при следующем определении в сегменте данных: start_adr dw 1h, 2h, Ah, Bh, 100h 1.2. Составить программу вычисления двойного произведения: Протестировать программу при: n=3; m = 2.
Отчет должен содержать: 1.Номер варианта, условие задачи 2.Текст программы с комментариями. 3.Результат тестирования программы (расчетные и полученные результаты тестирования).