.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 の 10 進数は 65427 です。
以前の考えから、私が与えられた値に 65472 を追加すると、この場合は 3758309380 である AD0GDR は 3758374852 になります。
さて、私の理解では、答えに相当するバイナリでは、65472 を追加すると、ビット 6 ~ 15 に「1」が入ります。しかし、そうではありません。では、与えられた値に 65427 を追加するとどうなるでしょうか? 編集:より良い質問は、なぜ 65472 を追加するとビット 6 ~ 15 が抽出されるのかということだと思います。そうでない場合は、正確に何が起こっているのか。
2 番目の質問は LSR に関するものです。
前に質問した理由は、「ビット 6:15 から純粋なサンプルを抽出し、レジスタの右端までシフトする」必要があるためです。その値を別のレジスタに追加します。レジスタの最後の 15 ビットをシフトする必要がありますか? 私はこの状況での言葉遣いに混乱していると思います。