您的位置:首页 > 编程语言

IAR编译器生成Cortex M3汇编代码的相关问题

2016-05-20 11:11 495 查看
  IAR如何查看C源代码生成的汇编指令:options->C/C++ Compiler ->List->Output list file & Output assembler file,生成的文件在工程目录List文件夹下。

  IAR生成的汇编文件中前几行就说明了 Cpu mode = thumb,但是Cortex M3的指令集是thumb-2指令集,thumb指令集是16位指令集,而thumb-2是16、32位混合指令集。那么就有一个疑问,IAR生成的汇编代码到底是thumb还是thumb-2的,如果是thumb的,那么Cortex M3引入的高效的thumb-2指令岂不是白费了。上述的思考是建立在对知识没有彻底了解之前,或许有漏洞,主要还是引出下面的实验结果。

  实验主要为解疑:

  0xF081 0x0168 EOR R1,R1,#0x68 这句到底是一个32位指令,还是两个16位指令,前两个16进制数是机器码,要是合着一起用32位写也就没歧义了。

  测试用的源代码:

  下面是生成的汇编代码:

  从汇编可以看出来,加法只需一个16位指令,异或需要32位指令(两个16位)。其他的指令都是类似或者一样的。加法的循环需要循环执行的指令有8条,时间就是8T。如果异或需要两个周期那么其循环的指令时间是14T,如果异或需要一个周期,循环指令就是11T。

  下面是逻辑分析仪的截图



分别是2.71s和3.75s。那么可以确定虽然写了两个16位机器码,但是写在一行就是一个32位ARM指令。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: