Задача 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)