-1

所以我试图用浮点数完成我的平均程序,但我得到一个无效的操作数大小。我不明白我做错了什么。

.386    
.model flat 
public _Average     
.code   

_Average proc
 finit
 mov ecx, [esp + 4]      
 mov ebx, [esp + 8]     
 fldz
 jecxz   Done

Do:
 fadd    REAL8 PTR [ebx]
 add     ebx, 8
 loop    Do
 fidiv   REAL8 PTR [esp + 4]

Done:
ret
_Average endp

.data   
 end
4

1 回答 1

2

FIDIV除以ST(0)一个可以是 16 位或 32 位的整数,但您尝试将其传递给 64 位操作数:

fidiv   REAL8 PTR [esp + 4]

使用任一

fidiv   WORD PTR [esp + 4]

或者

fidiv   DWORD PTR [esp + 4]

并确保 at 的值[esp + 4]是一个整数。

于 2013-11-11T19:40:08.647 回答