Форматы команд и форматы кодирования данных при составлении программ




Команду можно разбить на две части:

КОП Адресная часть

 

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

Трехадресные команды:

КОП Адр1 Адр2 Адр3

здесь адр-1 и адр-2 – адреса первого и второго операндов; адр-3 – адрес результата операции.

Двухадресные команды:

КОП Адр 1 Адр 2

здесь адр-1 – адрес первого операнда; адр-2 – адрес второго операнда (обычно также адрес результата операции).

Одноадресные команды:

КОП Адр 1

здесь адр-1 – либо адрес операнд, либо адрес результата операции (в зависимости от типа команды).

Безадресные команды («нульадресные»):

КОП

 

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

 

Формат кодирования

Основной формат кодирования команд имеет вид:

[метка] команда [операнд(ы)]

Метка (если имеется), команда и операнд (если имеется) разделяются хотя бы одним пробелом либо символом табуляции. Максимальная длина строки – 132 символа, но предпочтительно работать со строками в 80 символов (соответственно ширине экрана). Метка, команда и операнд не обязательно должны начинаться с определенной позиции строки. Но рекомендуется записывать их в колонку – для лучшей удобочитаемости программы. Примеры кодирования:

метка команда операнд

COUNT DB 1;Метка, команда, один операнд

MOV AX,0;Команда, два операнда

 

Метки

Могут содержать следующие символы:

буквы: от A до Z и от a до z

цифры: от 0 до 9

спецсимволы: знак вопроса “?”; точка “.” (только первый символ); знак коммерческое эт “@”; подчеркивание “_”; знак доллара “$”.

Первым символом метки должна быть буква или спецсимвол. Заглавные и строчные буквы не различаются. Максимальная длина метки – 31 символ. Примеры меток: COUNT, PAGE25, $E10. Обычно метки заканчиваются двоеточием. Следует использовать описательные и смысловые метки. Имена регистров зарезервированы, их можно использовать лишь для указания регистров.

Команды

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

Операнды

Они определяют

1) начальное значение данных;

2) элементы, над которыми выполняет действие команда.

Команда может иметь один либо два операнда, или быть вообще без операндов.

 

III. Задание. Состав и основные особенности использования различных команд.

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

Команды ADD и SUB выполняют сложение и вычитание байтов или слов, содержащих двоичные данные. Вычитание выполняется в компьютере по методу сложения с двоичным дополнением: для второго операнда устанавливаются обратные значения бит и прибавляется 1, а затем происходит сложение с первым операндом. Во всем, кроме первого шага, операции сложения и вычитания идентичны. Add – команда сложения. Слаживает два числа.

Формат:

«add приемник, источник»

Выполняет вычисление: приемник = приемник + источник.

В качестве приемника могут быть регистр или адрес в памяти, в качестве источника – регистр, память или значение.

Sub – команда вычитания. Вычитает два числа. Результат заносится в первый регистр.

Формат:

«sub приемник, источник»

(приемник = приемник - источник)

В качестве приемника могут выступать регистр или адрес в памяти, в качестве источника – регистр, память или значение.

Умножение

Операция умножения для беззнаковых данных выполняется командой MUL, а для знаковых – IMUL (Integer MULtiplication – умножение целых чисел). Ответственность за контроль над форматом обрабатываемых чисел и за выбор подходящей команды умножения лежит на самом программисте.

Формат:

«mul множитель»

(множимое = множимое * множитель)

Существуют два основных вида операции умножения:

1) "Байт на байт": Множимое находится в регистре AL, множитель – в байте памяти или однобайтовом регистре. После умножения произведение находится в регистре AX. Операция игнорирует и стирает любые данные, которые находились в регистре AH.

2) "Слово на слово": Множимое находится в регистре AX, множитель – в слове памяти или регистре. После умножения произведение находится в двойном слове, для которого требуется два регистра: старшая (левая) часть произведения находится в регистре DX, а младшая (правая) часть – в регистре AX. Операция игнорирует и стирает любые данные, которые находились в регистре DX.

Деление

Операция деления для беззнаковых данных выполняется командой DIV, a для знаковых – IDIV. Ответственность за подбор подходящей команды лежит на программисте.

Формат:

«div делитель»

Существуют два основных вида операции деления:

1) Деление "слова на байт": Делимое находится в регистре AX, а делитель – в байте памяти или однобайтовом регистре. После деления остаток получается в регистре AH, а частное – в AL. Так как однобайтовое частное очень мало (максимально +255 (шест. FF) для беззнакового деления и +127 (шест. 7F) для знакового), эта операция имеет ограниченное использование.

2) Деление "двойного слова на слово": Делимое находится в регистровой паре DX:AX, а делитель – в слове памяти или регистре. После деления остаток получается в регистре DX, а частное в регистре AX. Частное в одном слове допускает максимальное значение +32767 (шест. FFFF) для беззнакового деления и +16383 (шест. 7FFF) для знакового.

 

 

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

Сюда относятся: Двухадресные команды для сравнения, сброса и установки битов операнда в операциях преобразования кодов, и пр.:

1) собственно логические операции: OR, AND, NOT, XOR, TEST;

2) сдвиги линейные (арифметические и логические) и циклические влево и вправо на один или несколько разрядов.

Побитовые логические операции

Ассемблер поддерживает полный набор команд для выполнения логических операций, включая команды AND, OR, XOR и NOT. Они очень полезны при работе с отдельными битами слова или байта, а также для выполнения операций булевой алгебры. Команды обрабатывают один байт или одно слово в регистре или в памяти, и устанавливают признаки CF, OF, PF, SF, ZF

Команда AND – побитное логическое "И".

Формат:

expression1 AND expression2

выполняет по битам операцию логического умножения над операндами expression1 и expression2.

Следующая таблица показывает результаты применения операции AND к двум битам:

Команда TEST – проверка битов.

Формат:

expression1 AND expression2

выполняет проверку байта или слова на определенную битовую комбинацию. Действует аналогично команде AND, но не изменяет результирующий операнд. Операнды могут быть однобайтовыми или словными; второй операнд может быть непосредственным данным.

Команда OR – Побитовая логическая операция "ИЛИ". Формат:

expression1 OR expression2

выполняет по битам операцию логического ИЛИ над операндами expression1 и expression2. Следующая таблица показывает результаты применения операции OR к двум битам:

 

Команда XOR – побитовое логическое "исключающее ИЛИ" (поразрядное сложение по модулю два). Формат:

expression1 XOR expression2

выполняет по битам операцию логического исключающего ИЛИ над операндами expression1 и expression2. Следующая таблица показывает результаты применения операции XOR к двум битам:

 

Команда NOT – побитовое отрицание. Формат:

NOT выражение

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

 

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

Команды сдвига имеют следующие свойства:

1) обрабатывают байт или слово;

2) имеют доступ к регистру или к памяти;

3) сдвигают влево или вправо;

4) сдвигают на величину до 8 бит (для байта) и 16 бит (для слова)

5) сдвигают логически (без знака) или арифметически (со знаком).

Значение сдвига на 1 можно записать как непосредственный операнд; значение больше единицы должно находиться в регистре CL.

Команда SHL – логический (беззнаковый) сдвиг влево. Формат:

SHL операнд,count??

сдвигает операнд влево на count?? битов - перемещает каждый бит операнда-приемника на один разряд влево, по направлению к самому значимому биту.

Примечания: Биты, сдвинутые "за регистр", теряются; в "новые" биты вводятся нули. Если count?? больше или равен 16, результат равен 0. Если сдвигаемое значение - слово, все 16 бит будут сдвинуты. Но если значение – байт, сдвигаются только 8 бит.

Команда SHR – логический (беззнаковый) сдвиг вправо. Формат:

SHR операнд,count??

сдвигает выражение вправо на count?? битов - очень похожа на SHL. Она выполняет сдвиг разрядов операнда вправо на 1 или CL (CX) бит, затем сдвигает наименее значимый бит в признак переноса и помещает 0 в самый значимый бит.

Примечания: Биты, сдвинутые "за регистр", теряются; в "новые" биты вводятся нули. Если count?? больше или равен 16, результат равен 0. Если сдвигаемое значение - слово, все 16 бит будут сдвинуты. Однако если значение – байт, то сдвигаются только 8 бит.

Команда SAR – арифметический сдвиг вправо. Формат:

SAR операнд,count??

сдвигает выражение вправо на count?? битов – аналогична команде SHR, но при ее выполнении самый значимый бит операнда сдвигается вправо в следующий бит, а затем копируется обратно.

Команда SAL – арифметический сдвиг влево. Формат:

SAL операнд,count??

команда действует идентично команде SHL.

Команды циклического сдвига

Циклический сдвиг отличается от линейного тем, что выдвинутый бит занимает освободившийся разряд. В наборе команд есть четыре команды циклического сдвига:

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

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

RCR;Циклический сдвиг вправо с переносом

RCL;Циклический сдвиг влево с переносом

Команда ROR аналогична команде SHR, но при ее выполнении наименее значимый бит сдвигается в самый значимый бит, а также в признак переноса.

Операция ROL имеет действие, обратное действию операции ROR: операнд тоже сдвигается циклически, но влево. При этом самый значимый бит сдвигается в наименее значащий.

Команда RCR аналогична команде сдвига вправо, при этом самый значимый бит сдвигается из признака переноса.

Команда RCL аналогична левому сдвигу. При выполнении этой команды наименее значимый бит сдвигается из признака переноса.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: