首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MASM32。我不明白为什么当我运行程序时,第一个x等于5,而不是一个

MASM32。我不明白为什么当我运行程序时,第一个x等于5,而不是一个
EN

Stack Overflow用户
提问于 2022-11-02 06:11:06
回答 1查看 31关注 0票数 0

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

这是我的程序代码:

代码语言:javascript
复制
;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。

代码语言:javascript
复制
mov ecx, 5

输出是普通的,从1开始x,但只输出y1。(图2)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-02 06:57:55

FpuFLtoA写入带前导空格或减号的以空结尾的字符串。如果此字符串长为14个或15个字符,则终止符将被mov word ptr _res1 + 14, CrLf覆盖。

但是,1.9444444316只有13个字符长,所以零字节将被保留,并导致MessageBox停止处理字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74285008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档