Нахождение третьей строны треугольника и его площади - Assembler
Формулировка задачи:
Добрый вечер., помогите пожалуйста с исправлением программы.
Есть программа вычисления третьей стороны по 2-м заданным и углу между ними, она работает.
Но к ней нужно добавить вычисление площади треугольника по 2-м заданным сторонам и углу, в этом и проблема, не могу понять как это все сделать.
Заранее благодарен.
.MODEL flat .data t dq 0.123 f DD 0.2332 x dq 0.123 rad DD 0.0174532925 .code _findTside proc push ebp mov ebp, esp fld dword ptr [ebp+16] fld dword ptr [rad] fmulp st(1), st(0) fcos fld dword ptr [ebp+8] fmulp st(1), st(0) fld dword ptr [ebp+12] fmulp st(1), st(0) fadd st(0), st(0) fld dword ptr [ebp+8] fmul st(0), st(0) fsub st(0), st(1) fld dword ptr [ebp+12] fmul st(0), st(0) faddp st(1), st(0) fsqrt fstp t fstp f fld t leave ret _findTside endp END
Решение задачи: «Нахождение третьей строны треугольника и его площади»
textual
Листинг программы
_findS proc push ebp mov ebp, esp fld dword ptr [ebp+16] fld dword ptr [rad] fmulp st(1), st(0) fsin fld dword ptr [ebp+8] fmulp st(1), st(0) fld dword ptr [ebp+12] fmulp st(1), st(0) fdiv x fstp S fld S leave ret _findS endp
Объяснение кода листинга программы
- _findS proc - это процедура, которая предназначена для нахождения третьей стороны треугольника и его площади.
- push ebp - сохраняет текущее значение регистра ebp в стеке.
- mov ebp, esp - устанавливает ebp равным значению esp.
- fld dword ptr [ebp+16] - загружает в стек значение переменной, на которую указывает смещение от ebp равное 16.
- fld dword ptr [rad] - загружает в стек значение переменной rad.
- fmulp st(1), st(0) - выполняет умножение первых двух чисел в стеке.
- fsin - выполняет возведение в синус от результата предыдущей операции.
- fld dword ptr [ebp+8] - загружает в стек значение переменной, на которую указывает смещение от ebp равное 8.
- fmulp st(1), st(0) - выполняет умножение первых двух чисел в стеке.
- fld dword ptr [ebp+12] - загружает в стек значение переменной, на которую указывает смещение от ebp равное 12.
- fmulp st(1), st(0) - выполняет умножение первых двух чисел в стеке.
- fdiv x - выполняет деление от результата предыдущей операции.
- fstp S - сохраняет результат последнего вычисления в переменную S.
- fld S - загружает значение переменной S в стек.
- leave - восстанавливает ebp из стека и возвращает его значение в регистр.
- ret - завершает выполнение процедуры и возвращает управление вызывающей программе.
- _findS endp - это конец процедуры.