Что означает "#xx" в ассемблере, скопированном с помощью icc? - PullRequest
4 голосов
/ 21 сентября 2019

Я скомпилирую простой код с помощью компилятора intel icc и заметил, что в конце каждой строки есть несколько цифрЯ хочу знать значение.

Точно так же, как #3.12 в следующем коде.

#include <stdio.h>

int main() {
    int a = 3, b;
    scanf("%d", &b);
    a = a + b;
    printf("Hello, world! I am %d\n", a);
    return 0;
}
...
main:
..B1.1:                         # Preds ..B1.0
                                # Execution count [1.00e+00]
..L1:
                                                          #3.12
        pushl     %ebp                                          #3.12
        movl      %esp, %ebp                                    #3.12
        andl      $-128, %esp                                   #3.12
...

Ответы [ 2 ]

2 голосов
/ 21 сентября 2019

Это действительно строка и столбец соответствующего исходного кода.# 3.12 - это открытие { основной функции, что имеет смысл, поскольку показанные операторы соответствуют началу функции.

Если вы вставите дополнительный пробел перед {, вы увидите, чтовыход изменяется на #3.13;аналогично 3 изменяется на 4, если вы вставляете пустую строку перед функцией main().

0 голосов
/ 21 сентября 2019

Это процедура подготовки запуска функции, также называемая заголовком функции.Здесь мы скрываем адрес возврата в стеке и выделяем пустое место в стеке для работы функции.Обратите внимание, в конце идет обратный процесс.Вот пример того же самого из другого компилятора:

        push    ebp
        mov     ebp, esp
        sub     esp, 8
        ...
        mov     esp, ebp
        pop     ebp
        ret     0
...