Команда adc осуществляет сложение первого и второго операндов, прибавляя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды adc можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.
Команда add осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды add можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячей-ку памяти или непосредственное значение, однако не допускается опре-делять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команду add можно использовать для сложения как обычных целых чи-сел, так и двоично-десятичных (с использованием регистра АХ для хра-нения результата).
Команда SBB - вычитание двух операндов
Sub – команда вычитания. Вычитает два числа. Результат заносится в первый регистр.
Команды обработки строк~
Директива MACRO указывает ассемблеру, что следующие команды до
директивы ENDM являются частью макроопределения. Имя макрокоманды - INIT1,
хотя здесь возможны другие правильные уникальные ассемблерные имена.
Директива ENDM завершает макроопределение. Семь команд между директивами
MACRO и ENDM составляют тело макроопределения.
Имена, на которые имеются ссылки в макроопределении, CSEG, DSEG и
STACK должны быть определены где-нибудь в другом месте программы.
Макрокоманда INIT1 может использоваться в кодовом сегменте там, где
необходимо инициализировать регистры. Когда ассемблер анализирует команду
INIT1, он сначала просматривает таблицу мнемокодов и, не обнаружив там
соответствующего элемента, проверяет макрокоманды. Так как программа
содержит определение макрокоманды INIT1 ассемблер подставляет тело
макроопределения, генерируя необходимые команды - макрорасширение.
Программа использует рассматриваемую макрокоманду только один раз, хотя
имеются другие макрокоманды, предназначенные на любое число применений и
для таких макрокоманд ассемблер генерирует одинаковые макрорасширения.
На рис.20.1 показана ассемблированная программа. В листинге
макрорасширения каждая команда, помеченная слева знаком плюс (+), является
результатом генерации макрокоманды. Кроме того, в макрорасширении
отсутствует директива ASSUME, так как она не генерирует объектный код.
В последующем разделе "Включение из библиотеки макроопределений
показана возможность каталогизации макрокоманд в библиотеке и
автоматическое включение их в любые программы.
Команды прерывания~
Команда INT прерывает обработку программы, передает управление в DOS
или BIOS для определенного действия и затем возвращает управление в
прерванную программу для продолжения обработки. Наиболее часто прерывание
используется для выполнения операций ввода или вывода. Для выхода из
программы на обработку прерывания и для последующего возврата команда INT
выполняет следующие действия:
- уменьшает указатель стека на 2 и заносит в вершину стека
содержимое флагового регистра;
- очищает флаги TF и IF;
- уменьшает указатель стека на 2 и заносит содержимое регистра
CS в стек;
- уменьшает указатель стека на 2 и заносит в стек значение
командного указателя;
- обеспечивает выполнение необходимых действий;
- восстанавливает из стека значение регистра и возвращает
управление в прерванную программу на команду, следующую после INT.
Этот процесс выполняется полностью автоматически. Необходимо лишь
определить сегмент стека достаточно большим для записи в него значений
регистров.
Команда INT 10H включает в себя установку курсора в любую позицию и
очистку экрана. Ниже приведен пример установки курсора на 5-ую строку и
12-ый столбец:
MOV AH,02 ;Запрос на установку курсора
MOV BH,00 ;Экран 0
MOV DH,05 ;Строка 05
MOV DL,12 ;Столбец 12
INT 10H ;Передача управления в BIOS
Значение 02 в регистре AH указывает команде INT 10H на выполнение операции
установки курсора. Значение строки и столбца должны быть в регистре DX, а
номер экрана (или страницы) в регистре BH (обычно 0). Содержимое других
регистров несущественно. Для установки строки и столбца можно также
использовать одну команду MOV c непосредственным шест. значением: