我想我在汇编程序中不正确地使用了循环。任务文本:计算函数Yn = 7x^3 /(2x^2 + 1.6)的5个值(x与步骤4的1不同)。下面是我的程序图1的执行情况:

这是我的程序代码:
;2 вариант Вычислить 5 значений функции Yn = 7x 3 /(2x 2 + 1,6) (x изменяется от 1 с шагом 4).
.686
.Model flat, stdcall
option casemap: none
include D:\masm32\include\windows.inc
include D:\masm32\include\kernel32.inc
include D:\masm32\include\fpu.inc
include D:\masm32\include\msvcrt.inc
include D:\masm32\include\user32.inc
includelib D:\masm32\lib\user32.lib
includelib D:\masm32\lib\kernel32.lib
includelib D:\masm32\lib\msvcrt.lib
includelib D:\masm32\lib\fpu.lib
; Yn = 7x^3 /(2x^2 + 1,6)
.data
CrLf equ 0A0Dh
_y1 dt 0.0
_y2 dt 0.0
_y3 dt 0.0
_y4 dt 0.0
_y5 dt 0.0
x DWORD 1.0
seven DWORD 7.0
two DWORD 2.0
num DWORD 1.6
_zero DWORD 0.0
step DWORD 4.0
info db "Гринёв Илья ВТИПО-21-2 (2 вариант)",10,10,
"Yn = 7x^3 /(2x^2 + 1,6) (x изменяется от 1 с шагом 4).",10,10,
"y1 = "
_res1 db 14 DUP(0),10,13
db "y2 = "
_res2 db 14 DUP(0),10,13
db "y3 = "
_res3 db 14 DUP(0),10,13
db "y4 = "
_res4 db 14 DUP(0),10,13
db "y5 = "
_res5 db 15 DUP(0),10,13
ttl db "Обработка чисел на сопроцессоре в цикле",0
.code
_start:
finit
mov ecx, 6
m1:
fld x
;(7*x^3)
fmul x
fmul x ; x^3
fmul seven
fld x
;(2x^2 + 1,6)
fmul x ; x^2
fmul two ; 2*x^2
fadd num
FDIVP st(1),st
fld x
fadd step
fstp x
loop m1
fstp _y5
fstp _y4
fstp _y3
fstp _y2
fstp _y1
invoke FpuFLtoA,offset _y1,10,offset _res1,SRC1_REAL or SRC2_DIMM
mov word ptr _res1 + 14, CrLf
invoke FpuFLtoA,offset _y2,10,offset _res2,SRC1_REAL or SRC2_DIMM
mov word ptr _res2 + 14, CrLf
invoke FpuFLtoA,offset _y3,10,offset _res3,SRC1_REAL or SRC2_DIMM
mov word ptr _res3 + 14, CrLf
invoke FpuFLtoA,offset _y4,10,offset _res4,SRC1_REAL or SRC2_DIMM
mov word ptr _res4 + 14, CrLf
invoke FpuFLtoA,offset _y5,10,offset _res5,SRC1_REAL or SRC2_DIMM
invoke MessageBox, 0, offset info, offset ttl, MB_ICONINFORMATION
invoke ExitProcess, 0
end _start我尝试将循环计数器改为5而不是6。
mov ecx, 5输出是普通的,从1开始x,但只输出y1。(图2)

发布于 2022-11-02 06:57:55
FpuFLtoA写入带前导空格或减号的以空结尾的字符串。如果此字符串长为14个或15个字符,则终止符将被mov word ptr _res1 + 14, CrLf覆盖。
但是,1.9444444316只有13个字符长,所以零字节将被保留,并导致MessageBox停止处理字符串。
https://stackoverflow.com/questions/74285008
复制相似问题