【问题标题】:High level macro not recognized - Beginner MASM无法识别高级宏 - 初学者 MASM
【发布时间】:2010-06-07 19:03:23
【问题描述】:
main proc
 finit
 .while ang < 91
    invoke func, ang
    fstp res
    print real8$(ang), 13, 10
    print real8$(res), 13, 10
    fld ang
    fld1
    fadd
    fstp ang
 .endw
 ret
main endp

这段 MASM 代码有什么问题?

.endw 出现错误。我已经进行了一些测试以确保自己做到这一点。汇编程序告诉我invalid instruction operands

感谢您的宝贵时间!

【问题讨论】:

  • 我感觉问题出在预处理器生成的代码中

标签: assembly masm masm32


【解决方案1】:

请记住,masm 是一种“类型化”的汇编语言。而且看起来 ang 被定义为真实的。

问题是,“.while”生成一个 cmp 指令,后跟一个条件跳转。 cmp 指令从 reg 或 memory 中获取一些整数值,但肯定不是真实的。因此出现“无效指令操作数”错误。

在 .endw 中发生这种情况的原因很可能是因为 .while / .endw 构造在循环底部而不是在开头生成其测试。

【讨论】: