нахождение площади поверхности шестиугольной призмы на ассемблере - PullRequest
0 голосов
/ 02 декабря 2019

Я пытаюсь найти площадь поверхности, используя это уравнение. A = 6 * a * h + 3 * sqrt (3) * a ^ 2 Я не совсем понимаю, как на самом деле работают инструкции сопроцессора.

Здесь в настоящее время используется подпрограмма

enter       8,0
mov         [ebp-4],dword 2 ; Coprocessor instructions only work with
                            ; memory addresses. So we will store the number
                            ; 2 in a local variable on the stack (which
                            ; is the address ebp-4).

mov         [ebp-8],dword 6 ; ebp-8 = 6

;A = 6*a*h+3*sqrt(3)*a^2 where a is the base edge and h is height
fld         qword[ebp+8]    ; ST0 = a
fld         qword[ebp+16]   ; ST1 = a; ST0 = h
fmulp       st1     ; ST0 = h*a
mov         [ebp-8],dword 6 
fild        dword[ebp-8]        ; ST1 = h*a; ST0 = 6
fmulp       st1,st0     ; ST0 = h*a*6

fld         dword[ebp+8]    ; ST0 = a
fmul            st0                 ; ST0 = a^2
fild            dword[ebp-8]    ; ST1 = (a^2); ST0 = 3
fld         st0                 ; ST2 = (a^2); ST1 = 3; ST0 = 3   
fsqrt                               ; ST2 = (a^2); ST1 = 3; ST0 = sqrt(3)
fmulp       st1                 ; ST1 = (a^2); ST0 = 3*sqrt(3)
fmulp       st1                 ; ST0 = ((a^2)*3*sqrt(3)

Я ищу лучшего понимания того, как я хочу поступить, и вы можете сказать мне, что я делаю неправильно

...