Задача VX ассемблер, используя символическое имя вместо имени регистра

Я не начинающий программист, но только начал использовать ассемблер Tasking VX (руководство http://www.tasking.com/support/tricore/tc_user_guide_v6.0.pdf). Я не могу поверить, что задаю такой простой вопрос, но после прочтения руководства по сборке Tasking VX дважды я не могу найти ответ на самые простые вещи: могу ли я использовать символическое имя вместо исходного имени регистра?

Что-то вроде:

 loop_i = d3          ; d3 register, wishing to use symbolic name loop_i instead
                      ; (assembler doesn't allow the above definition)      
 mov16    loop_i, #4  ; this is what I want in the code
 mov16    d3, #4      ; this is what I must use instead

Спасибо, что простил меня за элементарный вопрос.

1 ответ

Согласно http://www.tasking.com/support/c166/c166_user_guide_v2.1.pdf TASKING VX-toolset для Руководства пользователя C166, раздел "3.3. Операнды инструкции сборки", операнд регистра должен иметь форму, определенную в "3.5. Регистры "раздел:

Следующие имена регистров, в верхнем или нижнем регистре, не должны использоваться для пользовательских имен символов в исходном файле на языке ассемблера:

 R0 .. R15 (general purpose registers)
 RL0 .. RL7 (byte registers)
 RH0 .. RH7 (byte registers)

Как я понимаю, пользовательские символы предназначены для констант или меток; в разделе "3.7.4. Типы символов и типы выражений" нет определенного пользователем символа типа "регистр". Но вы можете попробовать использовать препроцессор с ".DEFINE":

  .DEFINE symbol string 

Описание. С .DEFINE Директива вы определяете строку подстановки, которую вы можете использовать во всех следующих исходных строках. Ассемблер ищет все последующие строки на предмет появления символа и заменяет его строкой. Если символ встречается в строке в двойных кавычках, он также заменяется. Строки между одинарными кавычками не раскрываются. Эта директива полезна для обеспечения лучшей документации в исходной программе. Символ может состоять из букв, цифр и символов подчеркивания (_), а первый символ не может быть цифрой.

Попробуй это:

 .define  loop_i  d3
 mov16    loop_i, #4

 mov16    d3, #4      ; this is what I must use instead

PS: http://www.tasking.com/support/tricore/tc_user_guide_v6.0.pdf "TASKING VX-toolset для TriCore User Guide" имеет аналогичные возможности ассемблера, поэтому попробуйте .define, Только допустимый набор имен регистров отличается от c166:

3.5. Регистры Следующие имена регистров, прописные или строчные, не должны использоваться для пользовательских имен символов в исходном файле на ассемблере:

D0 .. D15 (data registers)
E0 .. E14 (data register pairs, only the even numbers)
A0 .. A15 (address registers)
Другие вопросы по тегам