Организация ветвлений в программе
Цель работы: освоить работу с организацией ветвлений в программе. Оборудование: персональный компьютер, Microsoft Visual Studio.
Краткая теория Для организации ветвлений в программах, написанных на ассемблере, используют команды безусловного и условного переходов. Командой при помощи, которой организуется безусловный переход, является команда jmp. jmp адрес перехода Всего в системе команд микропроцессора есть несколько кодов машинных команд безусловного перехода. Их различия определяются дальностью перехода и способом задания целевого адреса. Дальность перехода представляется местоположением операнда адрес перехода, этот адрес может находиться в текущем сегменте кода или в любом другом сегменте. В первом случае переход называется внутренним, или близким, во втором – межсегментным, или дальним. Внутренний переход предполагает, что изменяется только содержимое регистра eip/ip. Можно выделить три варианта внутрисегментного использование команды jmp: · прямой короткий внутрисегментный переход применяется, когда расстояние от команды jmp до адреса перехода не больше чем -128 или +127 байт; · прямой внутрисегментный переход отличается от прямого короткого внутрисегментного перехода тем, что длина машинной команды jmp в этом случае составляет 3 байта. Увеличение длины связано с тем, что поле адреса перехода в машинной jpm расширяется до двух байт, а это, в свою очередь, позволяет производить переход в пределах 64 Кбайт относительно следующей за jmp команды; · косвенный внутрисегментный переход подразумевает «косвенность» задания адреса перехода. Это означает, что в команде указывается не сам адрес перехода, а место, где он находится. Условный переход отличается от безусловного тем, что эти команды не осуществляют переход в какую то определенную точку программы, а принимают решения какая команда должна выполняться следующей. Решение применяется в зависимости от определенных условий. Условия определяется выбором конкретной команды перехода. Эти команды позволяют проверить: · отношение между операндами со знаком («больше – меньше»); · отношение между операндами без знака («выше – ниже»); · состояние арифметических флагов zf, sf, cf, of, pf (но не af). Команды условного перехода имеют одинаковый синтаксис: jcc метка перехода Мнемокод всех команд начинается с «j» – от английского jump (прыжок), «cc» – определяет конкретное условие, анализируемое командой. Метка перехода может находиться только в пределах текущего сегмента кода. Для того чтобы принять решение о том, куда будет передано управление командой условного перехода, предварительно должно быть сформировано условие, на основании которого и будет приниматься решение о передаче управления. Источниками такого условия могут быть: · любая команда, изменяющая состояние арифметических флагов; · команда сравнения cmp, сравнивающая значение двух операндов; · состояние регистра ecx/cx.
|