Не понимаю расширенный ассемблр в GCC

Тема в разделе "WASM.BEGINNERS", создана пользователем ajak, 26 июн 2010.

  1. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Помогите разобрать.
    Не понимаю что всё это значит, когда расширенный режим начинается

    void F(unsigned short * addres, unsigned long value, int count)
    {
    __asm__
    (
    "cld\n"
    "rep\n"
    "stosl\n"
    : "=c" (count), "=D" (value)
    : "c" (count >> 1), "a" (value), "D" (addres)
    : "memory"
    );
    }

    Как понимать вот это

    : "=c" (count), "=D" (value)
    : "c" (count >> 1), "a" (value), "D" (addres)
    : "memory" );
    Как будет для AT&T синтаксиса?

    __asm
    {
    cld
    rep
    stosl

    # : "=c" (count), "=D" (value)
    # : "c" (count >> 1), "a" (value), "D" (addres)
    # : "memory"
    }
     
  2. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    еслибы не __asm__ - я бы вообще неповерил что это асм...
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Это привязка регистров к параметрам и указание, какие регистры вообще используются и как. С помощью таких конструкций компилятору сообщается, каким именно макаром он должен передавать параметры. Но подробностей не скажу, я ГЦЦ для ИА-32 не использую.
     
  4. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    курить gcc-inline-asm.pdf
     
  5. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    ajak
    смысл примерно такой: (сорри, AT&T толком не помню, поэтому пусть лучше будет штеуд - во избежание)
    Код (Text):
    1.     mov     ecx, count
    2.     shr     ecx, 1
    3.     mov    eax, value
    4.     mov     edi, address
    5.     ; далее по тексту...
    прикол здесь в том, что оптимизатор может выбрасывать лишние пересылки, вычисляя в точках вызова значения параметров сразу в нужные регистры.
    подробнее - гугель в руки http://www.google.com.ua/search?hl=...q=0&aqi=g10&aql=&oq=gcc+inline+assem&gs_rfai=