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

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

Пересылка данных очень важна, поскольку компьютер постоянно пересылает данные из одного места в другое. Не менее важна возможность манипулирования данными, производя над ними арифметические и логические операции. Сейчас мы посмотрим логические и арифметические операции, поддерживаемые микропрцессором Intel.

    1. Арифметические операции над целыми двоичными числами.

Микропроцессор может выполнять арифметические команды над двоичными числами без знака и со знаком, а также над десятичными числами без знака (как упакованными, так и не упакованными).

6.1.1 Сложение и вычитание.

Для сложения и вычитания используются инструкции ADD и SUB . ADD прибавляет содержимое операнда- источника (правый) к содержимому операнда приемнике и сохраняет результат в операнде приемнике. SUB работает так же, за исключением того, что он вычитает операнд источника из операнда приемника. Например,

...

.DATA

BaseVAL DW 99

Adjust DW 10

...

.CODE

...

MOV DX,[BaseVAL]

ADD DX,11

SUB DX,[Adjust]

...

В начале в DX загружается значение 99, хранящееся в BaseVAL, затем к нему добавляется константа 11, в результате в DX значение 110, и наконец из DX вычитается значение 10, хранящееся в Ajust. Результат - в DX хранится 100.

ADD и SUB работают с восьми или шестнадцатибитными операндами. Если Вы хотите складывать или вычитать 32-битные операнды, Вы должны разбить операцию на ряд пословных операций и использовать ADC или SBB.

Когда Вы складываете 2 операнда, микропроцессор сохраняет статус во флаге переноса (бит СF в регистре флагов) который указывает, был ли перенос в назначении; это происходит, когда результат сложения был слишком большой, чтобы уместиться в назначении.

ADC аналогичен ADD за исключением того, что он использует флаг переноса, (установленный предыдущим сложением) при вычислении. Когда Вы складываете два значения, которые больше , чем слово, сложите младшие слова вместе, с использованием ADD, затем сложите оставшиеся слова значений, одной или более инструкциями ADC, складывая наибольшие значащие слова последними. Например, следующий код складывает значение типа двойное слово, хранящееся в CX:BX с значением типа двойное слово, хранящееся в DX:AX:

...

ADD AX,BX

ADC DX,CX

...

SBB работает во многом аналогично ADС. Когда SBB выполняет вычитание, она учитывает флаг переноса, который устанавливается во время предыдущего вычитания. Например, следующий код вычитает двойное слово в CX:BX из двойного слова DX:AX:

...

SUB AX,BX

SBB DX,CX

...

Используя ADC и SBB, Вы должны быть уверены, что флаг переноса не изменялся после последнего вычитания или сложения, иначе статус переноса, хранящийся во флаге переноса, будет потерян.