Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Команда JMP
Лучшие книги по Ассемблеру
Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее... |
Команда JMP - это команда безусловного перехода в Ассемблере. Выполняет, соответственно, безусловный переход в указанное место.
Синтаксис команды JMP такой:
JMP МЕТКА
МЕТКОЙ может быть один из следующих:
- Идентификатор метки в исходном коде
- Адрес в формате СЕГМЕНТ:СМЕЩЕНИЕ
Безусловный переход в Ассемблере выполняется всегда и в любом случае, если в исходном коде имеется инструкция JMP.
Никакие флаги при выполнении этой инструкции не изменяются.
Что такое безусловный переход
Как следует из названия, это переход без условий. Это значит, что если в исходном коде встречается команда JMP, то эта команда выполняет переход на указанный в МЕТКЕ адрес без каких либо условий - в любом случае.
Что такое метка в Ассемблере
Теперь немного поговорим о том, что такое метка в Ассемблере.
Метка - это идентификатор, после которого следует двоеточие. Идентификатор должен быть составлен по правилам составления идентификаторов для конкретного языка программирования
Пример метки в Ассемблере:
--- Здесь инструкции Ассемблера --- MyLabel: ; Это МЕТКА --- И здесь инструкции Ассемблера ---
Для чего нужны метки?
Для того, чтобы управлять ходом выполнения программы.
Например, в зависимости от результата выполнения какой-то команды, вам требуется направить ход выполнения программы по одному из двух путей. То есть в зависимости от результата выполнить один из двух участков кода.
Тогда каждый участок кода обозначается своей меткой. И таким образом вы будете иметь возможность пропустить какой-то участок кода и сразу перейти к другому участку.
Более подробно об этом мы будем говорить при изучении инструкций условного перехода. Эта же статья посвящена безусловному переходу, то есть когда надо просто перейти к нужному участку кода без каких либо условий.
В языках высокого уровня подобные действия называются ветвлением, и реализуются с помощью соответствующих конструкций языка (таких как if...then...else или case в Паскале).
Пример безусловного перехода
Сначала давайте подумаем, зачем нужен безусловный переход.
Логичный вопрос: если мы всегда и во всех случаях пропускаем участок кода, то зачем нам тогда вообще этот участок?
Вопрос закономерный, но только для новичка. На самом деле бывают разные ситуации, когда этот переход нужен.
Пример первый: не забывайте, что вы можете переходить по программе не только вниз, но и вверх. Так что при первом проходе участок кода можно пропустить, но, возможно, его придётся выполнить в зависимости от условий, которые появятся дальше в программе. Как-нибудь так:
JMP Label_2 Label_1: --- Участок кода 1 --- Label_2: ; Это МЕТКА --- Участок кода 2 --- JMP Label_1
Здесь при первом проходе программы мы пропускаем участок кода 1 и сразу переходим к метке Label_2 (то есть ко второму участку). Но во втором участке мы возвращаемся к участку 1 (к метке Label_1) и выполняем его.
Пример второй: может быть так, что какой-то участок кода требуется только для отладки. Тогда можно сделать так:
;JMP Label_2 --- Участок кода ТОЛЬКО для отладки --- Label_2: ; Это МЕТКА --- Участок кода 2 ---
Обратите внимание, что инструкция JMP закомментирована, то есть не выполняется. Так что пока вы отлаживаете свою программу, участок кода для отладки выполняется.
Когда отладка программы закончена, мы убираем точку с запятой перед инструкцией JMP и отладочный код выполняться не будет, так как будет выполняться безусловный переход на метку Label_2.
А почему бы просто не убрать отладочный код?
Можно, конечно, и убрать. Но вы уверены, что он вам больше не пригодится?
В конце как обычно расскажу, почему эта команда ассемблера называется JMP. Это сокращение от английского слова JUMP, которое можно перевести как “прыжок, переход”.
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
Первые шаги в программирование
Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее... |