在大端序的POWER7上执行以下一组PowerPC指令后,为什么寄存器r6的值等于0b10001000000000000000000000000000? cmpd中有一个隐式条件测试吗? li r3, 420 li r4, 360 cmpd r3, r4 mfocrf r6, 0x80
我应该更仔细地阅读。来自Power ISA V2.07B:POWER4、POWER5、POWER7和POWER8处理器将RT寄存器的所有字节设置为0,除了包含指定CR字段的字节。在包含CR字段的字节中,除了包含CR字段的位之外的位可能被设置为0或不被设置为0。因此,在我使用的机器上,这种行为是可以预期的。
mfocrf
应该只复制4位,所以由于您设置的位相距为5,我假设第二个位是上一个r6
值留下的。手册没有清楚说明其他位是否被归零,因此可以尝试在此之前将r6
归零。 - Jesterr6
清零没有任何影响。更奇怪的是,cmpd 7, 3, 4
的结果是r6 == 0b10001000。 - Icchanmfcr r6
怎么样? - Jestermfcr
,但我认为在新的POWER和PPC处理器上使用mfocrf
更便宜。 - Icchanmfocrf
除了第一个1或4之外没有给出任何位,那么谈论其他设置的位是毫无意义的,因为这并不能表明条件寄存器的情况。你应该使用mfcr
进行测试,它可以给出所有位,这样你就可以看到cmpd
实际上发生了什么。 - Jester