Надо посчитать первые 4 значения Y по заданной формуле - Assembler
Формулировка задачи:
Есть уравнение Yn = 37/(2х^2 + 7,3). Надо посчитать первые 4 значения (начальное значение х=1, шаг=2)
Помогите плз исправить код
;Yn = 37/(2x^2 + 7,3) .686 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\fpu.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\fpu.lib .data BSIZE equ 30 .data const1 DWORD 37.0 const2 DWORD 2.0 const3 DWORD 7.3 resEAX DWORD 0 res TBYTE 3 dup (0) stdout DWORD ? cWritten DWORD ? buf BYTE BSIZE dup (?) .code _st: xor edx,edx mov ecx,4 mov ebx,1 m1: mov eax,ebx mul ebx mov resEAX,eax finit fld dword ptr const1; st(0) := 37.0 fld dword ptr const2; st(0) := 2.0, st(1) := 37.0 fld dword ptr const3; st(0) := 7.3, st(1) := 2.0, st(2) := 37.0 fld dword ptr resEAX; st(0) := resEAX, st(1) := 7.3, st(2) := 2.0, st(3) := 37.0 fmul st(0),st(2) fadd st(0),st(1) fmov st(3),edi fdiv st(0) fstp res[edx] push ecx push edx invoke GetStdHandle, STD_OUTPUT_HANDLE mov stdout, eax invoke FpuFLtoA, \ ADDR res[edx], \ 10, \ ADDR buf, \ SRC1_REAL or SRC2_DIMM invoke WriteConsoleA, \ stdout, \ ADDR buf, \ BSIZE, \ ADDR cWritten, \ 0 pop edx add edx,0Ah inc ebx pop ecx loop m1 invoke ExitProcess, 0 end _st
Решение задачи: «Надо посчитать первые 4 значения Y по заданной формуле»
textual
Листинг программы
;Yn = 37/(2x^2 + 7,3) .686 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\msvcrt.inc include \masm32\macros\macros.asm includelib \masm32\lib\masm32.lib includelib \masm32\lib\msvcrt.lib ;.data BSIZE = 30 X = 1 step = 2 iter = 4 .data tpt db 0Dh, 0Ah, 'Y[%d]=%f',0 const1 DWORD 37 const2 DWORD 2 const3 DWORD 7.3 resEAX dq 0 buf BYTE BSIZE dup (?) .code _st: mov ecx, iter mov ebx, X m1: mov eax,ebx sal eax,1 ;2x imul eax, eax ; 2x^2 mov dword ptr [resEAX],eax fild [const1] fild dword ptr [resEAX] fadd [const3] ; st0 = 2x^2+7.3 fdivp st(1), st(0) ; st0 = 37/(2x^2 + 7,3) fstp [resEAX] ; push ecx mov edx,iter sub edx, ecx invoke crt_printf, ADDR tpt, edx, [resEAX] pop ecx add ebx, step loop m1 invoke crt_exit, 0 end _st
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д