Перейти к содержанию
    

Ассемблер. 1986ВЕ4У

Доброго времени!

 

При программировании на ассемблере возникло две сложности, которые самому не удалось решить, прошу подсказать:

 

1. В документации на МК (1986ВЕ4У) есть используемая в нём система команд THUMB и список всех команд, которые используются, в том числе команда AND. При работе в Keil использование выражения "AND Rx, #0xXXXXXXXX" компилятор сообщает, что такая команда в наборе команд THUMB (указанным мной в начале файла) не существует (error: A1618E: Specified instruction is not supported by the current instruction set). Для справки, данной командой отчищаю часть регистра. Замена на ANDS не выручает. При этом ORRS работает.

2. Команда POP {LR} также не работает со следующей ошибкой (error: A1875E: Register Rn must be from R0 to R7 in this instruction). Я так понимаю у меня соответствующий регистр 16-битный и мне придётся всё же использовать дополнительный регистр для копирования туда значения LR перед заходом в процедуру (так как в LR на данном этапе будет помещён другой адрес возврата)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 минуту назад, AzardCry сказал:

1. В документации на МК (1986ВЕ4У) есть используемая в нём система команд THUMB и список всех команд, которые используются, в том числе команда AND. При работе в Keil использование выражения "AND Rx, #0xXXXXXXXX" компилятор сообщает, что такая команда в наборе команд THUMB (указанным мной в начале файла) не существует (error: A1618E: Specified instruction is not supported by the current instruction set). Для справки, данной командой отчищаю часть регистра.

Вроде как 1986ВЕ - это Cortex-M0? А значит там никак не может быть команды AND. Да ещё с непосредственным значением. А только ANDS с регистром.

Цитата

Замена на ANDS не выручает. При этом ORRS работает.

Это как это?  :wacko2:

Вообще-то для очистки части битов предназначена команда BICS.

 

Цитата

2. Команда POP {LR} также не работает со следующей ошибкой (error: A1875E: Register Rn must be from R0 to R7 in this instruction).

Если б Вы открыли описание на систему команд Cortex-M0, то прочитали бы:

POP
Pop Multiple Registers loads a subset, or possibly all, of the general-purpose registers R0-R7 and the PC 
from the stack.

т.е. - LR в ней не может быть никак.

Цитата

Я так понимаю у меня соответствующий регистр 16-битный и мне придётся всё же использовать дополнительный регистр для копирования туда значения LR перед заходом в процедуру (так как в LR на данном этапе будет помещён другой адрес возврата)?

У Вас вообще сплошная каша в голове... :wacko2:

Во-первых: LR не 16-битный, а как и все прочие - 32-битный.

Во-вторых: при входе в процедуру, значение в LR копируется из PC автоматически. Именно этим вызов процедуры и отличается от простого перехода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если речь про использование ассемблера, то надо изучать не документацию на конкретный МК, а документацию на архитектуру -- ARMv7-M для большинства ныне используемых ядер MK (Cortex-M3, M4, M7), ARMv6-M в случае -M0 и -M1, ARMv8-M в случае более новых ядер (-M23, M33; может, ещё что есть).

Насчёт констант надо помнить, что система команд не позволяет представить любые константы прямо в команде (константа, вообще говоря, 32 бита, а код команды -- либо 16, либо 32 бита, поэтому и нельзя произвольную константу закодировать прямо в команде). В документации на архитектуру описано, как константа формируется из тех битов, что присутствуют в коде команды. Всё остальное надо представлять данными в памяти, загружаемыми командой LDR (для чего есть даже специальный синтаксис -- LDR Rn, =значение), либо собирать из двух половинок двумя командами MOVT и MOVW (но они отсутствуют в ARMv6-M и в тех ARMv8-M, которые не имеют "основного расширения", т.е. логически являются развитием ARMv6-M, а не ARMv7-M).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...