русс | укр

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

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

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

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


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

Команды сравнения


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


Условный переход в программах часто осуществляется в соответствии с резуль­татом сравнения двух чисел. Команда Compare

CMP dst,src

выполняет операцию

[dst] - [src]

и на основе полученного результата устанавливает флаги кодов условий. При этом ни один из операндов не изменяется и первый операнд всегда сравнивается со вторым. Например, переход по условию «больше» выполняется в том случае, если операнд назначения dst больше исходного операнда src.

6.3.3. Безусловный переход

Команда безусловного перехода JMP всегда вызывает переход к команде по целе­вому адресу. В ней может быть задано короткое (1 байт) или длинное (4 байта) от­носительное смещение со знаком. Кроме того, как и в командах условного перехо­да, могут использоваться другие режимы адресации. Такая гибкость определения целевого адреса перехода может быть очень полезной. В каждой точке программы выполняется только одно из альтернативных вычислений. Предположим, что в спе­циальной таблице в памяти начиная с адреса JUMPTABLE хранятся 4-байтовые адреса первой команды каждой из подпрограмм, представляющих возможные ветви программы. Если последовательно пронумеровать эти ветви как 0, 1, 2... и загрузить индекс выполняемой подпрограммы в регистр ESI, то переход к вы­бранной ветви может быть выполнен посредством такой команды с использова­нием индексной адресации со смещением:

JMP [JUMPTABLE + ESI*4]

6.4. Логические команды, команды сдвига и циклического сдвига

6.4.1. Логические операции

В архитектуре IA-32 имеются команды, выполняющие логические операции И, ИЛИ и Исключающее ИЛИ (END, OR, XOR). Это поразрядные операции с двумя операндами и записью результата по адресу назначения. Предположим, что в регистре ЕАХ со­держится шестнадцатеричное значение 0000FFFF, а в регистре ЕВХ — значение 02FA62CA. Команда



AND EBX,EAX

очистит левую половину регистра ЕВХ, заполнив ее нулями, а правую его часть оставит без изменений. В результате в ЕВХ окажется значение 000062СА.

Кроме того, в архитектуре IA-32 имеется команда NOT, генерирующая логиче­ское дополнение всех битов операнда, то есть заменяющая все единицы нулями, а все нули единицами.

6.4.2. Операции сдвига и циклического сдвига

При помощи операции логического или арифметического сдвига операнд может быть смещен влево или вправо на заданное количество разрядов. Формат коман­ды сдвига таков:

КодОперации dst,count

где сдвигаемый операнд dst задается при помощи одного из стандартных адрес­ных режимов, а количество разрядов сдвига count представляется 8-разрядным значением, либо задаваемым непосредственно в команде, либо содержащимся в 8-разрядном регистре CL. Существует четыре команды сдвига:

- SHL — логический сдвиг влево;

- SHR — логический сдвиг вправо;

- SAL — арифметический сдвиг влево (то же, что SHL);

- SAR — арифметический сдвиг вправо.

При внимательном рассмотрении представления двоичного числа, понятно, что сдвиг числа на один разряд влево эквивалентен его умножению на 2, а сдвиг на один разряд вправо — его делению на 2. Конечно, при сдвиге влево может произойти переполнение, а при сдвиге вправо может по­теряться конец числа. Освобождающиеся в результате сдвига разряды устанавливаются в 0, а сдвигаемые за границу операнда разряды отмечаются с помощью флага перено­са С, а затем удаляются. Устанавливать флаг С особенно удобно при выполнении арифметических операций с большими числами, занимающими больше одного слова. На рис. 6.2, а показан пример сдвига содержимого регистра R0 влево на два разряда. Команда логического сдвига вправо работает точно так же (рис. 6.2,6).

Еще одно важное наблюдение заключается в том, что при сдвиге вправо в освободившемся разряде должен быть повторен знаковый бит. Этим арифметический сдвиг вправо отличается от логического, в котором осво­бождающиеся разряды всегда заполняются нулями. Пример арифметического сдвига вправо (SAR) приведен на рис. 6.2, в. Арифметический сдвиг влево ничем не отличается от логического.

а

б

в

Рис. 6.2. Команды логического и арифметического сдвига: логический сдвиг влево, SHL R0,2 (а); логический сдвиг вправо, SHR R0,2 (б); арифметический сдвиг вправо, SAR R0,2 (в)

Существует также четыре команды циклического сдвига:

ROL - циклический сдвиг влево;

ROR - циклический сдвиг вправо;

RCL - циклический сдвиг влево с установкой флага CF;

RCR - циклический сдвиг вправо с установкой флага CF.

Компьютер поддерживает две вер­сии циклического сдвига вправо и две версии циклического сдвига влево. В пер­вой версии разряды операнда просто циклически сдвигаются, а во второй в сдви­ге участвует еще и флаг CF. Примеры всех четырех операций циклического сдвига приведены на рис. 6.3.

Рис. 6.3. Команды циклического сдвига: влево без переноса, ROL R0,2 (a); влево с пере-носом, RLC R0,2 (б); вправо без переноса, ROR R0,2 (a); вправо с переносом, RRC R0,2 (г)



<== предыдущая лекция | следующая лекция ==>
END MAIN ;директива ассемблера | Программа упаковки цифр


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


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

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

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


 


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

 
 

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

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