; 178140a.asm
; умножение 2-х вещественных чисел, представленных в расширенном формате.
; TASM, сопроцессор
locals @@
.model compact, C
.386
.code
public mulx
.8086 ; переключаем на 8086, чтобы TASM сгенерировал
; PUSH BP/MOV BP,SP вместо ENTER
; long double mulx( const long double* p1, const long double* p2 );
proc mulx
arg @@p1: dword, @@p2: dword
uses si ; регистр SI нужно сохранять
LES si,[@@p1] ; указатель на первый сомножитель
; При генерации кода для 8086/8087 TASM вставляет инструкции WAIT
; перед каждой инструкцией сопроцессора.
.386
; Переключив на 80386/80387, мы исключаем ненужные для современных
; процессоров инструкции
fld tbyte ptr ES:[si] ; загружаем первый сомножитель в стек сопроцессора
LES si,[@@p2] ; указатель на второй сомножитель
fld tbyte ptr ES:[si] ; загружаем второй сомножитель в стек сопроцессора
fmulp st(1),st ; результат умножения - на вершине стека сопроцессора
.8086 ; переключаем на 8086, чтобы TASM сгенерировал POP BP вместо LEAVE
ret
endp mulx
end
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.