Пример программ на emu8086

Документ из архива «Разработка виртуальных лабораторных работ средствами эмулятора Emu8086″, который расположен в категории » «. Всё это находится в предмете «информатика» из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе «остальное», в предмете «информатика, программирование» в общих файлах.

Онлайн просмотр документа «48552»

Текст 2 страницы из документа «48552»

На первом этапе происходит чувственное восприятие информации, на втором осуществляется ее преобразование в образы, на третьем — ее осмысление, на четвертом — информация фиксируется в сознании через «слово-образ». В преподавании же естественнонаучных дисциплин всегда присутствовал сенсорно-моторный этап. В этом большую роль играют лабораторные практикумы и учебные эксперименты.

Учебный эксперимент является одним из важнейших методов обучения, источником знаний и средством наглядности одновременно. Он может использоваться в качестве введения к той или иной теме курса (мотивация), как иллюстрация к объяснению нового материала (восприятие и осмысление), как повторение или обобщение пройденного (интериоризация) или как контроль приобретенных знаний, умений, навыков, т.е. на всех этапах процесса обучения.

Основы работы в emu8086

Различают следующие виды учебного эксперимента: Демонстрационный эксперимент. (Проводится в ходе объяснения для иллюстрации законов и явлений и их применения, демонстрации принципов действия технических установок, а также для знакомства учащихся с фундаментальными опытами. Готовится и выполняется только преподавателем).

Фронтальные лабораторные работы, опыты и наблюдения. (Выполняются на уроке всеми учащимися одновременно на однотипном оборудовании, под непосредственным руководством преподавателя). Практикум. (Является формой самостоятельной работы учащихся, готовится учащимися заранее и выполняется по письменной инструкции). Внеурочные опыты и наблюдения. (Разновидность домашнего задания.

Используется для актуализации теоретических знаний или как мотивация к изучению нового материала). Методически грамотно организованный эксперимент способствует как формированию практических умений, так и активизации теоретических знаний, полученных ранее. В процесс обучения вовлекаются различные каналы восприятия (слух, зрение, осязание, обоняние и т.д.).

Это позволяет организовать полученную информацию, как систему ярких образов, и заложить ее в долговременную память. С другой стороны, подготовка и проведение лабораторных работ являются довольно непростым делом и требуют от учителя знания некоторых методических особенностей, в значительной степени зависит от наличия тех или иных приборов и инструментов.

Частично эти и другие проблемы можно решить, используя при обучении компьютерный эксперимент. Под данным термином мы понимаем лабораторную работу, проводимую полностью на компьютере, без использования других технических средств обучения.

ЯЗЫК АССЕМБЛЕРА за 3 МИНУТЫ

Некоторые эксперименты, проводимые в области компьютеризации учебного процесса, показывают, что применение компьютерного эксперимента позволяет существенно сократить время, которое тратится на рутинную работу (варьирование параметров эксперимента путем изменения схемы установки, расчета результатов измерения и т.д.), тем самым, высвобождая время для более серьезного уяснения целей и задач проводимого эксперимента. Кроме того, появляется возможность продемонстрировать опыты, которые невозможно провести в условиях учебного кабинета.

Отметим характерные особенности компьютерного эксперимента. Формой работы является диалог учащегося с компьютером. При этом в функции компьютера входит: Реализация программными средствами модели изучаемого объекта, установки, процесса или ситуации Имитация средств измерения и выполнение рутинной части обработки измерений. Оценка действий учащегося.

Функции учащегося (несколько отличаются от его функций в традиционном эксперименте): Анализ информации, которую программа выдает на экран дисплея. Выбор условий эксперимента. Проведение серий экспериментов для достижения цели, сформулированной в начале работы.

Корректировка последующих шагов с целью получения более высокой оценки и решения задачи более рациональным способом. Разумеется, что возможна реализация эксперимента только в его компьютерном варианте. Однако при всей привлекательности и несомненной дидактической выгоде компьютерного эксперимента в обучении остаются нерешенными некоторые проблемы.

Во-первых, восприятие информации учащимся уже существенным образом отличается от того, как это происходит при выполнении традиционной лабораторной работы. В частности, сенсорно-моторный этап практически отсутствует. Без данного этапа восприятие не может быть полноценным. Следовательно, неполноценным может оказаться и преподавание соответствующей дисциплины.

Во-вторых, возникает проблема получения политехнических навыков работы с реальными приборами и установками. Очень важна и все еще мало исследована проблема формирования адекватного представления о мире при работе с нереальными объектами.

Возможно, эту проблему можно решить, используя в процессе обучения программные продукты, максимально точно отображающие процессы и явления, происходящие в реальном мире. В этом смысле особое внимание стоит обратить на средства виртуальной реальности. Таким образом, одной из основных проблем преподавания предметов естественнонаучного цикла является отсутствие возможности реальной постановки учебного, и лабораторного эксперимента. Хотя в настоящее время имеются разработки виртуальных лабораторных практикумов, однако окончательно решение проблемы требует пристального внимания специалистов различных профилей, в том числе и психолого-педагогического.

1.2 Роль технологии виртуальных приборов обучения в техническом вузе

Лабораторная н экспериментальная база вуза достаточно консервативна в силу финансовых и материальных ограничений. Поэтому она практически не успевает отслеживать бурное развитие техники н неизбежно морально устаревает.

В современных быстро изменяющихся условиях, в которых сетка специальностей и специализаций должна быстро и непрерывно адаптироваться к запросам промышленности, реальная лабораторная и экспериментальная база вуза не в состоянии поддерживать учебный процесс на должном уровне. Следует также отмстить, что отставание материальной базы от требований жизни является не только вузовской проблемой, но и обшей проблемой в промышленности и для различных организаций и фирм, занимающихся разработками ноной техники.

Современная технология виртуальных приборов позволяет существенно сократить этот разрыв и сэкономить значительные финансовые ресурсы, не снижая качества обучения. Мировая вузовская практика подтверждает устойчивую и усиливающуюся тенденцию продвижения виртуальных технологий в учебном процессе.

Программная среда Emu8086, поддерживающая технологию виртуальных приборов, и соответствующее аппаратное обеспечение позволяют модернизировать учебные лаборатории гибким, программно перестраиваемым измерительным оборудованием или модернизировать имеющиеся средства измерений практически любой сложности, а также внедрять автоматизированные измерительные системы и станции для учебного процесса и комплексных исследований н вузовской науке. Для практической реализации технологии виртуальных приборов и систем измерения в учебном процессе достаточно приобрести недорогую стандартную плату аналогового ввода-вывода, основными составляющими которой являются многоканальный коммутатор и аналого-цифровой преобразователь.

Технико-экономические оценки показывают, что рабочее место, включающее минимальный типовой набор традиционных измерительных приборов (осциллограф, импульсный и низкочастотный генераторы, частотомер, цифровой тестер), по текущим каталогам цен обходится в три раза дороже по сравнению с затратами на виртуальный эквивалент, включая приобретение современной персональной ЭВМ типа Pentium IV. Поскольку компьютеры так или иначе приобретаются, а также с учетом того, что па кафедрах уже имеется парк компьютеров, модернизация оборудования лабораторий на базе виртуальных технологий будет стоить в 5-10 раз дешевле.

Читайте также:
Как написать программу в excel visual basic

Так, оценочные расчеты, проведенные для общетехнической кафедры, показывают, что для полной модернизации приборного оборудования пяти учебных лабораторий, в каждой из которых организовано по 5 рабочих мест, необходимо затратить около 8,0 млн. тг. (цены на 2006 г), если модернизацию осуществлять традиционное покупкой необходимых «реальных» приборов. При использовании технологии виртуальных приборов, с учетом уже имеющихся на кафедре компьютеров, модернизация обойдется примерно в 8 раз дешевле — в 1 000 млн. тг. Последние цифры уже приемлемы и подъемны, особенно при поэтапном подходе к модернизации. Например, при ежегодном вложении по 400 тыс. тг, полное переоснащение лабораторий можно завершить в течение 2.5-3 лет.

2. Программный эмулятор (виртуальный ПК) Emu8086

Все для изучения ассемблера в одном пакете! Emu8086 сочетает в себе мощный редактор исходного кода, ассемблер, дизассемблер, программный эмулятор (виртуальный ПК) с отладчиком и поэтапное обучение. Эта программа чрезвычайно полезна для тех, кто только начинает изучать ассемблер. Она компилирует исходный код и выполняет его с помощью эмулятора шаг за шагом.

Визуальный интерфейс очень прост в работе. Вы можете наблюдать регистры, флаги и память во время выполнения вашей программы. Арифметико-логическое устройство (АЛУ) показывает внутреннюю работу центрального процессора (CPU).

Эмулятор выполняет программы на виртуальном ПК, который полностью исключает возможность доступа из вашей программы к реальным аппаратным средствам, таким как жесткие диски и память. Так как ваш код ассемблера выполняется на виртуальной машине, то отладка становится более легкой.

Машинный код 8086 полностью совместим со всеми последовавшими за ним поколениями микропроцессоров Intel, включая Pentium II и Pentium 4, и я уверен, что Pentium 5 будет также поддерживать команды 8086. Это делает код 8086 очень привлекательным, так как он выполняется как на старых, так и на современных компьютерных системах.

Другим преимуществом является то, что набор команд 8086 сравнительно невелик, и поэтому изучить его будет легче. Emu8086 имеет более легкий синтаксис, чем любые другие ассемблеры, но будет генерировать программу, которая сможет быть выполнена на любом компьютере, поддерживающем машинный код 8086. Это большой плюс для начинающих!

Примечание: Если вы не используете Emu8086 для компиляции кода, вы не сможете выполнить ваш исходный код в пошаговом режиме. Примечание: Если при попытке запустить вашу программу, вам выдаются сообщения о том, что те или иные команды не поддерживаются, то вы не сможете выполнить эту программу в отладочном режиме.

Однако ее можно просто откомпилировать и запустить обычным образом (не под управлением Emu8086). Как начать? Запустите Emu8086, выбрав ее значок в меню «Пуск», или непосредственно запустите приложение Emu8086. exe. Выберите «Samples (примеры)» из меню «File». Щелкните кнопку [Compile and Emulate] (или нажмите клавишу F5).

Щелкните кнопку [Single Step] (пошаговый режим) (или нажмите клавишу F8), и наблюдайте за выполнением кода. Попытайтесь открыть другие примеры. Все примеры имеют подробные комментарии, так что для обучения они весьма полезны.

2.1 Использование эмулятора Emu8086

Напечатайте ваш код внутри текстовой области, и после щелчка кнопки [Compile]. Вас спросят о месте, где сохранить компилируемый файл. После успешной компиляции Вы можете щелкать кнопку [Emulate], чтобы загрузить компилируемый файл в эмуляторе.

Если Вы хотите загрузить ваш код в эмулятор, только щелкните кнопку «Emulate».

Но Вы также можете использовать эмулятор, чтобы загрузить executables, даже если Вы не имеете первоначального исходного текста. Выберите » Show Emulator», меню «Emulator». Попытка, загружающая файлы от папки «MyBuild».

Если не имеется никаких файлов в «MyBuild» папке, возвращают исходному редактору, выбирают Samples от меню File, загружают любой образец, выбирают и затем загружаются в эмулятор. 2) произвести исследование области памяти согласно варианта задания.

В результате исследования необходимо заполнить табл.1.1; В памяти перечисляют первую строку — смещение, вторая строка — значение hexadecimal, третья строка — десятичное значение, и последняя строка — значение символа ASCII. Кнопка [Single Step] выполняет команды, один за другим останавливающие после каждой команды. [Run] кнопка выполняет команды один за другим с задержкой, установленной задержкой шага между командами.

Дважды щелкните на текстовых полях регистра, открывается окно «Extended Viewer » со значением того регистра, преобразованного ко всем возможным формам. Вы можете изменять значение регистра непосредственно в этом окне. Дважды щелкните на элементе списка памяти, открывается » Extended Viewer» со значением WORD, загруженным со списка памяти в выбранном местоположении. Менее существенный байт — в младшем адресе: LOW BYTE загружен от выбранной позиции и HIGH BYTE от следующего адреса памяти. Вы можете изменять значение слова памяти непосредственно в окне » Extended Viewer»,

Источник: studizba.com

Работа с эмулятором Emu8086. Особенности создания ассемблерной программы в среде эмулятора EMU8086

Каждый язык программирования имеет свои особенности. Язык ассемблера – не исключение. Традиционно первая программа выводит приветственное сообщение на экран ‘Hello World’.

В отличие от многих современных языков программирования в ассемблерной программе каждая команда располагается на ОТДЕЛЬНОЙ СТРОКЕ. Нельзя разместить несколько команд на одной строке. Не принято, также, разбивать одну команду на несколько строк.

Язык ассемблера является РЕГИСТРОНЕЧУВСТВИТЕЛЬНЫМ.

Т. е. в большинстве случаев нет разницы между большими и малыми буквами. Команда может быть ДИРЕКТИВОЙ – указанием транслятору. Они выполняются в процессе превращения программы в машинный код. Многие директивы начинаются с точки. Для удобства чтения программы они обычно пишутся БОЛЬШИМИ БУКВАМИ. Кроме директив еще бывают ИНСТРУКЦИИ – команды процессору.

Именно они и будут составлять машинный код программы.

Синтаксис ассемблера

По умолчанию, число в программе воспринимается ассемблером как десятичное. Чтобы обозначить двоичное число, необходимо к нему в конце добавить символ ’b’. Восьмеричное число обозначается аналогично с помощью символа ’o’. Для записи шестнадцатеричного числа эмулятор поддерживает 3 формы записи:

· перед числом записываются символы ’0x’ (как в C/C++);

· перед числом записывается символ ’$’ (как в Pascal);

· после числа записывается символ ’h’. Если шестнадцатеричное число начинается с буквы, необходимо добавить в начале ноль (иначе непонятно, число это или имя метки).

Процесс обработки программы на языке ассемблера

Весь процесс технического создания ассемблерной программы можно разбить на 4 шага (исключены этапы создания алгоритма, выбора структур данных и т.д.).

Набор программы в текстовом редакторе и сохранение ее в отдельном файле. Каждый файл имеет имя и тип, называемый иногда расширением. Тип в основном используется для определения назначения файла. Например, программа на C имеет тип C, на Pascal – PAS, на языке ассемблера – ASM.

Обработка текста программы транслятором. На этом этапе текст превращается в машинный код, называемый объектным. Кроме того, есть возможность получить листинг программы, содержащий кроме текста программы различную дополнительную информацию и таблицы, созданные транслятором. Тип объектного файла – OBJ, файла листинга – LST. Этот этап называется ТРАНСЛЯЦИЕЙ.

Читайте также:
Как узнать сколько программа занимает оперативной памяти python

Обработка полученного объектного кода компоновщиком. Тут программа «привязывается» к конкретным условиям выполнения на ЭВМ. Полученный машинный код называется выполняемым. Кроме того, обычно получается карта загрузки программы в ОЗУ. Выполняемый файл имеет тип EXE, карта загрузки – MAP.

Этот этап называется КОМПОНОВКОЙ или ЛИНКОВКОЙ.

Запуск программы. Если программа работает не совсем корректно, перед этим может присутствовать этап ОТЛАДКИ программы при помощи специальной программы – отладчика. При нахождении ошибки приходится проводить коррекцию программы, возвращаясь к шагу 1. Таким образом, процесс создания ассемблерной программы можно изобразить в виде следующей схемы. Конечной целью, напомним, является работоспособный выполняемый файл HELLO. EXE.

Программный эмулятор (виртуальный пк) Emu8086

Этот программный продукт содержит все необходимое для создания программы на языке Assembler.

Emu8086 сочетает в себе мощный редактор исходного кода, ассемблер, дизассемблер, программный эмулятор (виртуальный ПК) с отладчиком. Эмулятор выполняет программы на виртуальном ПК, который полностью исключает возможность доступа из вашей программы к реальным аппаратным средствам, таким как жесткие диски и память.

Машинный код 8086 полностью совместим со всеми последовавшими за ним поколениями микропроцессоров Intel, включая Pentium III и Pentium. Это делает код 8086 очень привлекательным, так как он выполняется как на старых, так и на современных компьютерных системах.

Пример 1.

Работа с эмулятором Emu8086. Особенности создания ассемблерной программы в среде эмулятора EMU8086

Emu8086 сочетает в себе мощный редактор исходного кода, ассемблер, дизассемблер, программный эмулятор (виртуальный ПК) с отладчиком и поэтапное обучение. Эта программа компилирует исходный код и выполняет его с помощью эмулятора шаг за шагом.

Итак, вы скачали и установили программу Emu8086 на свой компьютер. Запускаем её и создаём новый файл через меню FILE – NEW – COM TEMPLATE (Файл – Новый – Шаблон файла COM).

1. Запустите эмулятор и щелкните на кнопку new:

2. Выберите тип исполняемого файла:

В редакторе исходного кода после этого мы увидим следующее:

Рисунок 1 – Создание нового файла в Emu8086

Здесь надо отметить, что программы, создаваемые с помощью Ассемблеров для компьютеров под управлением Windows, бывают двух типов: COM и EXE. Отличия между этими файлами мы рассмотрим позже, а пока вам достаточно знать, что на первое время мы будем создавать исполняемые файлы с расширением COM, так как они более простые.

После создания файла в Emu8086 описанным выше способом в редакторе исходного кода вы увидите строку «add your code hear» – «добавьте ваш код здесь» (рисунок 1). Эту строку мы удаляем и вставляем вместо неё следующий текст:

Таким образом, полный текст программы будет выглядеть так:

Кроме этого в верхней части ещё имеются комментарии (на рисунке 1 – это текст зелёного цвета). Комментарий в языке Ассемблера начинается с символа ; (точка с запятой) и продолжается до конца строки.

Регистр символов в языке ассемблера роли не играет. Вы можете написать RET, ret или Ret – это будет одна и та же команда.

Напечатайте ваш код программы внутри текстовой области. Вы можете сохранить этот файл куда–нибудь на диск. Но можете и не сохранять.

Чтобы загрузить код в эмулятор, нажмите кнопку EMULATE (с зелёным треугольником) или клавишу F5. Откроется два окна: окно эмулятора и окно исходного кода (рисунок 2).

Рисунок 2 – Окно эмулятора Emu8086

В окне памяти (memory) перечисляют первую строку – смещение, вторая строка – значение hexadecimal, третья строка – десятичное значение, и последняя строка – значение символа ASCII (ОБВЕДЕНО РОЗОВЫМ ЦВЕТОМ на рисунке).

Кнопка [Single Step] выполняет команды, один за другим останавливающие после каждой команды.

[Run] кнопка выполняет команды один за другим с задержкой, установленной задержкой шага между командами.

Дважды щелкните на текстовых полях регистра, открывается окно «Extended Viewer » со значением того регистра, преобразованного ко всем возможным формам. Вы можете изменять значение регистра непосредственно в этом окне.

В окне эмулятора отображаются регистры и находятся кнопки управления программой.

В окне исходного кода отображается исходный текст вашей программы, где подсвечивается строка, которая выполняется в данный момент. Всё это очень удобно для изучения и отладки программ.

В окне эмулятора вы можете запустить вашу программу на выполнение целиком (кнопка RUN) либо в пошаговом режиме (кнопка SINGLE STEP). Пошаговый режим удобен для отладки.

Сейчас запустим программу на выполнение кнопкой RUN. После этого (если Вы не сделали ошибок в тексте программы) вы увидите сообщение о завершении программы (рисунок 3).

Здесь Вам сообщают о том, что программа передала управление операционной системе, то есть программа была успешно завершена. Нажмите кнопку ОК в этом окне и вы увидите, наконец, результат работы вашей первой программы на языке ассемблера (рисунок 4).

Рисунок 3 – Сообщение о завершении программы

Рисунок 4 – Ваша первая программа выполнена

Как мы уже говорили, наша первая программа выводит на экран английскую букву «А». Результат оправдал наши ожидания – буква «А» выведена на экран.

Здесь стоит отметить, что Emu8086 – это ЭМУЛЯТОР, то есть он эмулирует работу компьютера с процессором 8086. Поэтому в описанном выше примере программа выполняется не операционной системой, а эмулятором. Emu8086 может создавать и реальные программы, которые могут самостоятельно выполняться на компьютере.

Описание работы в эмулятора

В нашем случае пока не важно, как выполняется программа – эмулятором или операционной системой. Главное – разобраться с вопросом создания программ на языке ассемблера. Поэтому разберём нашу простенькую программку подробно.

#make_COM# – 1–ая строка. Эта команда – специфическая для Emu8086. Она используется для определения типа создаваемого файла. В нашем случае это файл с расширением .COM.

ORG 100h – 2–ая строка. Эта команда устанавливает значение программного счетчика в 100h, потому что при загрузке СОМ–файла в память, DOS выделяет под блок данных PSP первые 256 байт (десятичное число 256 равно шестнадцатеричному 100). Код программы располагается только после этого блока. Все программы, которые компилируются в файлы типа СОМ, должны начинаться с этой директивы.

MOV AH, 02h – 3–я строка. Инструкция (или команда) MOV помещает значение второго операнда в первый операнд. То есть значение 02h помещается в регистр АН. Для чего это делается? 02h – это ДОСовская функция, которая выводит символ на экран.

Мы пишем программу для DOS, поэтому используем команды этой операционной системы (ОС). А записываем мы эту функцию (а точнее ее номер) именно в регистр АН, потому что прерывание 21h использует именно этот регистр.

MOV DL, 41h – 4–я строка. Код символа «A» заносится в регистр DL. Код символа «A» по стандарту ASCII – это 41h.

INT 21h – 5–я строка. Это и есть то самое прерывание 21h – команда, которая вызывает системную функцию DOS, заданную в регистре АН (в нашем примере это функция 02h). Команда INT 21h – основное средство взаимодействия программ с ОС.

Читайте также:
Raid не работает реферальная программа

INT 20h – 6–я строка. Это прерывание, которое сообщает операционной системе о выходе из программы и о передаче управления консольному приложению. Значит, при использовании INT 20h в нашем примере, управление будет передаваться программе Emu8086. А в том случае, если программа уже откомпилирована и запущена из ОС, то команда INT 20h вернет нас в ОС (например, в DOS).

В принципе, в случае с Emu8086 эту команду можно было бы пропустить, так как эту же функцию выполняет команда RET, которая вставляется в исходный текст автоматически при создании нового файла по шаблону (как это сделали мы ранее). Но я решил использовать INT 20h и здесь для совместимости с другими ассемблерами.

Практическое задание:

1. Запустить эмулятор Emu8086

2. Изучить программные компоненты Emu8086 (основные окна, кнопки)

3. Выполнить пример, описанный пошагово в теоретическом разделе

4. Самостоятельно по образцу, рассмотренному выше, создать первую программу, которая будет выводить на экран: ‘Hello World’

5. Записать код выполненной программы, дать комментарии каждому выполняемому блоку команд

6. Изучить режимы работы отладчика

Контрольные вопросы:

1. Опишите структуру ассемблерной программы.

2. Опишите процесс обработки программы на языке ассемблера. Каковы этапы получения выполняемого файла?

3. Опишите назначение эмулятора Emu8086.

4. Опишите назначение основных компонентов Emu8086.

Дата добавления: 2021-07-19 ; просмотров: 1074 ; Мы поможем в написании вашей работы!

Поделиться с друзьями:

Источник: studopedia.net

Emu8086 Запускаем программу Emu8086 и создаём новый файл через меню file new com template (Файл Новый Шаблон файла com). В редакторе исходного кода после этого мы увидим следующее Рис. Создание нового файла в Emu8086

Единственный в мире Музей Смайликов

Самая яркая достопримечательность Крыма

Скачать 251.21 Kb.

Управление ходом программы

Управление ходом программы — очень важная вещь. Это то, что заставляет программу принимать решения, в зависимости от некоторых условий.

Основная команда, которая передает управление в другую точку программы — это JMP.

Чтобы объявить метку в вашей программе, просто напечатайте ее имя и в конце добавьте двоеточие «:». Метка может быть любой комбинацией символов, но не должна начинаться с цифры. Например, ниже представлены три правильных объявления меток:

Метка может быть объявлена на отдельной строке или перед любой другой командой, например:

ORG 100h
MOV AX, 5 ; записать в AX число 5.

MOV BX, 2 ; записать в ВX число 5.
JMP calc ; перейти к ‘calc’.
back: JMP stop ; перейти к ‘stop’.
calc:

ADD AX, BX ; прибавить BX к AX.

Конечно, есть более простой путь для вычисления результата с двумя числами, но это хороший пример применения командыJMP.
Как вы можете видеть из этого примера, команда JMP может передавать управление другому участку программы, который может находиться как после этой команды, так и перед ней. Этот переход может быть осуществлен в пределах текущего сегмента кода (65,535 байтов).


    Короткие условные переходы

Подобно команде JMP, которая выполняет безусловный переход, существуют команды, которые осуществляют условный переход (переход, который осуществляется только в том случае, если выполняется определенное условие). Эти команды разделяются на три группы. Первая группа только проверяет отдельный флаг, вторая — сравнивает числа со знаком, третья — сравнивает числа без знака.

Как вы можете видеть, существуют команды, которые выполняют одинаковые действия. Это нормально. Они даже ассемблируются в одинаковый машинный код, поэтому будет неплохо, если вы запомните, что при компиляции команды JE, после дизассемблирования вы получите ее как: JZ.
Различные имена используются для того, чтобы делать программы более легкими для понимания и кодирования.

Команды перехода для чисел со знаками

Команда Описание Условие Обратная команда
JE , JZ Переход, если «равно» (=).
переход, если «ноль».
ZF = 1 JNE, JNZ
JNE , JNZ Переход, если «не равно» (<>).
Переход, если «не ноль».
ZF = 0 JE, JZ
JG , JNLE Переход, если «больше» (>).
Переход, если «не меньше или равно»(not =).
SF <> OF JNL, JGE
JGE , JNL Переход, если «больше или равно» (>=).
Переход, если «не меньше» (not ).
ZF = 1
or
SF <> OF
JNLE, JG

<> — этот знак означает «не равно».

Команды перехода для чисел без знаков

Команда Описание Условие Обратная команда
JE , JZ Переход, если «равно» (=).
Переход, если «ноль».
ZF = 1 JNE, JNZ
JNE , JNZ Переход, если «не равно» (<>).
Переход, если «не ноль».
ZF = 0 JE, JZ
JA , JNBE Переход, если «выше» (>).
Переход, если «не ниже или равно» (not =).
Переход по переносу.
CF = 1 JNB, JAE, JNC
JAE , JNB, JNC Переход, если «выше или равно» (>=).
Переход, если «не ниже» (not ).
CF = 1
or
ZF = 1
JNBE, JA

Обычно, если требуется сравнить два числовых значения, то используют команду CMP (она делает то же самое, что и команда SUB (вычитание), но не сохраняет результат, а влияет только на флаги.

Логика очень простая, например:

требуется сравнить числа 5 и 2,

результат — НЕ НОЛЬ (Флаг Нуля — Zero Flag (ZF) установлен в0).

требуется сравнить 7 и 7,

результат — НОЛЬ! (Флаг Нуля — Zero Flag (ZF) установлен в 1 и команды JZ или JE выполнят переход).

include emu8086.inc
ORG 100h
MOV AL, 25 ; записать в AL число 25.

MOV BL, 10 ; записать в BL число 10.
CMP AL, BL ; сравнить AL с BL.
JE equal ; если AL = BL (ZF = 1), то перейти к метке equal.
PUTC ‘N’ ; иначе, если AL <> BL, то продолжить выполнение

JMP stop ; программы — напечатать ‘N’ и перейти к метке stop.
equal: ; если программа на этой метке,

Попробуйте вышеописанный пример с различными числами в ALи BL, откройте флаги, щелкнув по кнопке [FLAGS]. Используйте [Single Step — пошаговый режим] и наблюдайте за происходящим. Не забывайте перекомпилировать и перезагружать вашу программу после кажого сделанного вами в ней изменения (используйте клавишу F5).

Все условные переходы имеют одно серьезное ограничение — в отличие от команды JMP, они могут выполнять переход только на 127 байтов вперед или на 128 байтов назад (учтите, что большие команды ассемблируются в 3 и более байтов).

  • Взять обратную команду из приведенной выше таблицы и выполнить переход к метке label_x.
  • Использовать команду JMP для перехода к нужному участку программы.
  • Определить метку label_x: только после команды JMP.

include emu8086.inc
ORG 100h
MOV AL, 25 ; записать в AL число 25.

MOV BL, 10 ; записать в BL число 10.
CMP AL, BL ; сравнить AL с BL.

JNE not_equal ; переход, если AL <> BL (ZF = 0).

; представим, что здесь у нас

; более чем в 127 байтов.

PUTC ‘N’ ; если мы оказались здесь, то AL <> BL,

JMP stop ; тогда печатаем ‘N’, и переходим к метке stop.
equal: ; если мы оказались здесь,

b DB 4 ; 1 байт.
; переход назад на 7 байтов, если BL <> 0:

; (Команда JMP занимает 2 байта)

Источник: topuch.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru