Надо посчитать первые 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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