ZHCU820Y September 2004 – June 2021
编译器工具包括将 C/C++ 源语句插入到编译器的汇编语言输出中的功能。交叉列出功能可用于检查为每个 C 语句生成的汇编代码。交叉列出的行为有所不同,具体取决于是否使用了优化器以及指定了哪些选项。
调用交叉列出功能的最简单方法是使用 --c_src_interlist 选项。要在名为 function.c 的程序上编译和运行交叉列出功能,请输入:
cl430 --c_src_interlist function
--c_src_interlist 选项阻止编译器删除交叉列出的汇编语言输出文件。输出汇编文件 function.asm 被正常汇编。
在没有优化器的情况下调用交叉列出功能时,交叉列出将作为代码生成器与汇编器之间的单独通道运行。该功能读取汇编和 C/C++ 源文件,合并这些文件,然后将 C/C++ 语句作为注释写入汇编文件中。
有关将交叉列出功能与优化器一起使用的信息,请参阅Topic Link Label4.11。使用 --c_src_interlist 选项会导致性能和/或代码大小下降。
以下示例显示了一个典型的交叉列出的汇编文件。
;******************************************************************************
.compiler_opts --mem_model:code=flat --mem_model:data=flat --symdebug:none
; acp430 -@/var/tmp/TI764/AAAv0aGVG
.sect ".text"
.align 2
.clink
.global main
;-----------------------------------------------------------------------
; 3 | int main()
;-----------------------------------------------------------------------
;******************************************************************************
;* FUNCTION NAME: main *
;* *
;* Regs Modified : SP,SR,r11,r12,r13,r14,r15 *
;* Regs Used : SP,SR,r11,r12,r13,r14,r15 *
;* Local Frame Size : 2 Args + 0 Auto + 0 Save = 2 byte *
;******************************************************************************
main:
;* ---------------------------------------------------------------------------*
SUB.W #2,SP
;-----------------------------------------------------------------------
; 5 | printf("Hello, world\n");
;-----------------------------------------------------------------------
MOV.W #$C$SL1+0,0(SP) ; |5|
CALL #printf ; |5|
; |5|
;-----------------------------------------------------------------------
; 7 | return 0;
;-----------------------------------------------------------------------
MOV.W #0,r12 ; |7|
ADD.W #2,SP ; |7|
RET ; |7|
; |7|
;******************************************************************************
;* STRINGS *
;******************************************************************************
.sect ".const"
.align 2
$C$SL1: .string "Hello, world",10,0
;******************************************************************************
;* UNDEFINED EXTERNAL REFERENCES *
;******************************************************************************
.global printf