Другие языки программирования и технологии

С помощью команд fpu вычислить площадь круга, исходя из введѐнного диаметра. Ассемблер...

Нужна программа на языке ассемблера, выполняющая эту задачу. Т.к. я в программировании дуб дубом, а преподаватель сказал "Надо", обращаюсь к вам: Люди добрые, помогите чем можете!) полная задача заключается в "Операции ввода с клавиатуры и вывода на экран можно написать на языке высокого уровня, но все вычисления должны быть выполнены на ассемблере." Мне хотя бы с ассемблером разобраться...
Не указан язык высокого уровня, на котором нужно делать операции ввода с клавиатуры и вывода на экран, поэтому вся программа на ассемблере.
Процессор Intel 80386/87-совместимый (и выше) , компилятор MASM (+MASM32 SDK), 32-разрядное консольное приложение для Windows.

.386
.model flat, stdcall
option casemap: none

include windows.inc
include kernel32.inc
include user32.inc
include masm32.inc
includelib kernel32.lib
includelib user32.lib
includelib masm32.lib

.stack 100h
.data
tPrompt db 'Введите диаметр круга: ',0
tResult db 'Площадь круга = ',0
const4 dw 4

.data?
Diameter dq ?
Square dq ?
hStdIn dd ?
hStdOut dd ?
Buff db 24 dup (?)

.code

;Функция вычисления площади круга
;Объявление функции в Паскале:
;function CSquare(d: double): double; stdcall;
;Объявление функции в C/C++:
;double __stdcall CSquare(double d);
CSquare proc
push ebp
mov ebp,esp
fld qword ptr [ebp+8]
fmul st(0),st(0)
fldpi
fmul
fidiv const4
pop ebp
ret 8
CSquare endp

N74836316:
finit
invoke GetStdHandle,STD_INPUT_HANDLE
mov hStdIn,eax
invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hStdOut,eax
push offset tPrompt
call Print
invoke ReadConsole,hStdIn,addr Buff+4,20,addr Buff,0
invoke StrToFloat,addr Buff+4,addr Diameter

;Вызов функции
push dword ptr Diameter+4
push dword ptr Diameter
call CSquare
fstp Square

push offset tResult
call Print
invoke FloatToStr,Square,addr Buff
push offset Buff
call Print
invoke ReadConsole,hStdIn,addr Buff+4,20,addr Buff,0
invoke ExitProcess,0

Print proc
mov ebp,esp
invoke lstrlenA,[ebp+4]
invoke WriteConsole,hStdOut,[ebp+4],eax,0,0
ret 4
Print endp

end N74836316

P.S. В комментариях указано, как функция вычисления площади круга CSquare видна (и должна вызываться соответственно) в языках Pascal и C/C++.

Владимир Литвиненко
Владимир Литвиненко
51 590
Лучший ответ