我正在使用汇编语言和 MASM 汇编器尝试 Intel x86 Hardware Lock Elision 功能。我收到以下错误;
错误 A2008:语法错误:MOV 错误 A2008:语法错误:RET
代码是;
COMMENT '
Hardware Lock Elision Test 1.
'
.686P
.MMX
.MODEL FLAT
.CODE
_main:
XACQUIRE MOV EAX, 10h
XRELEASE RET
END
它可以在没有 XACQUIRE 和 XRELEASE 前缀的情况下正常编译。
也不
MOV EAX, 10h
采用RET
HLE 前缀。即使某些汇编器允许您编写该代码并将其汇编为预期的字节序列,处理器也不会以有用的方式解释它们。在 的情况下xrelease ret
,机器代码f3 c3
(如果没有被汇编器拒绝,它将被汇编成的代码)意味着有时rep ret
被用作(过时的)AMD 怪癖的解决方法,但rep
前缀实际上没有任何意义。此上下文仅用作填充。XAQUIRE
并且XRELEASE
仅与某些选择指令结合使用才有意义,如 Intel SDM 中引用的:另请注意,HLE 本质上已死:不受新处理器支持(在 HLE 上下文中“不支持”意味着前缀不执行任何操作,而不是它们出错,这种兼容性就是选择这些前缀的原因)并通过微代码更新禁用对于较旧的处理器。如果需要,您可以使用前缀,但通常它们不会执行任何操作。