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.

[参考译文] MSP430FR5969:标识符之前的 RRC.w 指令操作码

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1316787/msp430fr5969-rrc-w-instruction-opcode-preceding-identifier

器件型号:MSP430FR5969

你好。 我将 MSP430FR5969与 CCS 11.1.0.00011配合使用、并具有该版本的默认编译器。 我使用小型内存和数据模型通过 CPUx 进行构建。 我注意到当查看单操作数指令时、它们似乎都有一个先前的标识符:000100–操作码–B/W–等等。 但是、rc.w 指令不需要、它反而是000000–操作码-B/W-等。 该指令是否专门作为一个字时出现这种预期行为? 如果是、这与具有先前标识符为0的扩展指令有何区别?

例如:

该指令: RRC.w R5

十六进制操作码为0x0055

和该指令: RRC.b R6

十六进制操作码为0x1046

我希望第一个指令 RRC.w R5具有操作码:0x1055

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

    0x0055是 rrcm.w #1、R5的编码。 一个中的六个...

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

    我同意0x0055的指令应该是什么、但当我运行此指令序列时:

    MOV.b #2、R4
    MOV.w #09999h、R5
    RRC.w R5  
    clrn ;清除负标志
    CMP R5, R5 ;触发零标志
    JMP 主页
    NOP

    RRC.w R5的编码实际上是0x0055

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

    以下是上述代码中的操作码/操作数的完整序列。 这摘自生成的 elf 输出文件。  

    操作码/操作数:0x4364

    操作码/操作数:0x4035

    操作码/操作数:0x9999

    操作码/操作数:0x0055

    操作码/操作数:0xc222

    操作码/操作数:0x9505

    操作码/操作数:0x3ff0

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

    您好!

    这个问题看起来像是编译器问题。  我要 将该线程更改为编译器组织、并从中找到一些帮助。  

    此致、

    现金豪

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

    您是否也对0xc222是 "BIC #4.SR"感到沮丧?

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

    不、这是预料之中的。 clrn 是使用 BIC 的仿真指令

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

    感谢现金!

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

    我是使用不同的编译器构建代码的、RRC.w 在操作码上的确有一个前缀1、所以我认为这是编译器的问题。   

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

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

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

    它们只是做同样事情的两种方法。 无论是谁编写编译器代码生成器、都可以选择其中一个。 也许使用 rrcm 会使事情更容易一些。 但也可能不是。 没关系。

    您看不到 rcm.b 生成,因为该编码不存在。 因此使用了 RRC.b。

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

    抱歉、不正确。 编译器专门使用 RRcm.w 作为 CPU 寄存器的 RRc、并使用 RRC.w 作为"目标"。 但仍然不解释编译器写入程序为什么选择使用扩展指令来执行不需要扩展的指令。  

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

    由于 RRCM 编码只允许一个寄存器目的、因此它没有被用于其它寻址模式就不足为奇了。 不过、仍然有很多可用的目标模式。

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

    我想,除非写编译器的人在我可能不会得到一个确切的答案为什么,所以我只是标记这是答案。 至少我很欣赏这个问题的思考要点!