.set AD0GDR, 0xE0034004
...
bitextract: .int 65472
...
LDR r3, =(AD0GDR)
LDR r4, [r3]
/*load #65472 into r5 that will be used to extract bits 6-15*/
LDR r5, =(bitextract)
ADD r6, r4, r5 // extracts bits 6-15 and stores into r6
ADD r0, r0, r6, LSR #15 // shift r6 bites off and add into r0
我是 ARM 新手,在任何地方都找不到确切的答案。我试图从我得到的一些数据中只提取一定数量的位,特别是 6-15 位。位 6-15 的十进制数是 65427。
根据之前的想法,将 65472 添加到我给出的值上,在这种情况下,AD0GDR 是 3758309380,是 3758374852。
现在,我的理解是,在答案的二进制等价物中,通过添加 65472 它将在 6-15 位中添加“1”。然而,事实并非如此。那么将 65427 添加到给定的值会发生什么?编辑:我想一个更好的问题是为什么添加 65472 会提取 6-15 位?或者如果没有,到底发生了什么。
我的第二个问题是关于 LSR。
我之前问这个问题的原因是因为我需要“从位 6:15 中提取纯样本并将其一直移动到寄存器的右侧。” 并将该值添加到不同的寄存器。我应该从寄存器中移出最后 15 位吗?我想我对这种情况下的措辞感到困惑。