我正在将代码块从 MASM 移植到 C 内联汇编程序(x86、Windows、MS VC) Foolowing 不是真正的代码,只是为了给出一个想法。假设我有一些数据定义为静态数组,甚至是两个标签之间的代码块,我需要获取它的大小。
label1:
bla bla bla
label2:
....
mov eax, (offset label2 - offset label1)
这样的代码在 MASM 中像魅力一样工作,但在 CI 中得到以下错误消息:“错误 C2425:'-':'第二个操作数'中的非常量表达式”我可以编译:
mov eax, offset label1
mov eax, offset label2
我希望编译器在编译时评估 (offset label1 - offset label2),但看起来我错了。我也不能添加偏移量(为什么?这些只是在编译过程中添加的两个整数......?)当然,我可以编译 mov eax, offset label2 mov edx, offset label1 sub eax, edx,但这是一个额外的代码只是为了计算一个常数。有人可以解释一下,我的代码有什么问题吗?
会不会是搬家造成的?如何推动它通过?
期待解答,谢谢。