Нахождение третьей строны треугольника и его площади - 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

Объяснение кода листинга программы

  1. _findS proc - это процедура, которая предназначена для нахождения третьей стороны треугольника и его площади.
  2. push ebp - сохраняет текущее значение регистра ebp в стеке.
  3. mov ebp, esp - устанавливает ebp равным значению esp.
  4. fld dword ptr [ebp+16] - загружает в стек значение переменной, на которую указывает смещение от ebp равное 16.
  5. fld dword ptr [rad] - загружает в стек значение переменной rad.
  6. fmulp st(1), st(0) - выполняет умножение первых двух чисел в стеке.
  7. fsin - выполняет возведение в синус от результата предыдущей операции.
  8. fld dword ptr [ebp+8] - загружает в стек значение переменной, на которую указывает смещение от ebp равное 8.
  9. fmulp st(1), st(0) - выполняет умножение первых двух чисел в стеке.
  10. fld dword ptr [ebp+12] - загружает в стек значение переменной, на которую указывает смещение от ebp равное 12.
  11. fmulp st(1), st(0) - выполняет умножение первых двух чисел в стеке.
  12. fdiv x - выполняет деление от результата предыдущей операции.
  13. fstp S - сохраняет результат последнего вычисления в переменную S.
  14. fld S - загружает значение переменной S в стек.
  15. leave - восстанавливает ebp из стека и возвращает его значение в регистр.
  16. ret - завершает выполнение процедуры и возвращает управление вызывающей программе.
  17. _findS endp - это конец процедуры.

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы