Сборка ARM, добавляющая несколько битов - PullRequest
0 голосов
/ 21 марта 2019

Цель моей программы состоит в том, чтобы взять значение в регистре 0 и скопировать его в форме '1011' в регистр 1.

РЕДАКТИРОВАТЬ Я изначально не делал это ясно, чтобы не бытьДостигнутая с помощью простого mov, цель состояла в том, чтобы изолировать каждый бит и восстановить из этой точки

Я использую логические сдвиги для выделения каждого из битов в сочетании с маской AND в регистре 4 дляОбнаружить погоду или нет 1.

В существующем состоянии код завершается нормально, но проблема заключается в том, что каждый раз, когда я повторяю цикл для выполнения нового и, значения предыдущего и выталкивается из регистра 1.

В отладчике значение R1 идет, 1, 0, 1, 1

Когда я хочу найти это: 1, 10, 101, 1011

Вотфайл .s

            .global _start

_start:
        mov     R0,#0b1011
        mov     R4,#1   @Will act as a mask
        mov     R5,#3   @Shifter
        bl      movregs
        mov     R7,#1
        svc     0

movregs:
        and     R1,R4,R0,lsr R5 @Isolates each bit for moving
        subs    R5,#1    @Decrements the shifter
        bge     movregs

        bx      LR

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Решение, к которому я пришел, - использование регистра mov R4,#1 в качестве битовой маски, проверка наличия 1 с and R1,R4,lsr R5 наконец orr R0,R1,lsl #4 с левым логическим сдвигом, уменьшающимся каждый раз.

0 голосов
/ 22 марта 2019

Ты понимаешь, что простой mov R1, R0 дает вам то, что вы хотите?

Что касается вашего примера, неудивительно, что он делает не то, что вам нужно - код операции AND уничтожает предыдущее содержимое R1 каждый раз. Попробуйте взять ручку и бумагу и просто пройдите цикл, записывая значения регистров на каждом шаге.

...