Архитектура ЭВМ Практика 4. Программы с ветвлениями.
Команды для организации ветвлений, циклов, подпрограмм относятся к группе команд передачи управления. По принципу действия эти команды можно разделить на три группы: 1.Команды безусловной передачи управления; 2.Команды условной передачи управления; 3.Команды управления циклом.
Команда безусловного перехода jmp [модификатор] - безусловный переход без сохранения информации о точке возврата. cs:ip := [модификатор] - определяет тип перехода: near ptr - ближний, внутри текущего сегмента кода (по умолчанию); far ptr - дальний, в другой сегмент кода. адрес перехода - обычно используется метка.
Команды условных переходов. Микропроцессор имеет 30 команд условного перехода. Эти команды позволяют проверить: отношение между операндами со знаком (больше меньше); отношение между операндами без знака (выше ниже); состояния арифметических флагов zf, sf, cf, of, pf.
Команды условных переходов. Команды условного перехода имеют одинаковый синтаксис: jcc «j» от слова jump (прыжок); «cc» определяет конкретное условие, анализируемое командой. Условный переход возможен только внутри одного сегмента кода!
Команды условных переходов. Для того чтобы принять решение о том, куда будет передано управление командой условного перехода, предварительно должно быть сформировано условие, на основании которого и будет приниматься решение о передаче управления. Источниками такого условия могут быть: любая команда, изменяющая состояние арифметических флагов; команда сравнения cmp, сравнивающая значения двух операндов; состояние регистра ecx/cx.
Команда сравнения cmp cmp, сравнивает два операнда и по результатам сравнения устанавливает флаги, которые могут быть проверены командами условного перехода. Примеры: cmp ax, bx … cmp y, cx...
Список команд условных переходов. Переход на указанную метку, если в команде cmp: je - операнд_1 = операнд_2, zf = 1 jne - операнд_1операнд_2, zf = 0 jl/jnge - операнд_1 of jle/jng - операнд_1 of or zf = 1 jg/jnle - операнд_1 > операнд_2, sf = of and zf = 0 jge/jnl - операнд_1 >= операнд_2, sf = of jb/jnae - операнд_1 < операнд_2, cf = 1 jbe/jna - операнд_1 операнд_2, cf = 0 and zf = 0 jae/jnb - операнд_1 >= операнд_2, cf = 0
Команды условных переходов Переход на указанную метку, если выполняется указанное равенство флагов: jc если cf = 1jnc если cf = 0 jp если pf = 1 jnp если pf = 0 jz если zf = 1jnz если zf = 0 js если sf = 1jns если sf = 0 jo если of = 1 jno если of = 0 Переход на указанную метку, если регистр ecx/cx = 0:jecxz/jcxz
Пример программы:
Практическое задание Изучить пример программы. Разработать программу для своего варианта арифметических действий. Протестировать программу. Записать в отчет заданные исходные данные и полученные результаты.
ВарФункцияТестыВарФункцияТесты 1 a)а= 2; b= 2 b)a= 1; b= 2 c)а= 1; b= -2 4 a)а= -2; b= 4 b)a= 2; b= -4 c)а= 6; b= 4 2 a)а= -3; b= -4 b)a= 2; b= 2 c)а= 2; b= -4 5 a)а= -2; b= -3 b)a= 5; b= -2 c)а= 2; b= 3 3 a)а= -2; b= -2 b)a= 2; b= 3 c)а= 2; b= -3 6 a)а= -2; b= 4 b)a= 6; b= 5 c)а= 2; b= 2
ВарФункцияТестыВарФункцияТесты 7 a)а= 2; b= 2 b)a= -3; b= -2 c)а= -2; b= 3 10 a)а= 15; b= 16 b)a= 12; b= 10 c)а= 5; b= 5 8 a)а= 1; b= 3 b)a= -1; b= -3 c)а= 2; b= a)а= 4; b= 1 b)a= 1; b= 4 c)а= 4; b= 4 9 a)а= 2; b= 3 b)a= 1; b= -5 c)а= 2; b= 2 12 a)а= 2; b= 4 b)a= 1; b= 3 c)а= 2; b= 5
Отчет должен содержать: 1.Номер варианта, условие задачи 2.Текст программы с комментариями. 3.Результат тестирования программы (расчетные и полученные результаты тестирования).