Ассемблер и программирование для IBM PC



         

ГЛАВА 12. Арифметические операции I: Обработка двоичных данных - часть 7


Произведение1: 0000 0E80 E400 Произведение 2: 138A 5800 Результат: 138A 6680 E400

Так как первая команда ADD может выработать перенос, то второе cложение выполняется командой сложения с переносом ADC (ADd with Carry). В силу обратного представления байтов в словах в процессоpах 8086/8088, область PRODUCT в действи тельности будет содержать значение 8A13 8066 00E4. Программа предполагает, что первое слово в области PRODUCT имеет начальное значение 0000.

------------------------------------------------------------ ------------------------------------------------------------ Рис.12.4. Многословное умножение.

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

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

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

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

Ассемблер для IBM PC. Глава 12 270

Множимое MULTCND содержит шест. 3206 2521, множитель MULTPLR - шест. 6400 0A26. Результат заносится в область PRODUCT, состоящую из четырех слов. Хотя логика умножения двойных слов аналогична умножению двойного слова на слово, имеется одна особенность, после пары команд сложения ADD/ADC используется еще одна команда ADC, которая прибавляет 0 к значению в поле PRODUCT. Это необходимо потому, что первая команда ADC сама может вызвыть перенос, который последующие команды могут стереть. Поэтому вторая команда ADC прибавит 0, если переноса нет, и прибавит 1, если перенос есть. Финальная пара команд ADD/ADC не тредует дополнительной команды ADC, так как область PRODUCT достаточно велика для генерации окончательного результата и переноса на последнем этапе не будет. Окончательный результат 138A 687C 8E5C CCE6 получится в поле PRODUCT в обратной записи байт в словах. Выполните трассировку этого примера с помощью отладчика DEBUG.

СДВИГ РЕГИСТРОВОЙ ПАРЫ DX:AX ------------------------------------------------------------




Содержание  Назад  Вперед