我想我在匯編程式中以某種方式錯誤地使用了回圈。任務文本:計算函式 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
并且輸出正常,x 以 1 開頭,但僅輸出 y1。(圖二)
uj5u.com熱心網友回復:
FpuFLtoA寫入帶有前導空格或減號的以空字符結尾的字串。如果此字串的長度為 14 或 15 個字符,則終止符將被 覆寫mov word ptr _res1 14, CrLf。
但是 1.9444444316只有 13 個字符長,所以零位元組被保留并導致MessageBox停止處理字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/527628.html
