Второй пример использования сопроцессора 8087 гораздо глубже
раскрывает перед нами его работу. Этот пример - подпрограмма,
которая будет использоваться в дальнейшем. Подпрограмма
предполагает, что исходное число находится в вершине стека; после
возврата из подпрограммы в вершине стека находится число, равное
десяти в степени X. Исходный текст этой подпрограммы приведен на
Фиг. 7.24.
Сопроцессор 8087 не имеет команды возведения 10 в произвольную
степень, но мы можем возводить в любую степень двойки. Поэтому
нужжно пользоваться формулой
10**X = 2**(X*Log2(10))
Первые две команды программы формируют показатель степени двух.
Программа загружает константу Log210, а затем умножает ее на
исходное число X, давая необходимую степень 2, называемую здесь E.
Поле комментариев в примере используется для иллюстрации элементов
стека сопроцессора 8087. Символ "?" означает, что значение
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:04:40
Фиг. 7.24 Вычисление 10**ST Page 1-1
PAGE ,132
TITLE Фиг. 7.24 Вычисление 10**ST
0000 CODE SEGMENT PUBLIC
ASSUME CS:CODE,DS:CODE
PUBLIC TEN_TO_X
0000 ???? OLD_CW DW ?
0002 ???? NEW_CW DW ?
;--------------------------------------------
; Эта программа извлекает число с вершины стека
; сопроцессора 8087 и возводит 10 в эту степень.
; Параметры: X в ST(0)
; Результат: 10**X в ST(0)
; Эта программа использует две ячейки в стеке 8087