Лекция №5
Математические функции
Команды сложения
ADD Целочисленное сложение
Команда ADD осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.
Пример
mov BX, lFFEh
mov СХ.3
add BX,CX ;BX=2001h
ADC Целочисленное сложение с переносом
Команда ADC осуществляет сложение первого и второго операндов, прибавляя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда ADC обычно используется для сложения 32-разрядных чисел.
Пример 1
mov AX,1125h
adc AX,2C25h ;AX=3D4Bh, если CF был = 1
Пример 2
В полях данных:
numtow dw OFFFFh ;Младшая часть 2-го слагаемого numhigh dw 0005h ;Старшая часть 2-го слагаемого
;Число 5FFFFh=393215
В программном сегменте:
mov AX,0005h ;Младшая часть 1-го слагаемого
mov BX,0002h ;Старшая часть 1-го слагаемого
;Число 20005h=131077
add AX.numlow ;Сложение младших частей. АХ=4,CF=1
adc BX.numhigh ;Сложение старших частей с переносом.
;BX:AX=0008:0004h.
;Число 80004h=524292
INC Инкремент (увеличение на 1)
Команда INC прибавляет 1 к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака.
Пример 1
mov AX,0563h
Inc AX ;AX=0564h
Пример 2
mov BH,15h
Inc BH ;BH=16h
Пример 3
mov AX.ASFFh
Inc AL ;AX=A500h
Inc AH ;AX=A600h
Команды вычитания
SUB Вычитание целых чисел
Команда SUB вычитает второй операнд (источник) из первого (приемника) и помещает результат на место первого операнда. Исходное значение первого операнда (уменьшаемое) теряется. Таким образом, если команду вычитания записать в общем виде
sub операнд_1, операнд_2
то ее действие можно условно изобразить следующим образом:
операнд_1 - операнд_2 -> операнд_1
В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака.
Примеры
sub CX,5 ; Выполняется действие СХ-5->СХ
sub DH,DL ; Выполняется действие DH-DL->DH
sub AX,mem ; Выполняется действие АХ-(mem)->АХ
sub byte ptr men,DL ; Выполняется действие(mem)-DL->mem
sub tab1e[BX],'O' ; Выполняется действие (table[BX])-30h
; -> table[BX]
SBB Целочисленное вычитание с займом
Команда SBB вычитает второй операнд (источник) из первого (приемника). Результат замещает первый операнд, предыдущее значение которого теряется. Если установлен флаг CF, из результата вычитается еще 1. Таким образом, если команду вычитания записать в общем виде
sbb операнд_1, операнд_2
то ее действие можно условно изобразить следующим образом:
операнд_1 - операнд_2 - CF -> операнд_1
В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго -регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда SBB обычно используется для вычитания 32-разрядных чисел.
Пример 1
mov AX,76A5h
sbb AX,76A3h ; АХ=-1, если CF был=1 ;АХ=2, если CF был=0
Пример 2
В полях данных:
numlow dw 000Ah ;Младшая часть вычитаемого
numhigh dw 000lh ;Старшая часть вычитаемого
;Число 1000Аh=65546
В программном сегменте:
mov АХ,0 ;Младшая часть уменьшаемого
mov DX,0002 ;Старшая часть уменьшаемого
;Число 20000h=131072
sub AX,num1ow ; Вычитание младших частей.
;AX=FFF6h, CF=1
sbb DX,numhigh ;Вычитание старших частей с займом.
;DX:AX=0000:FFF6h=65526
DEC Декремент (уменьшение на 1)
Команда DEC вычитает 1 из операнда, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака.
Пример 1
mov AX.OFFFFh
dec AX ;AX=FFFEh
Пример 2
mov CX, О
dec CX ;CX=FFFFh=-l