This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28377S:asm 函数

Guru**** 2481465 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/821782/ccs-tms320f28377s-asm-function

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

我在 C 程序中定义了两个全局数组、uint16 x[80]和 uint32 y[80]。 C 语言程序调用汇编语言程序来计算 x[i]+y[i]+y[0]、并返回长整数。 函数的 C 原型为 uint32 LayPos (uint16 I)。函数的汇编语言程序如下:

LayPos (_LayPos):

  MOV @AR0、 AL

  MOVW  DP、  #_x

  MOVL  XAR4、  @μ_x

  MOVU ACC、 *+ XAR4[AR0]

  MOVW  DP、  #_y

  MOVL   XAR5、  @μ_y

  ADDUL ACC、 *+ XAR5[AR0]

    ADDUL ACC、 *+ XAR5[0]

  LRETR

上述程序无法达到预期的结果。  哪里出错了? 它是寻址模式错误吗?

如何在 CCS 6.1.0中查看 C 函数的汇编语言代码?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉、我现在看到您的问题。 当您想要将变量地址直接加载到 xar 中时、您不需要 DP。 只有在使用直接寻址和后续指令时、才需要该地址。 提供 x 和 y 位于低22位数据空间中、您可以使用一条 MOVL 指令来实现它。 您的代码如下所示:

    LayPos (_LayPos):

    MOV @AR0、AL

    MOVL XAR4、#_x

    MOVU ACC、*+ XAR4[AR0]

    MOVL XAR5、#_y

    ADDUL ACC、*+ XAR5[AR0]

    ADDUL ACC、*+ XAR5[0]

    LRETR

    这在我的机器上工作。

    在 CCS v6的调试视图中、您应该能够从下拉菜单"View -> Disassembly"中打开反汇编窗口。 在单步执行代码时、您将看到 C 语言和拆分汇编代码交错。 此外、您可以在工程属性中设置"-k"编译器选项、以便在编译后不会删除生成的汇编文件。

    此致、

    Richard