ZHCU876Z July 2001 – October 2023 SM320F28335-EP
编译器工具包括将 C/C++ 源语句插入到编译器的汇编语言输出中的功能。交叉列出功能可用于检查为每个 C 语句生成的汇编代码。交叉列出的行为有所不同,具体取决于是否使用了优化器以及指定了哪些选项。
调用交叉列出功能的最简单方法是使用 --c_src_interlist 选项。要在名为 function.c 的程序上编译和运行交叉列出功能,请输入:
cl2000 --c_src_interlist function
--c_src_interlist 选项阻止编译器删除交叉列出的汇编语言输出文件。输出汇编文件 function.asm 被正常汇编。
在没有优化器的情况下调用交叉列出功能时,交叉列出将作为代码生成器与汇编器之间的单独通道运行。该功能读取汇编和 C/C++ 源文件,合并这些文件,然后将 C/C++ 语句作为注释写入汇编文件中。
有关将交叉列出功能与优化器一起使用的信息,请参阅节 3.10。使用 --c_src_interlist 选项会导致性能和/或代码大小下降。
以下示例显示了一个典型的交叉列出的汇编文件。
;----------------------------------------------------------------------
; 1 | int main()
;----------------------------------------------------------------------
;***************************************************************
;* FNAME: _main FR SIZE: 0 *
;* *
;* FUNCTION ENVIRONMENT *
;* *
;* FUNCTION PROPERTIES *
;* 0 Parameter, 0 Auto, 0 SOE *
;***************************************************************
_main:
;----------------------------------------------------------------------
; 3 | printf("Hello World\n");
;----------------------------------------------------------------------
MOVL XAR4,#SL1 ; |3|
LCR #_printf ; |3|
; call occurs [#_printf] ; |3|
;----------------------------------------------------------------------
; 4 | return 0;
;----------------------------------------------------------------------
;***************************************************************
;* STRINGS *
;***************************************************************
.sect ".econst"
SL1: .string "Hello World",10,0
;***************************************************************
;* UNDEFINED EXTERNAL REFERENCES *
;***************************************************************
.global _printf