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.

[参考译文] TMS320F28379D:有关汇编代码"MOV"

Guru**** 2587365 points
Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1128607/tms320f28379d-questions-about-the-assembly-code-mov

器件型号:TMS320F28379D

大家好、我对 TMS320F28379D 上的汇编代码有疑问。 我在示例项目名称"blinky_cpu01"上添加了代码。

主文件的代码如下所示

#include "F28x_Project.h"
extern void test_MOV();
uint32_t test_num = 1;
void main(void)
{
    InitSysCtrl();
    InitGpio();
    GPIO_SetupPinMux(31, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(31, GPIO_OUTPUT, GPIO_PUSHPULL);
    DINT;

    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    EINT;  // Enable Global interrupt INTM
    ERTM;  // Enable Global realtime interrupt DBGM
    test_MOV();
    for(;;)
    {
        GPIO_WritePin(31, 0);
        DELAY_US(1000*500);
        GPIO_WritePin(31, 1);
        DELAY_US(1000*500);
    }
}

"test_MOV ()"在另一个 asm 文件中定义、代码为  

	.ref _test_num
	.def _test_MOV

_test_MOV:
    MOV     AR0, #_test_num
    MOV     AL, *AR0
    MOV     AR1, AL
	LRETR

代码的函数应将 test_num (初始化时为1)移动到 AR1中。

但是、在运行该寄存器后、AR1为0、这不是预期的值。 请问您能给我一些关于这个问题的建议吗? 谢谢你

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

    您好!

    我刚刚尝试了设置、看起来工作正常。

    您能否打开反汇编窗口、然后单步执行代码并查看失败的位置?

    谢谢、此致、

    桑托什

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

    这是代码运行的过程。 它似乎在"MOV   AL、*AR0"时失败

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

    您好!

    您可以尝试一下吗?

    TEST_MOV:

      MOV AR1、*(_test_num)

      LRETR

    或  

      MOVZ DP、#_TEST_num

      MOVZ AR1、@μ s_test_num

      LRETR

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

    感谢您的及时回复。 但是、我不是更改代码、而是想知道我的代码为什么不起作用。

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

    您好!

    我已经要求编译器和汇编专家来看看。 请在今天或明天稍后回复。

    想知道、如果您尝试了解决方法、您能否确认它们是否适合您?

    谢谢、此致、

    桑托什

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

    您好!

    请看 反汇编窗口中是否有答案。

     0080e5:  92C0       MOV         AL、*+ XAR0[0]

     

    XAR0上的_X_表示整个寄存器正在用作指针。  因此、XAR0寄存器(AR0H)的高半部分中有一些数据、因此 XAR0指向目标位置以外的其他位置。  在指令集指南(SPRU430)中,没有* arx 形式的指令。

    因此、如果您用0初始化 XAR0、那么您的代码应该可以正常工作。

        MOVL    XAR0, #0x00
        MOV     AR0, #_test_num
        MOVW    AL, *AR0
        MOV     AR1, AL
    

    谢谢、此致、

    桑托什

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

    感谢您的清晰、良好的解释。 它真的很有帮助、并解决了我的问题。