Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |