.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, он поместит «1» в биты 6-15. Однако это не так. Итак, что происходит, добавляя 65427 к приведенному значению? Редактировать: Я думаю, лучший вопрос, почему добавление 65472 извлечения битов 6-15? или если это не так, что именно происходит.
И мой второй вопрос относится к LSR.
Причина, по которой я задаю вопрос раньше, заключается в том, что мне требуется «Извлечь чистый образец из битов 6:15 и сдвинуть его полностью вправо от регистра». и добавьте это значение в другой регистр. Должен ли я переносить последние 15 бит из регистра? Наверное, меня смущает формулировка в этой ситуации.
Ваш учитель, по-видимому, прекратил программирование в armv5. Архитектуры с более новыми командами содержат инструкции, такие как ubfx, которые в одиночку выполняют эту работу. –