【问题标题】:Invalid operand size for instruction指令的操作数大小无效
【发布时间】:2013-11-11 19:32:43
【问题描述】:

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

.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

【问题讨论】:

  • 为什么不告诉我们错误在哪一行?这不是一个“挡板”的网站。另外,您是否考虑过操作数大小无效的可能性?

标签: assembly x86 masm x87


【解决方案1】:

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

fidiv   REAL8 PTR [esp + 4]

使用任一

fidiv   WORD PTR [esp + 4]

fidiv   DWORD PTR [esp + 4]

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

【讨论】:

  • 第一次操作可能存在类似问题。 ebx 真的指向一个浮点变量吗?
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2020-04-12
  • 2019-04-04
相关资源
最近更新 更多