Ошибка сборки ARM - неверная константа после исправления - PullRequest
0 голосов
/ 23 апреля 2019

Я знаю, что этот вопрос уже задавался, поэтому извините, что спрашиваю снова, но я понятия не имею, как это исправить. В начале моей программы я пытаюсь переместить двоичное значение 101000110000100110000 в R0, но я получаю сообщение об ошибке «Ошибка: недопустимая константа (146130) после исправления»

        .global _start
_start: 
    mov R0,#0b101000110000100110000
    bl  correct16
    mov R7,#1
    svc 0

correct16:
    push    {R1-R10}

Я не очень понимаю, почему это происходит или как это исправить, потому что у меня никогда не было этой ошибки раньше.

1 Ответ

2 голосов
/ 23 апреля 2019

Вы пытаетесь использовать непосредственное значение 0x146130, инструкция mov может принимать до 16 бит (хотя это зависит от вашей архитектуры и набора команд), поэтому то, что вы пытаетесь сделать, может 'быть закодированным.Вы можете загрузить 16-битную немедленную и добавить остальные или использовать буквальный пул для ее решения.

_start: 
    mov R0,#0x6130       
    movt R0,#0x14
    bl  correct16
    mov R7,#1
    svc 0

Это загружает нижнее полуслово в r0, а затем загружает в верхнее полуслово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...