指令的操作数大小无效

时间:2013-11-11 19:32:43

标签: assembly x86 masm x87

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

.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

1 个答案:

答案 0 :(得分:2)

FIDIVST(0)除以一个可以是16位或32位的整数,但是你试图将它传递给64位操作数:

fidiv   REAL8 PTR [esp + 4]

使用

fidiv   WORD PTR [esp + 4]

fidiv   DWORD PTR [esp + 4]

并确保[esp + 4]处的值为整数。