ICC 程序集输出中的所有这些数字是啥意思?

Posted

技术标签:

【中文标题】ICC 程序集输出中的所有这些数字是啥意思?【英文标题】:What do all those numbers in ICC assembly output mean?ICC 程序集输出中的所有这些数字是什么意思? 【发布时间】:2015-03-06 19:06:33 【问题描述】:

使用 ICC 编译时,每条指令后面都是 2 个点分隔的数字,前缀为井号。这是什么意思?

For example:

L__routine_start__Z12testFunctionPii_0:
testFunction(int*, int):
        push      rbp                                           #1.42
        mov       rbp, rsp                                      #1.42
        sub       rsp, 32                                       #1.42
        mov       QWORD PTR [-24+rbp], rdi                      #1.42
        mov       DWORD PTR [-16+rbp], esi                      #1.42
        mov       DWORD PTR [-32+rbp], 0                        #2.11
        mov       DWORD PTR [-28+rbp], 0                        #3.14
..B1.2:                         # Preds ..B1.3 ..B1.1
        mov       eax, DWORD PTR [-28+rbp]                      #3.19
        mov       edx, DWORD PTR [-16+rbp]                      #3.23
        cmp       eax, edx                                      #3.23
        jge       ..B1.4        # Prob 50%                      #3.23
...

【问题讨论】:

点前的数字似乎是源行号。井号当然是注释分隔符,所以汇编器会忽略这些东西,仅供参考。 ...调试器的信息,我猜。 【参考方案1】:

这是一个注释,包含源代码的行和列信息,因此您可以按照说明的来源进行操作。根据优化级别和 out-of-order execution 等功能,这些行不能按自然顺序排列。

【讨论】:

以上是关于ICC 程序集输出中的所有这些数字是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

sql查询里面xtype='u'是啥意思?

在C#中internal关键字是啥意思?

C# 或 .NET 中的程序集到底是啥?

使用星号时是啥导致程序集版本增加?

asm指令是啥意思

HTML中target属性是啥意思