Форум по операционной системе GNU/Linux и свободному программному обеспечению
Текущее время: 18 фев 2019, 07:13

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: inline assembler gcc
Непрочитанное сообщениеДобавлено: 22 дек 2011, 22:16 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Попалась мне ссылка по inline assembler компилятора GCC:
http://www.iakovlev.org/index.html?p=1483&m=1

В своё время (и не так давно последний раз) я искал ссылки по этому вопросу, и их не так легко найти.

Я не знаю, кто делал этот перевод, но это лучшее место, что я находил по этому вопросу.

Цитата:
__asm__ __volatile__( "decl %0; sete %1"
: "=m" (my_var), "=q" (cond)
: "m" (my_var)
: "memory"
);

- как говорила старая еврейка: "наконец это пгосто красиво" :lol:


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 28 дек 2011, 02:49 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Достаточно трудно найти внятные источники по inline assembler gcc

Вот ещё 2:

1. http://asm.sourceforge.net//articles/linasm.html
Using Assembly Language in Linux.
by Phillip

Цитата:
Last updated: Monday 8th January 2001


2. http://www.delorie.com/djgpp/doc/brenna ... djgpp.html
Brennan's Guide to Inline Assembly
Цитата:
Copyright © 1996 Brennan Underwood.


Но все только перепевают ... кое-какие отдельные примеры.
Внятного понимания что такое констрэйнты? как они образуются? и в каком порядке нумеруются? и почему вот здесь
Код:
asm ("movl %eax, %ebxs");

регистр записывается с одним % ?
Код:
asm ("movl %%eax, %%ebx" : "=b"(myval));

а вот здесь исключительно с двумя %% ?

Это всё интересующимся предстоит выяснять на собственных догадках :!: :twisted:

А это тот синтаксис, на котором написана критическая часть Linux - интерфейс к системным вызовам, и интерфейс этот прописан и отличается для каждой из десятка платформ, поддерживаемых Linux :!:

P.S. И всё таки самые внятные догадки ;-) на эти вопросы даёт книга, в русском издании она выглядит так:
А. Гриффитс, «GCC. Полное руководство. Platinum Edition», Пер. с англ., М.: «ДиаСофт», 2004.
... в которой 5 стр. посвящены синтаксису инлайн ассемблера.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 29 дек 2011, 21:20 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Очень хорошая публикация по сравнению со всеми показанными выше + со всеми что я встречал:
http://opennet.ru/base/dev/gccasm.txt.html

Здесь выжимки не только из полных руководств по GCC, и этого мало... + здесь же некоторые вещи (константы и др.), вытащенные из заголовочных и исходных файлов самого компилятора GCC :!: ... которые, как утверждает автор, забыли вписать в документацию ;-)

Когда начинают разбираться примеры подобные вот следующему:
Код:
#define _set_tssldt_desc(n,addr,limit,type) \
__asm__ __volatile__ ("movw %3,0(%2)\n\t" \
        "movw %%ax,2(%2)\n\t" \
        "rorl $16,%%eax\n\t" \
        "movb %%al,4(%2)\n\t" \
        "movb %4,5(%2)\n\t" \
        "movb $0,6(%2)\n\t" \
        "movb %%ah,7(%2)\n\t" \
        "rorl $16,%%eax" \
        : "=m"(*(n)) : "a" (addr), "r"(n), "ri"(limit), "i"(type))

- начинаешь проникаться :lol:


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 30 дек 2011, 02:37 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Olej писал(а):
Достаточно трудно найти внятные источники по inline assembler gcc


http://www.ibm.com/developerworks/libra ... index.html
Inline assembly for x86 in Linux
от IBM

А это уже совсем интересно - обсуждения инлайн ассемблирования для других платформ, и, в частности, для embedded архитектур:

- это ARM
http://www.ethernut.de/en/documents/arm-inline-asm.html
ARM GCC Inline Assembler Cookbook

http://balau82.wordpress.com/2011/05/17 ... ns-in-gcc/
Inline assembly instructions in GCC

- это PPC
http://www.wiibrew.org/wiki/Inline_Assembler
Inline Assembler

И что любопытно, все эти публикации конца 2010 - 2011г.г. - вот оно, веяние времени: платформы отличные от Intel x86 ;-)


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 30 дек 2011, 02:51 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Olej писал(а):
Здесь выжимки не только из полных руководств по GCC


А вот и тот единственный первоисточник, в документации по GCC, в том разделе, который перечисляет все отличия GCC от стандартов C:
http://gcc.gnu.org/onlinedocs/gcc-4.4.1 ... tended-Asm
5.37 Assembler Instructions with C Expression Operands
... эта и ещё пару там следующих там главок ... о констрейтах...
5.38 Constraints for asm Operands
5.39 Controlling Names Used in Assembler Code
5.40 Variables in Specified Registers

Все остальные публикации - это только пересказ этого ну очень краткого документа ... пересказ, конечно, в хороших случаях, основанный на экспериментах, коде, проверке непонятных мест (а там почти все места непонятные ;-) )...

P.S. и там же, в глубине, я обнаружил уникальную страницу, по объёму большую, чем все остальные названные в сумме :-o :
5.38.4 Constraints for Particular Machines
- объяснения констрейтов, частных для полтора десятка платформ в GCC.
Например, без этой информации смотреть код ядра Linux для других архитектур (x86 просто ещё хоть кой-как описана) просто пустой номер!

P.P.S. Ссылки по этой документации даны по достаточно свежей версии GCC 4.1.1.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 30 дек 2011, 03:23 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Olej писал(а):
Но все только перепевают ... кое-какие отдельные примеры.
Внятного понимания что такое констрэйнты?


В содержательном плане тех последних ссылок, что я приводил - достаточно.
ПО смыслу понятно, но решил я глянуть, что дословно означает, а то все русскоязычные тексты: "констрейнты, констрейнты"...

- большинство словарей даёт: принуждение, ограничивающие условие... но это всё как-то горбато :-(

- а вот просто термин из языка Ada:
Цитата:
Перевод с русского на английский в словаре по ВТ и программированию
уточнение
(в языке Ада) constraint,

Вот это оно и есть: уточнение


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 31 дек 2011, 04:37 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Olej писал(а):
и почему вот здесь
Код:
asm ("movl %eax, %ebxs");

регистр записывается с одним % ?
Код:
asm ("movl %%eax, %%ebx" : "=b"(myval));

а вот здесь исключительно с двумя %% ?


И это действительно так!
Когда асемблерная вставка записывается без параметров (констрейтов), то вполне проглатывает запись с %, в противном случае - изволь %%.

Сегодня писал (в модуле ядра - 0-е кольцо защиты, супервизор!) подмену системного вызова в таблице sys_call_table (вирусописатели - ау!? :lol: ), так вот таблицу они оказывается, с некоторых пор разместили в сегменте read-only ... и попытка записи нового адреса обработчика (sys_write, например) вызывает ошибку обращения ... Ooops :!:

Но этом делу легко помочь :lol:
- перед записью снимаем защиту по записи в read-only (16-й бит управляющего регистра процессора CR0)
Код:
//код выключения защиты записи:
#define rw_enable()              \
asm( "pushl %eax \n"             \
     "movl %cr0, %eax \n"        \
     "andl $0xfffeffff, %eax \n" \
     "movl %eax, %cr0 \n"        \
     "popl %eax" );

- а после успешной записи восстанавливаем защиту ... чтоб другие не писали :lol:
Код:
//код включения защиты записи:
#define rw_disable()             \
asm( "pushl %eax \n"             \
     "movl %cr0, %eax \n"        \
     "orl $0x00010000, %eax \n"  \
     "movl %eax, %cr0 \n"        \
     "popl %eax" );

Всё замечательно подменяется!

P.S. и регистры то (и какие! ;-) ) с % !


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 28 фев 2012, 10:08 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
Olej писал(а):
Достаточно трудно найти внятные источники по inline assembler gcc


ВикиУчебник на русском языке:
Ассемблер в Linux для программистов C
Достаточно объёмный и содержательный оригинальный текст по синтаксису AT&T.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 28 фев 2012, 17:54 
Не в сети
Писатель

Зарегистрирован: 23 фев 2012, 14:41
Сообщения: 107
Откуда: Киев
Я тоже попытаюсь пополнить коллекцию на тему Assembler в Linux ( Inline Assembler в частности):
Professional Assembly Language Richard Blum
Изображение
http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764579010.html

Inline Assembler там уделено целую главу (почти 26 страниц), хотя книга замечательная и без того. Вобщем из серии "MUST TO HAVE"!

PS:
http://cs.karelia.ru/~chistyak/2011/docs/Blum%20R.-Professional-assembly-language-%5Ben.Wrox.2005.577p%5D.pdf


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: inline assembler gcc
Непрочитанное сообщениеДобавлено: 28 фев 2012, 18:45 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11512
Откуда: Харьков
bose писал(а):
Я тоже попытаюсь пополнить коллекцию на тему Assembler в Linux ( Inline Assembler в частности):
Professional Assembly Language Richard Blum
Изображение
http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764579010.html

Inline Assembler там уделено целую главу (почти 26 страниц), хотя книга замечательная и без того. Вобщем из серии "MUST TO HAVE"!


Очень интересно...
А оттуда же по ссылке - архив кодов примеров:
http://media.wiley.com/product_ancillar ... D/code.tgz

bose писал(а):

... а вот это как-то мучительно медленно :cry:


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.097s | 17 Queries | GZIP : On ]