номерпорта.

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

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

Команды работы со стеком

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

Стек – это область памяти, специально выделяемая для временного хранения данных программы.

Для работы со стеком предназначены три регистра:

1) ss – сегментный регистр стека;

2) sp/esp – регистр указателя стека;

3) bp/ebp – регистр указателя базы кадра стека. Для организации работы со стеком существуют специальные команды записи и чтения.

1. push источник – запись значения источникв вершину стека.

2. pop назначение – запись значения из вершины стека по месту, указанному операндом назначение. Значение при этом «снимается» с вершины стека.

3. pusha – команда групповой записи в стек.

4. pushaw – почти синоним команды pusha. Атрибут разрядности может принимать значение use16 или use32. Р

5. pushad – выполняется аналогично команде pusha, но есть некоторые особенности.

Следующие три команды выполняют действия, обратные вышеописанным командам:

1) popa;

2) popaw;

3) popad.

Группа команд, описанная ниже, позволяет сохранить в стеке регистр флагов и записать слово или двойное слово в стеке.

1. pushf – сохраняет регистр флагов в стеке.

2. pushfw – сохранение в стеке регистра флагов размером в слово. Всегда работает как pushf с атрибутом use16.

3. pushfd – сохранение в стеке регистра флагов flags или eflags в зависимости от атрибута разрядности сегмента (т. е. то же, что и pushf).

Аналогично, следующие три команды выполняют действия, обратные рассмотренным выше операциям:

1) popf;

2) popfw;

3) popfd.

54. Арифметические команды

Такие команды работают с двумя типами:

1) целыми двоичными числами, то есть с числами, закодированными в двоичной системе счисления.

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

Микропроцессор выполняет сложение операндов по правилам сложения двоичных чисел.

В системе команд микропроцессора имеются три команды двоичного сложения:

1) inc операнд – увеличение значения операнда;

2) add операнд1, операнд2 – сложение;

3) adc операнд1,операнд2 – сложение с учетом флага переноса cf.

Вычитание двоичных чисел без знака

Если уменьшаемое больше вычитаемого, то разность положительна. Если уменьшаемое меньше вычитаемого, возникает проблема: результат меньше 0, а это уже число со знаком.

После вычитания чисел без знака нужно анализировать состояние флага CF. Если он установлен в 1, то произошел заем из старшего разряда и результат получился в дополнительном коде.

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

По содержимому флага переполнения of. Его установка в 1 говорит о том, что результат вышел за диапазон представления знаковых чисел (т. е. изменился старший бит) для операнда данного размера, и программист должен предусмотреть действия по корректировке результата.

Принцип вычитания чисел с диапазоном представления, превышающим стандартные разрядные сетки операндов, тот же, что и при сложении, т. е. используется флаг переноса cf. Нужно только представлять себе процесс вычитания в столбик и правильно комбинировать команды микропроцессора с командой sbb.

Для умножения чисел без знака предназначена команда

mul сомножитель_1

Для умножения чисел со знаком предназначена команда

[imul операнд_1, операнд_2, операнд_3]

Для деления чисел без знака предназначена команда div делитель

Для деления чисел со знаком предназначена команда idiv делитель

55. Логические команды

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

1. Отрицание (логическое НЕ) – логическая операция над одним операндом, результатом которой является величина, обратная значению исходного операнда.

2. Логическое сложение (логическое включающее ИЛИ) – логическая операция над двумя операндами, результатом которой является «истина» (1), если один или оба операнда имеют значение «истина» (1), и «ложь» (0), если оба операнда имеют значение «ложь» (0).

3. Логическое умножение (логическое И) – логическая операция над двумя операндами, результатом которой является «истина» (1) только в том случае, если оба операнда имеют значение «истина» (1). Во всех остальных случаях значение операции «ложь» (0).

4. Логическое исключающее сложение (логическое исключающее ИЛИ) – логическая операция над двумя операндами, результатом которой является «истина» (1), если только один из двух операндов имеет значение «истина» (1), и ложь (0), если оба операнда имеют значение «ложь» (0) или «истина» (1).

4. Логическое исключающее сложение (логическое исключающее ИЛИ) – логическая операция над двумя операндами, результатом которой является «истина» (1), если только один из двух операндов имеет значение «истина» (1), и ложь (0), если оба операнда имеют значение «ложь» (0) или «истина» (1).

Cледующий набор команд, поддерживающих работу с логическими данными:

1) and операнд_1, операнд_2 – операция логического умножения;

2) or операнд_1, операнд_2 – операция логического сложения;

3) xor операнд_1, операнд_2 – операция логического исключающего сложения;

4) test операнд_1, операнд_2 – операция «проверить» (способом логического умножения)

5) not операнд – операция логического отрицания.

а) для установки определенных разрядов (бит) в 1 применяется команда or операнд_1, операнд_2;

б) для сброса определенных разрядов (бит) в 0 применяется команда and операнд_1, операнд_2;

в) команда xor операнд_1, операнд_2 применяется:

– для выяснения того, какие биты в операнд_1 и операнд_2 различаются;

– для инвертирования состояния заданных бит в операнд_1.

Для проверки состояния заданных бит применяется команда test операнд_1, операнд_2 (проверить операнд_1).

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату