Assembly 指令的操作数大小无效
所以我试图用浮点数来完成我的平均程序,但是我得到了一个无效的操作数大小。我不明白我做错了什么Assembly 指令的操作数大小无效,assembly,x86,masm,x87,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
.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
FIDIV
将ST(0)
除以一个可以是16位或32位的整数,但您试图向其传递一个64位操作数:
fidiv REAL8 PTR [esp + 4]
使用其中一个
fidiv WORD PTR [esp + 4]
或
并确保
[esp+4]
处的值为整数。为什么不告诉我们错误在哪一行?这不是一个“树桩小组”网站。另外,您是否考虑过操作数大小无效的可能性?在第一次操作中可能存在类似的问题。ebx真的指向浮点变量吗?
fidiv DWORD PTR [esp + 4]