Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jan 27, 2021 2:39 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 6 posts ] 
Author Message
PostPosted: Mon Jan 07, 2013 1:06 am 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 459
Маленькую заметку хочу сделать. В dll.inc в dll.Init перед lodsb полезно было б cld поставить. Надежней код получится.

CleverMouse: я выделила обсуждение в отдельную тему.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
PostPosted: Mon Jan 07, 2013 8:56 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1441
GerdtR
Есть договоренность, что все строковые команды в ядре должны крутиться только с инкрементом адреса.
исключений (насколько мне известно) нет.
Это соглашение экономит >100 байт ядерного кода на cld.


Top
   
PostPosted: Mon Jan 07, 2013 9:49 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 459
Ясно. Интересно, какие соглашения ещё есть и где прочитать?

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
PostPosted: Tue Jan 08, 2013 12:30 am 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1441
у Колибри есть своя Вики, кое-что там удалось систематизировать (но конечно не все)

1) читай тематические страницы форума. если ничего нет -
2) просматривай чат (я про cld узнал от diamondа - еще в старом чате)
3) читай код, там же всё написано как оно есть на самом деле :)
в init.inc есть красноречивый коммент
Code:
cld ;paranoya 

4) спроси Serga или CleverMouse
(из svn видно, что этот коммент добавил Serge в ревизии 581)


Top
   
PostPosted: Mon Jan 14, 2013 1:26 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1625
GerdtR, пока ты пишешь всю программу целиком один, ты можешь спокойно придумать любые соглашения, хоть считать, что флаг DF должен быть установлен всегда, кроме как на время тех операций, где он нужен сброшенным. Единственное - если это нигде не записать, то может испортиться карма от проклятий тех, кто будет потом ковыряться в коде. Когда программа использует какие-то части, написанные другими, на стыках уже нужны какие-нибудь общие соглашения - не столь важно, какие, важно, что они должны быть общими.
Достаточно полный обзор всего, что было и бывает, есть в http://www.agner.org/optimize/calling_conventions.pdf - я сразу предупреждаю, что список длинный. Менее подробно есть в http://msdn.microsoft.com/en-us/library/984x0h58.aspx , но поведение флага DF MS уже забила описывать, последний раз было где-то в документации к masm, http://techref.massmind.org/techref/lan ... asmc12.htm .
В 32-битной Windows традиционно используется соглашение stdcall, в 32-битных unix - cdecl:
* функции сохраняют регистры ebx, esi, edi, ebp, могут менять eax, edx, ecx;
* функции, возвращающие значение, делают это в eax или в паре edx:eax, если в один регистр не помещается;
* флаг DF должен быть сброшен на входе и будет сброшен на выходе;
* аргументы передаются через стек, в случае stdcall стек очищает функция командой ret N, в случае cdecl - вызывающий код.
Ядро гарантирует, что при запуске программы флаг DF сброшен, а при системных вызовах меняется состояние только тех флагов и регистров, которые указаны в документации на системный вызов. При использовании библиотек надо смотреть, что придумал автор библиотеки. При написании собственных библиотек лучше использовать stdcall.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Thu Jan 17, 2013 6:33 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 459
Ну я и использую stdcall(по крайней мере очень стараюсь:)). Просто я программировал только под Delphi и в досе на tasm. Мне всё это как-то не пригождалось и потому стандартов не знаю.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 6 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited