Я пишу какой-то голый металлический код для малины Pi и получаю неожиданное предупреждение от ассемблера ARM Cross на Windows. Инструкции, вызывающие предупреждения были:Неожиданное предупреждение о GNU ARM Assembler
stmdb sp!,{r0-r14}^
и
ldmia sp!,{r0-r14}^
Это предупреждение:
Предупреждение: обратна запись базового регистра НЕПРЕДСКАЗУЕМЫ
Я могу сортировать понимайте это, хотя модификатор '^' сообщает процессору хранить e копий регистров пользователя, он не знает, в каком режиме будет работать процессор, когда будет выполняться инструкция, и, похоже, не существует способа рассказать об этом. Я был немного больше озабочен, чтобы получить такое же предупреждение для:
stmdb sp!,{r0-r9,sl,fp,ip,lr}^
и:
ldmia sp!,{r0-r9,sl,fp,ip,lr}^
несмотря на то, что я явно не хранящего ANY зр регистр.
Мое беспокойство состоит в том, что, хотя я использовал много ассемблерного кодирования около 15 лет назад, код ARM является новым для меня, и я могу что-то недопонимать! Кроме того, если я могу смело игнорировать предупреждения, есть ли способ их подавить?
А, я пропустил этот бит в Справочном руководстве по архитектуре, хотя я должен признать, что для большей части моей информации я использую техническое справочное руководство ARM1176JZF-S, и это, похоже, не так подробно! Все объяснения предупреждения, которое я нашел с помощью Google (не многие!), Говорят, что предупреждение вызвано тем, что вы выполняете обратную запись в регистр, который загружается/хранится. Я понимаю, что обратная связь относится к обновлению базового регистра. – williamssimonp