FPU, простое уравнение - Assembler
Формулировка задачи:
Нужно найти значение функции при x = 5.0:
f(x) = sin(x) + ln(x)
Желательно с комментариями.
Решение задачи: «FPU, простое уравнение»
textual
Листинг программы
fld x; st(0)=x fsin; st(0)=sin(x) fldln2; st(0)=ln(2) st(1)=sin(x) fld x; st(0)=x st(1)=ln(2) st(2)=sin(x) fyl2x; st(0)=log2(x)*ln(2)=ln(x) st(1)=sin(x) faddp st(1),st; st(0)=ln(x)+sin(x)
Объяснение кода листинга программы
- fld x; st(0)=x — В этой инструкции FPU загружает значение переменной
x
и сохраняет его в регистре st(0). - fsin; st(0)=sin(x) — Эта инструкция вычисляет синус значения в регистре st(0) и сохраняет результат обратно в этот регистр.
- fldln2; st(0)=ln(2) st(1)=sin(x) — Здесь FPU загружает значение
ln(2)
в регистр st(0) и значениеsin(x)
в регистр st(1). - fld x; st(0)=x st(1)=ln(2) st(2)=sin(x) — В этой инструкции FPU загружает значение
x
в регистр st(0),ln(2)
в регистр st(1) иsin(x)
в регистр st(2). - *fyl2x; st(0)=log2(x)ln(2)=ln(x) st(1)=sin(x)** — Эта инструкция вычисляет логарифм
x
по основаниюln(2)
и сохраняет результат в регистр st(0). Также она вычисляетsin(x)
и сохраняет результат в регистр st(1). - faddp st(1),st; st(0)=ln(x)+sin(x) — Эта инструкция складывает значения в регистрах st(0) и st(1), сохраняя результат в регистре st(0). Таким образом,
ln(x)
иsin(x)
складываются.