160 likes | 337 Vues
Архитектура ЭВМ. Практика 4. Программы с ветвлениями. Команды для организации ветвлений, циклов, подпрограмм относятся к группе команд передачи управления. По принципу действия эти команды можно разделить на три группы: Команды безусловной передачи управления;
E N D
Архитектура ЭВМ Практика 4. Программы с ветвлениями.
Команды для организации ветвлений, циклов, подпрограмм относятся к группе команд передачи управления. По принципу действия эти команды можно разделить на три группы: • Команды безусловной передачи управления; • Команды условной передачи управления; • Команды управления циклом.
Команда безусловного перехода • jmp [модификатор] <адрес перехода> - безусловный переход без сохранения информации о точке возврата. • cs:ip := <адрес перехода> • [модификатор] - определяет тип перехода: • near ptr - ближний, внутри текущего сегмента кода (по умолчанию); • far ptr - дальний, в другой сегмент кода. • адрес перехода- обычно используется метка.
Команды условных переходов. • Микропроцессор имеет 30 команд условного перехода. Эти команды позволяют проверить: • отношение между операндами со знаком (“больше — меньше”); • отношение между операндами без знака (“выше — ниже”); • состояния арифметических флагов zf, sf, cf, of, pf.
Команды условных переходов. Команды условного перехода имеют одинаковый синтаксис: jcc<метка_перехода> • «j» — от слова jump (прыжок); • «cc» — определяет конкретное условие, анализируемое командой. Условный переход возможен только внутри одного сегмента кода!
Команды условных переходов. • Для того чтобы принять решение о том, куда будет передано управление командой условного перехода, предварительно должно быть сформировано условие, на основании которого и будет приниматься решение о передаче управления. Источниками такого условия могут быть: • любая команда, изменяющая состояние арифметических флагов; • команда сравнения cmp, сравнивающая значения двух операндов; • состояние регистра ecx/cx.
Команда сравнения cmp • cmp<операнд1>, <операнд2> — сравнивает два операнда и по результатам сравнения устанавливает флаги, которые могут быть проверены командами условного перехода. Примеры: cmpax, bx … cmp y, cx ...
Список команд условных переходов. Переход на указанную метку, если в команде cmp: • je- операнд_1 = операнд_2, zf = 1 • jne - операнд_1<>операнд_2, zf = 0 • jl/jnge - операнд_1 < операнд_2, sf <> of • jle/jng - операнд_1 <= операнд_2, sf <> oforzf = 1 • jg/jnle - операнд_1 > операнд_2, sf = ofandzf = 0 • jge/jnl - операнд_1 >= операнд_2, sf = of • jb/jnae - операнд_1 < операнд_2, cf = 1 • jbe/jna - операнд_1 <= операнд_2, cf = 1 or zf=1 • ja/jnbe - операнд_1 > операнд_2, cf = 0 andzf = 0 • jae/jnb - операнд_1 >= операнд_2, cf = 0
Команды условных переходов Переход на указанную метку, если выполняется указанное равенство флагов: • jc еслиcf = 1 jnc если cf = 0 • jp если pf = 1 jnp если pf = 0 • jz если zf = 1 jnz если zf = 0 • js если sf = 1 jns если sf = 0 • jo если of = 1 jno если of = 0 Переход на указанную метку, если регистр ecx/cx= 0: jecxz/jcxz <метка>
Практическое задание • Изучить пример программы. • Разработать программу для своего варианта арифметических действий. • Протестировать программу. Записать в отчет заданные исходные данные и полученные результаты.
Отчет должен содержать: • Номер варианта, условие задачи • Текст программы с комментариями. • Результат тестирования программы (расчетные и полученные результаты тестирования).