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.

[参考译文] MSP430FR6989:CMP 与 R2和 R3、而不是#0

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/957700/msp430fr6989-cmp-with-r2-and-r3-instead-of-0

器件型号:MSP430FR6989

您好!  

我在查看一些代码的反汇编、以了解我将获得哪些性能优势。  

我查看的代码是一个 while 循环。 很多人说、与0相比、速度比数字快。 但是、在 MSP430系列用户指南中、它指出了寄存器之间的比较实际上比1个周期快。  

代码如下:  

int while 测试仪(int num、int num2){
while (num!= 0){
num2 = func (num);//随机函数、因此 while 循环不会得到优化
num --;
}
返回数字2;
} 

在反汇编过程中(感谢编译器资源管理器):  

while 测试仪:
PUSHM.W #2、R10
MOV.W R12、R10
CMP.W #0、R12{JEQ .L4
MOV.W #func、R9.L3
:
MOV.W R10、R12
调用 R9
ADD.W #-1、R10
CMP.W #0、R10{JNE .L3
.L1:
POPM.W #2、R10
RET
L4:
MOV.W R13、R12
BR #.L1 

使用 MSP430-gcc v 6.2.1编译。  

我很惊讶地看到了这条指令  

CMP.W #0、R10

而不是像以下那样:

CMP.W R3、R10 


使用常数发生器寄存器(我想它这样给出0)来创建更快的代码。 没有这样做有什么原因吗? CMP #0是否与 CMP R2/R3一样快?

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

    我希望汇编器使用常数发生器、反汇编器只是为您解释 A/Rsrc 字段。

    实际生成了哪些位?

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

    是的。 我使用了另一个反汇编代码、这为我提供了以下内容:  

    CMP #0、R10;R3 AS = 0