1

我不是初学者,但刚开始使用 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

谢谢你原谅我一个基本的问题。

4

1 回答 1

0

根据http://www.tasking.com/support/c166/c166_user_guide_v2.1.pdf TASKING VX-toolset for C166 User Guide,“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 for TriCore User Guide》有类似的汇编能力,所以试试.define。只有允许的寄存器名称集不同于 c166:

3.5. 寄存器 以下寄存器名称(无论大写还是小写)都不应用于汇编语言源文件中的用户定义符号名称:

D0 .. D15 (data registers)
E0 .. E14 (data register pairs, only the even numbers)
A0 .. A15 (address registers)
于 2017-02-19T18:15:13.573 回答