русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

END MAIN ;директива ассемблера


Дата добавления: 2014-11-28; просмотров: 1851; Нарушение авторских прав


Рис. 6.1. Полный текст программы на языке ассемблера, для сложения пяти целых чисел

Три символических имени, объявленных в разделе данных, используются в ко­мандах в разделе кода. В частности, метка MAIN предназначена для определения точки начала выполнения программы, а также задается в ассемблерной директи­ве END, которой заканчивается текстовый файл программы. В ассемблере IA-32 имеются и другие директивы. Некоторые из них будут рассмотрены позже.

6.3. Управление потоком выполнения программы

Существует два способа отклонения программы от «прямолинейного курса». Первый из них (о нем рассказывается в разделе 5.8) — это вызов подпрограммы и возврат из нее. Кроме того, в программе могут выполняться переходы к задан­ным командам — как условные, так и безусловные. О них мы сейчас и поговорим.

6.3.1. Условные переходы и флаги кодов условий

Представленная на рис. 5.8, команда

JG STARTADD

относится к числу команд условного перехода. Условие «больше нуля» задается в ней суффиксом кода операции G. Это условие касается и результата последней выполненной команды обработки данных, которой в нашем примере была команда

DEC ECX

Признаки результатов, которые генерируются командами типа Decrement и Add, выполняющими арифметические операции и операции сравнения, записы­ваются в четыре флага кодов условий в регистре состояния процессора, показан­ном на рис. 5.2. В зависимости от результата операции эти флаги, называемые SF (sign — знак), ZF (zero — нуль), OF (overflow — переполнение) и CF (carry — перенос), устанавливаются в 1 или очищаются нулем. Но существует одно исключение. В операции вычитания бит CF устанавливается в 1, если перенос не выполняется, что соответствует сигналу обратного переноса. Состояние этих флагов можно проверить в последующих командах условного перехода, с тем чтобы решить, следует ли осуществлять переход. В нашем примере при выполнении условия [ECX] > 0 управление передается команде, записанной по целевому адресу STARTADD.



В команде условного перехода задается не абсолютное значение целевого ад­реса перехода, а число со знаком, которое прибавляется к содержимому регистра указателя команды, то есть целевой адрес задается относительно адреса в указа­теле команды. Значение указателя команды увеличивается сразу после выборки очередной команды, поэтому он всегда определяет следующую выполняемую ко­манду программы. Когда к указателю прибавляется относительный адрес перехода, он начинает указывать на команду, следующую за командой перехода. Предполо­жим, что адрес STARTADD в нашем примере равен 1000. Для кодирования ко­манд ADD, INC, DEC и JG из программы на рис. 5.8, а требуется 7 байт. Обнов­ленное содержимое регистра указателя команды EIP будет равно 1007, то есть адресу последней в программе команды MOV. Таким образом, относительное расстояние до целевой команды перехода составляет -7; именно данное значение и содержится в команде условного перехода. Это маленькое отрицательное число можно представить одним байтом. Поэтому, с учетом байта кода операции, для записи команды условного перехода достаточно 2 байт. Такой размер имеют ко­манды перехода, в которых относительный адрес перехода лежит в диапазоне от -128 до +127. Если же расстояние до целевой команды перехода больше, то ис­пользуется 4-байтовое смещение.

В этом примере проверяется значение в регистре ЕСХ — нас интересует, боль­ше ли оно нуля. Другие свойства результата можно проверить при помощи иных команд условного перехода. Например, если результат равен нулю, переход вы­полняется командой JZ (или JE), а если знак результата отрицателен (знаковый бит равен 1) — командой JS.



<== предыдущая лекция | следующая лекция ==>
Псевдокоманды определения переменных | Команды сравнения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.18 сек.