2016-09-18 6 views
4

У меня есть tiva c TM4C123GH6PM, и я только что установил цепочку инструментов GNU ARM. Я хочу программировать только в сборке, потому что я хотел бы к системе сборки ЧЕТВЕРТОГО для него, но когда я используюКак указать другое имя регистру в ассемблере GNU ARM?

.equ W, r2    // working register 

это дает символ r2

add W, IP, #4 
main.S(54): error: undefined symbol r2 used as an immediate value 

тогда я изменил:

#define W r2 

теперь дает

add W, IP, #4 
main.S(55): error: undefined symbol W used as an immediate value 

Вопросы:

  • Можно ли изменить название?
  • Если нет, могу ли я использовать предшественника C для этого?
+0

Я использовал GCC с -x ассемблером-cpp, но я не могу заставить KEIL использовать его, поэтому я переключился на кодовые блоки, но снова не могу поместить скрипт ссылок с кодовыми блоками! любые идеи? –

ответ

5

Чтобы создать псевдоним для регистра, используйте .req:.

W .req r2 
... 
add W, IP, #4 
+0

AMAZING. Я использовал это [Ассемблерные директивы] (https://ftp.gnu.org/pub/old-gnu/Manuals/gas-2.9.1/html_chapter/as_7.html). Спасибо чувак :) –

2

Вы не можете переименовать регистры.

Чтобы использовать препроцессор, вам необходимо скомпилировать его с помощью GCC, а не с as. Помимо использования arm-none-eabi-cpp непосредственно, есть два способа сделать это:

  • Имя файл сборки с (прописной) расширение .S и компиляции с GCC (например, arm-none-eabi-gcc -c foo.S -o foo.o). A нижний регистр.s расширение пропустит предварительную обработку.
  • Имя файла сборки все, что вы хотите, и передать -x assembler-with-cpp в НКУ (например arm-none-eabi-gcc -c -x assembler-with-cpp foo.bar -o foo.o. Использование -x assembler вместо скачет предварительной обработки.

Если вы собираете с Keil использовать .sx расширение (перечисленных here). Я не мог» т найти выключатель, как ССЗ -x

+0

Спасибо, кучка. Я дал его Notlikethat, поскольку его метод не использует предшественника, оба метода работают .sx и .req еще раз спасибо. –