Увеличение и уменьшение


Иногда в программе не Ассемблере требуется выполнить сложе-ние, которое состоит просто в прибавлении к операнду значения 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 — это наиболее эффектив-ные инструкции, с помощью которых можно увеличивать и уменьшать значения переменных в памяти и регистров. Их следует использовать там, где это возможно.