请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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一样快?