Иногда в программе не Ассемблере требуется выполнить сложе-ние, которое состоит просто в прибавлении к операнду значения 1. Такая операция называется увеличением (инкрементацией). Аналогич-но, из содержимого регистров и переменных в памяти иногда нужно вычесть значение 1. Такая операция называется уменьшением (декре-ментацией). Для таких операций, как изменение содержимого счетчи-ка или продвижение регистров-указателей по памяти все операции сложения и вычитания можно выполнять с помощью увеличения и уменьшения.
Для выполнения таких часто требующихся действий в наборе инструкций процессора 8086 предусмотрены две инструкции — INC (увеличить) и DEC (уменьшить). Инструкция INC прибавляет к ре-гистру или переменной в памяти 1, а инструкция DEC вычитает из регистра или переменной в памяти 1.
Например, следующая программа заполняет 10-байтовый массив TempArray числами 0, 1, 2, 3, 4, 5, 6, 7, 8, 9:
.DATA
TempArray DB 10 DUP (?)
FillCount DW ?
.CODE
mov al,0 ; первое значение,
; записываемое в TempArray
mov bx,OFFSET TempArray ; BX указывает на
; TempArray
mov [FillCount],10 ; число элементов,
; которыми нужно
; заполнить массив
FillTempArrayLoop:
mov [bx],al ; установить текущий
; элемент TempArray
inc bx ; ссылка на следующий
; элемент массива
; TempArray
inc al ; следующее записываемое
; значение
dec [FillCount] ; уменьшить счетчик
; числа заполняемых
; элементов
jnz FillTempArray ; обработать следующий
; элементе, если мы еще
; не заполнили все
; элементы
Почему предпочтительнее использовать инструкцию:
inc bx
а не инструкцию:
add bx,1
ведь делают они одно и то же? Это так, но в то время, как инст-рукция ADD занимает 3 байта, инструкция INC занимает только 1 байт и выполняется быстрее. Фактически, более экономно выполнить две операции INC, чем прибавить к регистру размером в слово зна-чение 2 (увеличение и уменьшение регистров и переменных в памяти размером в байт занимает 2 байта, что так же короче, чем сложение и вычитание).
Короче говоря, инструкции INC и DEC — это наиболее эффектив-ные инструкции, с помощью которых можно увеличивать и уменьшать значения переменных в памяти и регистров. Их следует использовать там, где это возможно.
