Jump to content
    

Ассемблер. 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 на данном этапе будет помещён другой адрес возврата)?

Share this post


Link to post
Share on other sites

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 автоматически. Именно этим вызов процедуры и отличается от простого перехода.

Share this post


Link to post
Share on other sites

Если речь про использование ассемблера, то надо изучать не документацию на конкретный МК, а документацию на архитектуру -- 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).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...