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.

[参考译文] MSP430F5529:RLA 周期和绝对地址

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1360774/msp430f5529-rla-cycles-and-absolute-address

器件型号:MSP430F5529

只是优化时间关键型循环。 我拥有的代码(相当少数)  

RLA &0xABCD
现在作为一个模拟指令、 
ADD &0xABCD, &0xABCD
 由于它具有一个源和目的地址、并且在我看来需要3个周期来运行(例如、将源和目的地址作为同一个地址没有好处)、所以实现了现在的执行方式。

问的原因是什么、我想我可以 重新编码为  

MOV &0xABCD, R12
RLA R12
。 看起来像是一条额外的指令、但两个代码都需要6个字节进行编码、并且都在3个周期内运行。 那么、这是正确的-第二个的唯一缺点是它使用了一个寄存器(在本例中为 R12)? 优点是、如果需要额外的操作(例如、额外的 RLA)、那么这些操作在寄存器上完成、是在一个周期内运行的两个字节指令-例如、非常快和很小。

那么、这是正确的吗?  

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

    添加&0xABCD、&0xABCD   6个周期

    MOV &0xABCD、R12     3个周期

    RLA R12         1周期

    有关指令周期的信息、可在 slau208 (MSP430x5xx 和 MSP430x6xx 系列用户指南)中找到。  或使用计时器或端口切换进行自己的测试。

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

    哇! 我在查看 AS_5文档第5.4.1节-但看到了错误的单元格!

    由于绝对地址被两次用作源和目的、所以这两条指令肯定快于单个 RLA。 这两条指令更快、因为结果保存在寄存器中。 对我来说、这很好、我只是读取进位标志上的位(实际上会将其筛分到另一个寄存器中)。

    是的,为什么我 一开始没有意识到它是 RLA &0xABCD 看起来它只是一个存储器存取,而事实上它是两个!

    我们确实想知道有多少个周期是 RRA &0xABCD -它没有被模拟、但具有作为源和目标的存储器存取。 嗯、我应该检查这是否需要6个字节来进行编码、或者可以用4个字节来完成!

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

    RRA &0xABCD 需要4个周期

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

    一般规则是每次存储器存取一个周期。 当然也有例外。

    对于 RRA 和其他东西、您有操作码、操作数、源和目标。 四种存储器存取。

    CPUx 使用扩展字和可能的重复方式使这种情况复杂化。

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

    不是那种逻辑说, RLA = ADD 也是4个周期,因为它具有与 RRA 相同的内存访问...

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

    添加&opp1、&opp2

    指令提取需要三个存储器周期。 (操作码和两个操作数)

    然后、要执行添加、必须先从存储器读取数据、两次、然后再写回数据。 再循环三次。

    总共六个。