【问题标题】:Error A2001 in assembly program汇编程序中的错误 A2001
【发布时间】:2016-05-02 05:31:21
【问题描述】:

过程代码:

Values PROC ,

文本:PTR BYTE,列表Ptr:PTR BYTE

mov edx,Text

L1: call WriteString 

call ReadFloat

      fild 100

      fcomp comVal

      jg endLoop

      fild 100

      fcomp comVal

      jl endPRoc

    fstp REAL8 PTR [esi]

      add esi, TYPE REAL8


endProc:

价值观ENDP

我使用 invoke storeValues, ADDR prompt, ADDR List 调用它并得到错误 2001,并且对如何修复它感到困惑

【问题讨论】:

  • 可能还有另一个问题:第一行中PROC 后面的逗号。 PROC 和参数不是用逗号分隔,而是用空格分隔。

标签: assembly x86 masm32


【解决方案1】:

正如Intel Software Manual 第 830 页中定义的那样,FILD 采用内存操作数,而不是立即数:

DF /0 FILD m16int Valid Valid Push m16int onto the FPU register stack.
DB /0 FILD m32int Valid Valid Push m32int onto the FPU register stack.
DF /5 FILD m64int Valid Valid Push m64int onto the FPU register stack.

您想在数据段中定义常量,并指向它。 比如:

.data 
hundred dd 100

; ....

.code
fild dword ptr [hundred]

【讨论】:

  • 您的尺寸不匹配。 dw 匹配 word ptrdd 匹配 dword ptr
  • @Fifoernik,感谢您的发现。只是相应地编辑了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多