Генерация ассемблерного кода GCC

Тема в разделе "WASM.RESEARCH", создана пользователем P_Aleksandrov, 17 май 2009.

  1. P_Aleksandrov

    P_Aleksandrov New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    1
    Можно ли сделать, чтобы GCC (c++) генерировал ассемблерный код с комментариями вида:
    # i ++;
    inc %rax
    # function();
    call function
    ?
     
  2. herm1t

    herm1t New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2004
    Сообщения:
    22
    -g -Wa,-ahls
     
  3. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    -fverbose-asm

    Зачем -g непонятно. Про остальное не совсем понял. Ты ведь опции ассемблеру передавать пытаешься? Но ему ничего не надо передавать, ибо он даже не запустится, если gcc вызывается для компиляци в asm.
     
  4. herm1t

    herm1t New Member

    Публикаций:
    0
    Регистрация:
    1 янв 2004
    Сообщения:
    22
    Код (Text):
    1. .L17:
    2.         .loc 1 37 0
    3.         movl    -12(%ebp), %eax # dyn, dyn
    4.         movl    (%eax), %eax    # <variable>.d_tag, D.2531
    5.         cmpl    $14, %eax       #, D.2531
    6.         jne     .L18    #,
    7.         .loc 1 38 0
    8.         movl    -12(%ebp), %eax # dyn, dyn
    9.         movl    4(%eax), %eax   # <variable>.d_un.d_val, <variable>.d_un.d_val
    10.         movl    %eax, -8(%ebp)  # <variable>.d_un.d_val, name
    Как-то оно не очень вразумительно получается... (gcc version 4.1.2)

    (-g) откуда взять собственно "исходник" для комментированного листинга? (-Wa) - man as
    получается где-то так:
    Код (Text):
    1.  120 00d1 744E                  je      .L14
    2.   36:findlibc-bf.c ****                 while (dyn->d_tag != DT_NULL) {
    3.  121                            .loc 1 36 0
    4.  122 00d3 EB2A                  jmp     .L16
    5.  123                    .L17:
    6.   37:findlibc-bf.c ****                         if (dyn->d_tag == DT_SONAME)
    7.  124                            .loc 1 37 0
    8.  125 00d5 8B45F4                movl    -12(%ebp), %eax
    9.  126 00d8 8B00                  movl    (%eax), %eax
    10.  127 00da 83F80E                cmpl    $14, %eax
    11.  128 00dd 7509                  jne     .L18
    12.   38:findlibc-bf.c ****                                 name = dyn->d_un.d_val;
    13.  129                            .loc 1 38 0
    14.  130 00df 8B45F4                movl    -12(%ebp), %eax
    15.  131 00e2 8B4004                movl    4(%eax), %eax
    16.  132 00e5 8945F8                movl    %eax, -8(%ebp)
    17.  133                    .L18:
    18.   39:findlibc-bf.c ****                         if (dyn->d_tag == DT_STRTAB)
    19.  134                            .loc 1 39 0
    20.  135 00e8 8B45F4                movl    -12(%ebp), %eax
    21.  136 00eb 8B00                  movl    (%eax), %eax