有人能解释一下这个指令是做什么的,并将其翻译成C语言吗?
根据ARM参考手册,它执行“有符号和无符号位域提取”,但我对所有的位运算都不熟悉。
ubfx.w r3, r11, #0xE, #1
根据ARM参考手册,它执行“有符号和无符号位域提取”,但我对所有的位运算都不熟悉。
ubfx.w r3, r11, #0xE, #1
UBFX只是从源寄存器中提取一个位域,并将其放入目标寄存器的最低有效位中。
一般形式为:
UBFX dest, src, lsb, width
在C语言中,应该是这样写:
dest = (src >> lsb) & ((1 << width) - 1);
你所给出的示例的C语言等价物是:
r3 = (r11 >> 14) & 1;
如果r11的第14位被设置,那么r3将为1,否则为0。
参见:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjahjhee.html
ubfm
的最小可运行示例:https://github.com/cirosantilli/arm-assembly-cheat/blob/4a95d6a02514be6f6c22483752c24a2e14c1390b/v8/ubfm.S - Ciro Santilli OurBigBook.com