Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Умножение двойного слова на двойное слово





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

Множимое Множитель

слово 2 слово 2

слово 2 слово 1

слово 1 слово 2

слово 1 слово 1

Каждое произведение в регистрах DX и AX складывается с соответствующим словом в окончательном результате.

Хотя логика умножения двойных слов аналогична умножению двойного слова на слово, имеется одна особенность, после пары команд сложения ADD/ADC используется еще одна команда ADC, которая прибавляет 0 к значению в итоговом поле.

Это необходимо потому, что первая команда ADC сама может вызвать перенос, который последующие команды могут стереть. Поэтому вторая команда ADC прибавит 0, если переноса нет, и прибавит 1, если перенос есть.

Финальная пара команд ADD/ADC не требует дополнительной команды ADC, так как область итога достаточно велика для генерации окончательного результата и переноса на последнем этапе не будет.

Сдвиг регистровой пары DX:AX

Следующая подпрограмма может быть полезна для сдвига содержимого pегистровой пары DX:AX вправо или влево. Можно придумать более эффективный метод, но данный пример представляет общий подход для любого числа циклов (и, соответственно, сдвигов) в регистре CX. Заметьте, что сдвиг единичного бита за разрядную сетку устанавливает флаг переноса.

Сдвиг влево на 4 бита

MOV CX,04;Инициализация на 4 цикла C20:

SHL DX,1;Сдвинуть DX на 1 бит влево

SHL AX,1;Сдвинуть AX на 1 бит влево

ADC DX,00;Прибавить значение переноса

LOOP C20;Повторить Сдвиг вправо на 4 бита

MOV CX,04;Инициализация на 4 цикла D20:

SHR AX,1;Сдвинуть AX на 1 бит вправо

SHR DX,1;Сдвинуть DX на 1 бит вправо

JNC D30;В случае, если есть перенос,

OR AH,10000000B; то вставить 1 в AH D30:

LOOP D20;Повторить

Ниже приведен более эффективный способ для сдвига влево, не требующий организации цикла. В этом примере фактор сдвига записывается в регистр CL.

Пример написан для сдвига на 4 бита, но может быть адаптирован для других величин сдвигов:

MOV CL,04;Установить фактор сдвига

SHL DX,CL;Сдвинуть DX влево на 4 бита

MOV BL,AH;Сохранить AH в BL

SHL AX,CL;Сдвинуть AX влево на 4 бита

SHL BL,CL;Сдвинуть BL вправо на 4 бита

OR DL,BL;Записать 4 бита из BL в DL







Date: 2015-05-22; view: 879; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию