Помогите разобрать. Не понимаю что всё это значит, когда расширенный режим начинается 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" }
Это привязка регистров к параметрам и указание, какие регистры вообще используются и как. С помощью таких конструкций компилятору сообщается, каким именно макаром он должен передавать параметры. Но подробностей не скажу, я ГЦЦ для ИА-32 не использую.
ajak смысл примерно такой: (сорри, AT&T толком не помню, поэтому пусть лучше будет штеуд - во избежание) Код (Text): mov ecx, count shr ecx, 1 mov eax, value mov edi, address ; далее по тексту... прикол здесь в том, что оптимизатор может выбрасывать лишние пересылки, вычисляя в точках вызова значения параметров сразу в нужные регистры. подробнее - гугель в руки http://www.google.com.ua/search?hl=...q=0&aqi=g10&aql=&oq=gcc+inline+assem&gs_rfai=