Чтобы проиллюстрировать функции, которые мы рассмотрели в
предыдущих разделах, давайте решим арифиетическую задачу на языке
ассемблера. Пример прост, но использует многие команды. Задача
заключается в вычислении частного двух арифметических выражений, в
которых некоторые числа постоянны, а другие переменны. Все числа
являются 16=битовыми целыми числами со знаком.
Формула вычислений:
A * 2 + B * C
X = ------------------
D - 3
Эта задача решается подпрограммой на языке ассемблера,
изображенной на Фиг. 4.16. Подпрограмма сначала выполняет два
умножения. Так как микропроцессор 8088 всегда помещает результат
16=битового умножения в пару регистров DX:AX, в примере результат
первого умножения переносится в пару регистров BX:CX перед
выполнением второго умножения. Когда оба умножения завершены,
программа выполняет сложение числителя. Поскольку умножение дает
32=битовые результаты, в программе требуется сложение повышенной
точности. Это сложение оставляет результат в DX:AX. В примере
знаменатель вычисляется в регистре CX, а затем на него делится
числитель. Программа записывает частное из регистра AX в переменную
результата X. Остаток в этой задаче игнорируется.
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:01:10
Фиг. 4.16 Пример арифметических вычислений Page 1-1
PAGE ,132
TITLE Фиг. 4.16 Пример арифметических вычислений
;-------------------------------------------------------------
; Производятся вычисления по формуле
;
; A * 2 + B * C
; X = -------------------