我正在查看使用 MSVC 编译的 (Xenon) PowerPC 可执行文件的核心转储。我正在调试的函数有一个 MSVC 反汇编程序调用的操作mtmsree r13
。mtmsree
不在 PPC 的 IBM 文档中;这个操作是做什么的?
它紧跟在 a 之后mfmsr
,显然它正在向机器状态寄存器移动一些东西,但我不知道那个ee
后缀应该是什么意思。对于 PPC 文档称为不同的操作的操作,它一定是某种可爱的 Microsoft 昵称。
该指令是设置了 L 位 (0x00010000) 的 mtmsrd 指令的扩展形式。不修改整个MSR,只修改EE(External interrupt Enable)和RI(Recoverable Interrupt)btis。它比 mtmsrd L=0 快,因为它执行同步而不是上下文同步。这是一条特权指令,因此会导致操作系统异常,并且 .: 仍然很慢。
IBM 的 Book III:PowerPC Operating Environment Architecture v2.02(第 91 页)中对此有公开文档,http://www.ibm.com/developerworks/power/library/pa-archguidev2/? S_TACT=105AGX16&S_CMP=LP
我挑选了指令 ( 011111 01101 00001 00000 0010110010 0
) 的机器代码,结果发现这mtmsree
就是其他人所称mtmsrd
的。
mtmsr 指令的位 21:30 是 0010010010,而不是 0010110010。
我的猜测是 mtmsree 是 Xenon 特定指令,它只设置 MSR 中的 EE 位。Book E 机器具有执行此操作的 wrtee 和 wrteei 指令。我希望我知道在哪里可以找到氙气 PEM。