Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sysprog.docx
Скачиваний:
15
Добавлен:
24.08.2019
Размер:
641.97 Кб
Скачать

.Radix выражение

В качестве выражения задается число в пределах от 2 до 16, которое определяет, в какой системе счисления трактовать числа при отсутствии явного указания. Могут быть указаны следующие значения:

u 2 — двоичная;

u 8 — 8-ричная;

u 10 — десятичная;

u 16 — 16-ричная.

Указанное в директиве .RADIX выражение всегда трактуется как десятичное число независимо от текущего умалчиваемого основания. По умолчанию при отсутствии директивы .RADIX используется десятичная система счисления.

Директива .RADIX не влияет на числа, указанные в директивах DD, DQ и DT. Числа выражений этих директив всегда трактуются как десятичные.

Директива .RADIX не влияет на спецификаторы основания B и D, используемые при задании целых чисел. Если последним символом целого числа оказывается B или D, он трактуется как спецификатор системы счисления, а не как 16-ричная цифра, даже если умалчиваемое основание — 16. Например, число 11B будет восприниматься как двоичное 11, а не как 16-ричное 11B. Для того, чтобы оно трактовалось как 16-ричное, следует задавать 11Bh.

Примеры:

.RADIX 16

.RADIX 2

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

Формат:

COMMENT ограничитель

...

текст

...

ограничитель [[текст]]

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

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

Пример:

COMMENT

* Весь текст между звездочками считается комментарием *

4

Управление листингом

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

Директива TITLE задает заголовок листинга программы, который будет печататься в начале каждой страницы листинга. Текст заголовка может включать в себя до 60 любых символов. Каждый модуль может содержать не более одной директивы TITLE. Если не использовалась директива NAME, первые 6 отличных от пробела символов заданного в TITLE заголовка рассматриваются как имя модуля.

Директива SUBTTL определяет подзаголовок листинга, который печатается в начале каждой страницы листинга на следующей строке после заголовка. Задаваемый текст представляет собой любую комбинацию символов, из которой в качестве подзаголовка используются первые 60 символов. Если текст опущен, строка подзаголовка в листинге содержит левый пробел. Программа может содержать любое количество директив SUBTTL. Каждая последующая директива замещает предыдущую.

Директивы управления листингом

Формат Функция

TITLE текст задание заголовка листинга

SUBTTL [[текст]] задание подзаголовка листинга

PAGE длина,ширина задание параметров страницы листинга

.LIST печатать листинг

.XLIST не печатать листинг

.LALL печатать все исходные предложения

.SALL подавить печать макрорасширений

.XALL печатать только код и данные

.SFCOND подавить печать условных блоков с ложными условиями

.LFCOND печатать условные блоки с ложными условиями

.TFCOND установить умалчиваемый режим печати условных блоков

.CREF печатать листинг перекрестных ссылок

.XCREF [[имя,...]] подавить печать листинга перекрестных ссылок

Директива PAGE позволяет управлять форматом страницы листинга.

В первой форме директивы предусмотрены 2 позиционных параметра, которые устанавливают максимальное число строк страницы листинга (длина) и максимальное число символов в строке листинга (ширина). Задаваемая длина должна находиться в пределах от 10 до 255 (значение по умолчанию — 50). Ширина может варьироваться от 60 до 132 (значение по умолчанию — 80). Если длина не указана, ширине, если она задана, должна предшествовать запятая.

Вторая форма директивы PAGE (со знаком +) означает, что номер секции программы должен быть увеличен, а номер страницы устанавливается равным 1. Номер страницы листинга состоит их 2-х компонент: номера секции и номера страницы внутри секции и имеет следующий вид:

секция-страница

По умолчанию нумерация страниц листинга начинается со значения 1-1.

 

Третья форма директивы PAGE (без аргументов) предписывает MASM перейти на новую страницу листинга.

Директива .XLIST подавляет копирование в листинг последующих строк исходной программы. Следует помнить, что обработка MASM директивы .XLIST перекрывает все предшествующие ей директивы управления листингом.

Директива .LIST восстанавливает копирование в листинг последующих строк исходной программы.

Директива .LALL сообщает MASM, что листинг должен содержать все предложения макрорасширений, если они есть, включая обычные комментарии (с предшествующей ;), но исключая макрокомментарии (с предшествующей ;;).

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

Директива .SALL подавляет распечатку макрорасширений.

Директива .SFCOND подавляет распечатку тел всех последующих условных блоков, условия ассемблирования которых окажутся ложными.

Директива .LFCOND восстанавливает распечатку таких блоков.

Директива .TFCOND устанавливает умалчиваемый режим распечатки условных блоков. Эта директива работает в сочетании с опцией /X MASM. Если опция /X при запуске MASM не была задана, .TFCOND разрешает печать условных блоков с ложными условиями. Если же опция /X была задана, .TFCOND подавляет печать таких блоков. Каждая обработка Ассемблером директивы .TFCOND меняет режим распечатки условных блоков с ложными условиями на противоположный.

Директива .XCREF подавляет генерацию листинга перекрестных ссылок для меток, переменных и имен. Если в директиве задан список имен, из листинга перекрестных ссылок исключаются только указанные объекты, а все остальные в листинг попадают. Если список содержит более, чем одно имя, его элементы должны отделяться друг от друга запятыми.

Директива .CREF восстанавливает генерацию листинга перекрестных ссылок.

4

Другие директивы

В языке Ассемблере имеются еще 2 директивы, имеющие некоторое отношение к вводу/выводу. Это директивы %OUT и NAME.

Директива %OUT имеет следующий формат:

%OUT текст

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

Директива %OUT срабатывает на обоих проходах MASM. Для того, чтобы сообщение выдавалось на каком-либо одном проходе, можно использовать директивы IF1 и IF2.

Пример:

IF1

%OUT First pass

ENDIF

Сообщение будет выдано только на 1-м проходе.

Директива NAME позволяет присваивать имя текущему модулю и имеет формат:

NAME имя-модуля

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

При отсутствии в исходной программе директивы NAME Ассемблер создает умалчиваемое имя модуля, в качестве которого используются первые 6 символов текста, задаваемого директивой TITLE. Если же и директива TITLE опущена, модулю присваивается имя A.

 

 

4

Глобальные объявления

Директивы глобального объявления позволяют определять метки, переменные и абсолютные имена, доступ к которым возможен из всех сегментов программы независимо от того, как они ассемблировались.

В языке Ассемблера имеются 2 директивы глобального объявления: PUBLIC и EXTRN, которые дополняют друг друга.

Директива PUBLIC имеет следующий формат:

PUBLIC имя,...

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

Обычно до копирования в объектный файл строчные буквы в общих именах преобразуются в заглавные. Для сохранения первоначального написания имен с учетом регистра могут быть использованы опции /ML и /MX MASM.

Директивой PUBLIC должны быть описаны имена, используемые при работе с SYMDEB в режиме символьной отладки.

Директива EXTRN имеет следующий формат:

EXTRN имя:тип,...

Директива EXTRN определяет внешние по отношению к текущему сегменту объекты с указанием их типа. Внешним объектом может быть переменная, метка или имя, объявленные в другом модуле программы директивой PUBLIC. Тип, указанный в директиве EXTRN, должен соответствовать действительному типу объекта и может кодироваться одним из следующих ключевых слов:

u BYTE

u WORD

u DWORD

u QWORD

u TBYTE

u NEAR

u FAR

u ABS.

Тип ABS используется при описании имен, представляющих абсолютные значения. Остальные описатели типа имеют обычный смысл.

Несмотря на то, что действительные адреса объектов до обработки объектного файла программой LINK неизвестны, Ассемблер, основываясь на местонахождении директивы EXTRN, может делать предположения о том, какой сегмент следует использовать для адресации внешнего объекта. Если директива EXTRN находится внутри какого-либо сегмента, считается, что указанные внешние объекты связаны с этим сегментом, и описывающие их директивы PUBLIC должны содержаться в сегменте с тем же именем и теми же атрибутами.

Если директива EXTRN не входит ни в один сегмент, предположений о содержащем внешний объект сегменте не делается, и соответствующая директива PUBLIC может располагаться в любом сегменте. В обоих случаях для подавления адресации внешнего объекта относительно умалчиваемого сегмента может использоваться оператор переключения сегмента (:).

4

Инструкции процессоров

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

Инструкции процессора доступны пользователю через программу MASM.

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

Набор инструкций процессоров можно рассматривать как состоящий из 2-х уровней:

u ассемблерный уровень;

u машинный уровень.

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

Ассемблер транслирует написанные программистом инструкции ассемблерного уровня в инструкции машинного уровня, которые непосредственно выполняются процессором. Компиляторы языков высокого уровня транслируют предложения своего языка также в инструкции машинного уровня.

Наличие 2-х уровней инструкций направлено на удовлетворение 2-х различных требований: эффективности программы и относительной простоты программирования. Набор инструкций машинного уровня (их около 300) позволяет эффективно использовать память. Например, машинная инструкция, предназначенная для увеличения на 1 операнда памяти, занимает 3-4 байта, так как она должна содержать адрес операнда. Для наращивания регистра эта информация не нужна, и инструкция может быть короче. Если программист будет использовать одну инструкцию для наращивания регистра, другую — для операнда памяти, выгода от компактных инструкций будет сведена на нет сложностью программирования. Инструкции ассемблерного уровня с точки зрения программиста проще. Программист кодирует одну форму инструкции INC, а Ассемблер проверяет ее операнд и решает, какую генерировать машинную инструкцию.

4

Инструкции пересылки данных

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

Все инструкции пересылки данных можно условно разделить на 4 группы:

Общего назначения

u MOV — пересылка байта или слова;

u PUSH — сохранение слова в стеке;

u POP — восстановление слова из стека;

u XCLHG — обмен байтами или словами;

u XLAT — трансляция байта.

Ввода/вывода

u IN — ввод байта или слова из порта;

u OUT — вывод байта или слова в порт.

Адресные операции

u LEA — загрузка исполнительного адреса;

u LDS — загрузка указателя с использованием DS;

u LES — загрузка указателя с использованием ES.

 

Пересылка флагов

u LAHF — загрузка флагов в AH;

u SAHF — установка флагов из AH;

u PUSHF — сохранение флагов в стеке;

u POPF — восстановление флагов из стека.

Все инструкции пересылки данных, кроме POPF и SAHF, значений флагов процессора не изменяют.

4

Инструкции общего назначения

MOV приемник,источник

Пересылка байта или слова. Байт или слово пересылается из источника в приемник.

PUSH источник

Сохранение слова в стеке. Указатель стека (регистр SP) уменьшается на 2, и в вершину стека помещается слово из источника. Часто PUSH используется для занесения в стек параметров процедуры перед ее вызовом. В общем случае это основное средство для сохранения временных данных.

POP приемник

Восстановление слова из стека. Слово данных из текущей вершины стека, адресуемой регистром SP, пересылается в операнд приемник. Регистр SP затем увеличивается на 2 и указывает на новую вершину стека. POP может использоваться для восстановления из стека временных данных.

XCLHG приемник,источник

Обмен байтами или словами. Эта инструкция осуществляет обмен содержимым (байт или слово) между операндами источник и приемник.

 

При использовании в сочетании с префиксом LOCK XCLHG может проверять и устанавливать семафор, управляющий доступом к разделяемому несколькими процессорами ресурсу.

XLAT таблица-трансляции

Трансляция байта. Байт в регистре AL замещается байтом из созданной пользователем 256-байтной таблицы трансляции. Предполагается, что регистр BX содержит адрес начала этой таблицы. Содержимое AL используется как индекс в таблице и замещается байтом, выбираемом из таблицы со смещением, соответствующим двоичному содержимому регистра AL (первый байт таблицы имеет смещение 0). Инструкция XLAT может использоваться для трансляции символов из одного кода в другой.

4

Ввод/вывод

IN аккумулятор,порт

Ввод байта или слова из порта. Байт или слово, полученные из указанного порта, помещается в регистр AL или AX соответственно. Номер порта может задаваться либо непосредственно числом в пределах от 0 до 255, обеспечивающим доступ только к этим портам, либо указанием регистра DX, который предварительно должен быть загружен требуемым значением, что обеспечивает доступ к портам с номерами от 0 до 65535.

OUT порт,аккумулятор

Вывод байта или слова в порт. Байт или слово, предварительно помещенные в регистр AL или AX соответственно, выводится в указанный порт. Номер порта может задаваться либо непосредственно числом в пределах от 0 до 255, обеспечивающим доступ только к этим портам, либо указанием регистра DX, который предварительно должен быть загружен требуемым значением, что обеспечивает доступ к портам с номерами от 0 до 65535.

 

4

Адресные операции

Адресные операции работают не с содержимым или значением переменных, а с их адресами. Они наиболее полезны при обработке списков, базированных переменных и в операциях со строками.

LEA приемник,источник

Загрузка исполнительного адреса. Смещение операнда источник помещается в операнд приемник. Источник должен быть операндом памяти, а приемник — 16-битовым регистром. Эта инструкция может использоваться для установки регистров перед XLAT или операциями со строками, которые предполагают, что некоторые регистры загружены адресными значениями.

LDS приемник,источник

Загрузка указателя с DS. Указатель представляет собой 32-битовую адресную переменную, первое слово которой содержит смещение, а второе — базовый адрес (сегмент). Адрес указателя в этой инструкции задается операндом источник, который должен быть операндом памяти. Слово смещения из указателя помещается в операнд приемник, в качестве которого может быть указан 16-битовый регистр. Слово сегмента из указателя помещается в регистр DS. Указание SI в качестве приемника является обычным способом подготовки для строковой операции строки-источника, расположенной вне текущего сегмента данных.

LES приемник,источник

Загрузка указателя с ES. Указатель представляет собой 32-битовую адресную переменную, первое слово которой содержит смещение, а второе — базовый адрес (сегмент). Адрес указателя в этой инструкции задается операндом источник, который должен быть операндом памяти. Слово смещения из указателя помещается в операнд приемник, в качестве которого может быть указан 16-битовый регистр. Слово сегмента из указателя помещается в регистр ES. Указание DI в качестве приемника является обычным способом подготовки для строковой операции строки-приемника, расположенной вне текущего экстра сегмента.

4

Операции с флагами

LAHF

Загрузка флагов в AH. Флаги SF, ZF, AF, PF и CF копируются в биты 7, 6, 4, 2 и 0 соответственно регистра AH. Биты 5, 3 и 1 не определены. Сами флаги не изменяются.

SAHF

Установка флагов из AH. Биты 7, 6, 4, 2 и 0 регистра AH замещают значения флагов SF, ZF, AF, PF и CF соответственно. Значения флагов OF, DF, IF и TF не изменяются.

PUSHF

Сохранение флагов в стеке. По этой инструкции указатель стека SP уменьшается на 2, и в вершину стека помещаются все флаги процессора в формате слова согласно их расположению в регистре флагов.

Сами флаги не изменяются.

POPF

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

После этого SP увеличивается на 2 и указывает на новую вершину стека.

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

Для этого следует сохранить флаги в стеке, изменить значение бита 8 и затем восстановить флаги из стека.

 

4

Арифметические инструкции

Форматы арифметических данных

Арифметические операции могут выполняться над операндами 4-х типов:

u Двоичные без знака.

u Двоичные со знаком (целые).

u Упакованные десятичные без знака.

u Распакованные десятичные без знака.

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

Двоичные числа без знака могут занимать 8 или 16 бит; все биты значимы. Диапазон значений 8-битового числа — от 0 до 255, 16-битово го — от 0 до 65535. Над двоичными числами без знака можно выполнять операции сложения, вычитания, умножения и деления.

Двоичные числа со знаком (целые) могут занимать также 8 или 16 бит. Значение старшего бита (самого левого) задает знак числа: 0 — положительное, 1 — отрицательное. Отрицательные числа представляются стандартным дополнением до 2. Поскольку один разряд отведен под знак, диапазон изменения 8-битового числа — от -127 до +127, 16-битового — от -32768 до +32767. Число 0 имеет положительный знак. Над двоичными числами со знаком могут быть выполнены операции умножения и деления. Сложение и вычитание выполняются без учета знака. Для обнаружения переноса в знаковый разряд в результате беззнаковой операции можно использовать инструкции условного перехода или INTO.

Упакованные десятичные числа хранятся как беззнаковые байтовые величины. Каждый байт содержит 2 десятичные цифры, занимающие по 4 бита каждая. Цифра в старшем полубайте более значима. В каждом полубайте допустимы только 16-ричные значения от 0 до 9; соответственно пределы изменения десятичного числа — от 0 до 99. Сложение и вычитание таких чисел выполняются в 2 стадии. Сначала применяется обычная беззнаковая двоичная инструкция, которая формирует в регистре AL промежуточный результат. Затем выполняется операция настройки (инструкция DAA или DAS), преобразующая содержимое AL в корректный упакованный десятичный результат. Умножение и деление упакованных десятичных чисел невозможно.

Распакованные десятичные числа хранятся как беззнаковые байтовые величины. Десятичная цифра располагается в младшем полубайте. Допустимы и интерпретируются как десятичные числа 16-ричные значения от 0 до 9. Для выполнения операций умножения и деления старший полубайт должен быть заполнен нулями; для сложения и вычитания он может содержать любое значение.

Арифметические операции над распакованными десятичными числами выполняются в две стадии. Сначала используются обычные беззнаковые инструкции сложения, вычитания или умножения, которые формируют в регистре AL промежуточный результат. Затем выполняется операция настройки (инструкция AAA, AAS или AAM), преобразующая содержимое AL в результирующее корректное распакованное десятичное число. Деление выполняется аналогично, за исключением того, что сначала следует настроить числитель в AL (инструкция AAD), а затем выполнить инструкцию беззнакового двоичного деления, результатом которого будет корректное распакованное десятичное число.

Формат десятичных распакованных чисел подобен представлению десятичных цифр в коде ASCII. При этом для числа в коде ASCII старший полубайт содержит 16-ричное значение 3. Возможное содержимое старшего полубайта для распакованного формата приведено выше. Преобразование из одного вида в другой сложности не представляет.

4

Арифметические операции и флаги

Арифметические инструкции оставляют после своего выполнения некоторые характеристики результатов операций в виде значений 6 флагов. Большинство из них могут анализироваться последующими инструкциями условного перехода; может также использоваться инструкция прерывания по переполнению INTO. Влияние каждой инструкции на флаги указано при описании инструкции.

Однако имеются следующие общие правила:

1. Флаг переноса CF устанавливается в 1, если в результате операции сложения был перенос из старшего бита или в результате операции вычитания был заем в старший бит результата. Если же переноса или заема не было, CF устанавливается в 0. Заметим, что знаковый перенос характеризуется различными значениями флагов CF и OF. Флаг CF может использоваться для обнаружения беззнакового переполнения. Следует помнить, что две инструкции, ADC (сложение с переносом) и SBB (вычитание с заемом) вовлекают CF в свои операции и могут быть поэтому использованы для мультибайтного (32-, 64-разрядного) сложения и вычитания.

2. Флаг промежуточного переноса AF устанавливается в 1 при переносе из младшего полубайта результата во время сложения или при заеме в младший полубайт результата во время вычитания. Если же переноса или заема не было, AF устанавливается в 0. Флаг AF введен для выполнения десятичной настройки и обычно в других целях не используется.

3. Флаг знака SF устанавливается арифметическими и логическими инструкциями равным старшему (7-му или 15-му) биту результата. Для двоичных чисел со знаком SF будет равен 0 в случае положительного результата и 1 — в случае отрицательного (если нет переполнения). Значение флага SF может анализироваться после сложения или вычитания инструкциями условного перехода. Программы, выполняющие беззнаковые операции, обычно игнорируют SF, так как старший бит результата в этом случае интерпретируется как двоичная цифра, а не как знак.

4. Флаг нуля ZF устанавливается в 1, если результат арифметической или логической операции равен 0, и устанавливается в 0, если результат отличен от 0. Значение флага может анализироваться инструкциями условного перехода.

5. Флаг паритета PF устанавливается в 1, если младшие 8 бит результата арифметической или логической операции содержат четное число единиц, и устанавливается в 0, если число единиц нечетно. Флаг PF может использоваться для контроля символов в коде ASCII на корректность паритета.

6. Флаг переполнения OF устанавливается в 1, если результат слишком велик для положительного числа или слишком мал для отрицательного и не помещается в операнд-приемник (не считая знаковый разряд). В противном случа значение OF — 0. Состояние этого флага отражает наличие арифметического переполнения со знаком. Он может анализироваться инструкциями условного перехода или инструкцией INTO. В беззнаковых операциях OF обычно игнорируется.

4

Сложение

ADD приемник,источник

Сложение байтов или слов. Арифметическая сумма 2-х операндов, которыми могут быть байты или слова, замещает операнд-приемник. Оба операнда могут содержать двоичные числа со знаком или без него. ADD модифицирует флаги AF, CF, OF, PF, SF и ZF.

ADC приемник,источник

Сложение с переносом. Эта инструкция выполняет арифметическую сумму своих операндов, добавляет 1, если установлен в 1 флаг CF, и помещает результат на место операнда-приемника. Оба операнда могут содержать двоичные числа со знаком или без него. ADC модифицирует флаги AF, CF, OF, PF, SF и ZF. Поскольку ADC использует перенос от предыдущей операции, она может применяться для сложения чисел длиннее 2 байтов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]