ARM位域提取?

3
有人能解释一下这个指令是做什么的,并将其翻译成C语言吗?
ubfx.w          r3, r11, #0xE, #1

根据ARM参考手册,它执行“有符号和无符号位域提取”,但我对所有的位运算都不熟悉。
1个回答

7

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


1
一个包含断言的 ubfm 的最小可运行示例:https://github.com/cirosantilli/arm-assembly-cheat/blob/4a95d6a02514be6f6c22483752c24a2e14c1390b/v8/ubfm.S - Ciro Santilli OurBigBook.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接