【发布时间】:2018-03-11 06:45:14
【问题描述】:
正如我所注意到的,0xF3 二进制前缀被用作:
1) 在INS,OUTS,MOVS,LODS,STOS 指令中重复并减少ecx 直到ecx 等于0 并调用rep
2)重复并减少ecx直到ecx等于0或ZF在CMPS,SCAS指令中设置并调用repz或repe
0xF3 二进制前缀用作:
1) 重复并减少ecx 直到ecx 等于0 或ZF 未在CMPS,SCAS 指令中设置并调用repnz 或repne
最近注意到XACQUIRE/XRELEASE前缀也有相同的二进制值(0xF2,0xF3)
那么XACQUIRE/XRELEASE 在做什么(我读过一些关于锁定内存地址的内容,但它们不是工作行lock(我相信))?
还有0xF3 mov byte ptr [ecx],0x0 会做什么? (将停在ZF 设置\未设置或将仅停在ecx 等于0)0xF2 mov byte ptr [ecx],0x0 会做什么?
【问题讨论】:
-
查阅指令集参考。您将看到如下内容:“F3H 前缀为以下指令定义,其余为未定义”和“XACQUIRE 前缀提示只能与以下指令一起使用”我>。这些集合不重叠,也不包括
mov。所以这是未定义的。至于XACQUIRE/XRELEASE在做什么,参见Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture中的HLE软件接口部分>
标签: assembly x86 binary machine-code intel-tsx