因此,Im使用QEMU后端测试了手臂模拟器中的更改,并且分支和交换指令未触发我的微基准。
无论如何,我认为我会先手动检查一下这些位
如此:
contents += '<a href="#" onclick="getAwardDetailsFunction('+obj.awardId+')">';
将等于: 100010000000000
所以如果要按switch语句:
contents += '<a href="#" onclick="getAwardDetailsFunction(\'' + obj.awardId.replace('\'', '"') + '\')"</a>';
我们将得到:4.到目前为止一切顺利。
我们首先检查insn = (0b010001 << 10)
多数民众赞成在0仍然好,我们继续下一个条件
switch (insn >> 12)
返回1024,所以我们进入分支。
这是开始变得毛茸茸的地方。
我们做
if (insn & (1 << 11))
分支交换代码在情况3中
但if (insn & (1 << 10))
将为0:
为了更清楚地说明op = (insn >> 8) & 3;
switch (op)
根本没有排队。
我在这里想念什么?这是错误吗?
答案 0 :(得分:1)
0100010000000000(即0b010001 << 10)不是Thumb BX指令,这就是为什么如果将其馈送到解码器中,它将不会沿着BX的代码路径前进的原因。如代码中的注释所示,BX和BLX的insn为0b0100_0111_xxxx_xxxx。 0100010000000000是寄存器-寄存器ADD指令。
您可以通过查看v7A Arm ARM(DDI0406C.c,可在https://developer.arm.com/docs/ddi0406/c/arm-architecture-reference-manual-armv7-a-and-armv7-r-edition上),尤其是A6.2节中的解码表来确认。