Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Команды ADD, ADC, XADD
Формат команды: ADD П,И ADC П,И XADD П,И где П – приемник информации. В качестве приемника может использоваться РОН или ячейка памяти; И – источник информации. В качестве источника информации могут использоваться РОН, ячейка памяти или константа (непосредственные данные, указанные в самой команде ассемблера). Приемник и источник должны быть одинаковой размерности! Нельзя в одной команде в качестве и приемника и источника использовать ячейки памяти! Команда ADD выполняет следующую операцию: П=П+И; Команда ADC выполняет следующую операцию: П=П+И+значение флага CF; Команда XADD выполняет следующие операции: 1) П↔И, 2) П=П+И;
Все три команды влияют на флаги OF,SF,ZF,AF,PF,CF, т.е. эти флаги принимают значения по результатам выполнения команды.
Связка команд ADD и ADC, как правило, используются для сложения чисел повышенной точности. Для примера, сложим два 64-битных числа. Поскольку в архитектуре IA32, к которой относится большинство микропроцессоров ПК, нет 64-х разрядных РОН, то хранение и сложение чисел большей разрядности, чем 32, приходиться выполнять по частям, задействовав по два 32-х разрядных РОН для каждого числа. Пусть одно число находиться в паре регистров EDX:EAX (EAX – младшее двойное слово, EDX – старшее двойное слово), а другое - в паре регистров EBX:ECX. При разбиении числа на части необходимо максимально использовать разряды РОН для младшей части. Рассмотрим, для примера, число 10'000'000'00010. В шестнадцатеричной системе счисления это число равно 2'540B'E40016. Как видно, это число занимает больше 32-х разрядов. При разбиении на части, младшая часть будет равна 540B'E40016, а старшая 0000'000216. Программа сложения 64-битных чисел будет выглядеть так:
ADD EAX,ECX ADC EDX,EBX
Если при сложении младших двойных слов произошел перенос из старшего (15-ого) разряда, т.е. флаг CF стал равным 1, то он будет учтен в команде ADC при сложении старших частей. Стоит отметить, что сложение обязательно начинать с младших частей. В большинстве встраиваемых систем используются 8-ми и 16-ти разрядные микропроцессоры и микроконтроллеры с соответствующей им разрядностью РОН. Необходимость сложения чисел по частям для таких систем возникает уже для чисел больше 25510=FF16, т.е. для чисел, занимающих более 8-ми двоичных разрядов. Часто для 8-ми разрядных систем возникает ситуация, что результирующие числа могут не умещаться и в два байта. При этом сложение чисел, занимающих несколько байтов в 8-ми разрядной системе, ведется последовательно для всех частей, продвигаясь от младшей части к старшей, причем для младших частей применяется команда ADD, а для всех остальных ADC. Между командами ADC нельзя применять команды, изменяющие значение флага CF. Date: 2015-10-19; view: 631; Нарушение авторских прав |