Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Программир на ассемблере.doc
Скачиваний:
8
Добавлен:
17.09.2019
Размер:
605.7 Кб
Скачать

7.1.4.8. Cmpsb/cmpsw - сравнение строки байтов или слов

Работа этих инструкций аналогична CMPS с той лишь разницей, что здесь длина элемента строк задана явно: 1 байт для CMPSB и 2 байта для CMPSW.

7.1.4.9. Scas - сканирование строки байтов или слов

Инструкция SCAS вычитает элемент строки-приемник (байт или слово в зависимости от типа операнда), адресуемый регистром DI, из содержимого регистра AL или AX соответственно и модифицирует флаги, но не меняет ни строку, ни содержимое аккумулятора. После SCAS регистр DI указывает на следующий элемент строки, а флаги AF, CF, OF, PF, SF и ZF отражают отношение содержимого аккумулятора к элементу строки. Если присутствует префикс REPE или REPZ, выполняется операция "сканирование до конца строки (пока в CX не 0) и пока элемент строки равен содержимому аккумулятора (ZF=1)".

Если присутствует префикс REPNE или REPNZ, выполняется операция "сканирование до конца строки (пока в CX не 0) и пока элемент строки не равен содержимому аккумулятора (ZF=0)". Этот способ может использоваться для поиска значения в строке.

7.1.4.10. Scasb/scasw - сканирование строки байтов или слов

Работа этих инструкций аналогична SCAS с той лишь разницей, что здесь длина элемента строки задана явно: 1 байт для SCASB и 2 байта для SCASW.

7.2. Арифметические команды

Арифметические операции выполняются над целыми числами четырех типов:

- без знаковыми двоичными;

- знаковыми двоичными;

- упакованными десятичными;

- неупакованными десятичными;

7.2.1. Команды сложения

7.2.1.1. ADD - сложение

Общее представление команды сложения имеет вид:

ADD dst, src

dst := (dst) + (src)

Команда ADD производит сложение операндов dst и src и помещает сумму на место dst.

Форматы команд сложения:

1) ADD mem, reg

2) ADD reg, mem

3) ADD reg, reg

4) ADD mem/reg, data

5) ADD ac, data

7.2.1.2. ADC - сложение с переносом

Общее представление команды сложения с переносом имеет вид:

ADC dst, src

dst := ((dst) + CF) + (src)

Если флаг CF установлен в 1, то команда ADC сначала прибавляет 1 к операнду 1 (dst). Затем прибавляет операнд 2 (src) к операнду 1 (dst), а в остальном команда аналогична команде ADD.

Обычно используется при сложении многословных чисел для учета бита переноса.

Форматы команд сложения с переносом:

1) ADC mem, reg

2) ADC reg, mem

3) ADC reg, reg

4) ADC mem/reg, data

5) ADC ac, data

7.2.1.3. INC - инкремент

Команда INC - инкремент - прибавляет 1 к байту или слову в регистре или в памяти.

INC dst

dst := (dst) + 1

Форматы команды:

1) INC mem/reg

2) INC reg

7.2.2. Команды вычитания

Команды вычитания отличаются от соответствующих команд сложения только выполняемой операцией и имеют те же форматы.

7.2.2.1. SUB - вычитание двоичных чисел

Команда SUB - вычитание двоичных чисел - имеет вид:

SUB dst, src

dst := (dst) - (src)

Команда осуществляет вычитание операндов dst и src и запоминает разность в dst.

Необходимо подчеркнуть, что флаги CF и AF в операциях вычитания становятся флагами заема и устанавливаются в 1, когда уменьшаемое меньше вычитаемого.

7.2.2.2. SBB - вычитание с заемом

Команда SBB - вычитание с заемом имеет следующее общее представление:

SBB dst, src

dst := ((dst) - CF) - (src)

Если флаг CF установлен в 1, то команда SBB сначала вычитает 1 из операнда dst. Затем вычитает операнд src из операнда dst.

Команда обычно используется при вычитании многословных чисел для учета заема.

7.2.2.3. DEC - декремент

Команда DEC - декремент - вычитает 1 из операнда dst.

DEC dst

dst := (dst) - 1

7.2.2.4. NEG - изменение знака числа

Команда NEG - изменение знака числа (или образование дополнительного кода) - имеет следующее общее представление:

NEG dst

dst := 0 - (dst)

Эта команда меняет значение из положительного в отрицательное и из отрицательного в положительное.