Арифметические команды в Ассемблере
В язык Ассемблера входят пять групп арифметических команд: команды преобразования типов, команды двоичной арифметики, десятичной арифметики, вспомогательные команды и прочие команды с арифметическим принципом действия. Далее рассмотрим команды двоичной арифметики.
Микропроцессор 80Х86 может работать как с числами со знаком, так и с числами без знака. Соответственно, если используются числа со знаком, то они могут быть или положительные или отрицательные. При этом под знак отводится самый старший разряд двоичного числа: 0 – положительное число; 1 – отрицательное. Поэтому диапазон значений двоичного числа зависит от его размера и трактовки старшего бита числа.
Таблица 4.3 – Диапазон значений двоичных чисел
Размерность поля |
Целое без знака |
Целое со знаком |
Байт |
0…255 |
-128…+127 |
Слово |
0…65535 |
-32768…+32767 |
Двойное слово |
0…4294967295 |
-2147483648…+2147483647 |
ADD – целочисленное сложение
Команда ADD осуществляет сложение первого и второго операнда, при этом исходное значение первого операнда (dst - приёмника) теряется, замещаясь результатом сложения. Второй операнд (src –источник) не изменяется.
ADD dst, src; dst: = (dst) + (src).
В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго – регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и являться числами со знаком или без знака. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.
При сложении беззнаковых чисел, когда размерность результата операции выходит за разрядную сетку операндов, могут возникнуть ошибки с определением точного результата. Для этих целей в процессоре предназначен флаг переноса CF, который необходимо проконтролировать при выполнении операции сложения.
При операциях с числами со знаком нужно учитывать возможный перенос в старший значащий разряд, так как при этом может измениться знак результата. Для этих целей может помочь анализ флага переполнения OF, так как он устанавливается в 1, если происходит перенос в старший значащий разряд (в 7-ой или 15-ый) для положительных чисел или из старшего значащего разряда для отрицательных чисел.
SUB – вычитание целых чисел
Команда SUB вычитает второй операнд из первого и помещает результат на место первого операнда, т.е.
SUB dst, src; ; dst: = (dst) - (src).
Операнды аналогичны команде целочисленного сложения. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF.
Команды inc и dec
Команда INC (инкремент) прибавляет 1 к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово:
INC op; op:= (op) + 1.
Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака. Команда воздействует на флаги OF, SF, ZF, AF и PF. Команда не воздействует на флаг CF.
Команда DEC (декремент) аналогична команде INC, за исключением того, что она вычитает единицу из операнда:
DEC op; op:= (op) – 1.