Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Dec 14, 2019 12:11 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 157 58 59 60 6175 Next
Author Message
PostPosted: Thu Oct 10, 2013 4:18 pm 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
eAndrew - а можно узнать что такое dpd.
Code:
mov   eax, [__var]
dpd    [eax]

Dual Purpose Device ??? или это что-то из ассемблера?


Top
   
PostPosted: Thu Oct 10, 2013 4:19 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
выводит число в консоль.
debug.inc
Code:
macro debug_print_dec arg
{
   pushf
   pushad
   if ~arg eq eax
     mov  eax,arg
   end if
   call debug_outdec
   popad
   popf
}
 
dpd fix debug_print_dec


Top
   
PostPosted: Thu Oct 10, 2013 4:41 pm 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
Quote:
Как мне быстро узнать значение var, используя __var?

а разве так не должно работать?
Code:
dpd    [__var]


Top
   
PostPosted: Thu Oct 10, 2013 4:44 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
[__var] вернет адрес на _var, а нужно еще [_var], что бы получить var, тоесть [[__var]]. В __var храниться адрес _var, а уже в нем хранится адрес на var, в котором и храниться значение. Немного криво назвал переменные, сам путаюсь


Top
   
PostPosted: Thu Oct 10, 2013 4:55 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Сделай обертку и все.


Top
   
PostPosted: Thu Oct 10, 2013 4:57 pm 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
Согласен с Asper, только обертка того кода что ты используешь позволит сделать эту запись красивее, но надо ли?


Top
   
PostPosted: Thu Oct 10, 2013 5:12 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Дело было даже не в красоте кода, ну ладно, спасибо всем.


Top
   
PostPosted: Fri Oct 11, 2013 9:54 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
ПРОБЛЕМА РЕШЕНА
И снова я.
Программа на фасме, размером в 3кб(бинарник) и больше не хочет запускаться. А еолайт даже пишет почему: "Error #31 File is not executable".
А мне позарез нужно запихнуть туда 7 кб.
Самое странное - код успешно компилируется, создаётся бинарник, а вот запускаться не хочет. Никаких ошибок в BOARD не пишет (не в user, не в kernel).
Прилагаю рабочий код, но если в этом коде убрать ";" у любой строки в конце типа ' file "icons/..." '. Как исправить или как увеличить допустимый размер бинарника?


Attachments:
@notify - cur.rar [8.51 KiB]
Downloaded 44 times
@notify - cur.7z [6.25 KiB]
Downloaded 46 times
Top
   
PostPosted: Fri Oct 11, 2013 10:16 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
eAndrew wrote:
Как исправить или как увеличить допустимый размер бинарника?

Исправить заголовок: сейчас объём выделяемой памяти 0x1000 байт, чего не хватает даже для загрузки бинарника. Должно быть что-то вроде
Code:
db 'MENUET01'
dd 0x01, __START, __END, __MEMORY, __MEMORY, ...
...
_START:
...
; инициализированные данные
db 0
__END: ; эта метка должна быть сразу после всех инициализированных данных
; неинициализированные данные
...
; резервируем место для стека; помним, что невыровненный стек - сильный удар по производительности
align 4
rb 1024 ; пока нет сложных цепочек вызовов, 1 Кб должно хватать
__MEMORY:

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


Top
   
PostPosted: Fri Oct 11, 2013 10:19 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Quote:
; резервируем место для стека; помним, что невыровненный стек - сильный удар по производительности
align 4

Спасибо, буду знать.


Top
   
PostPosted: Thu Oct 17, 2013 7:56 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Есть проблема и я не понимаю в чём дело. Уже голову сломал:
нашёл punk_joker wrote:
1. запускаем Eolite, открываем окно "О Eolite"
2. жмём на ссылку, открывается htmlv
3. закрываем htmlv
4. перемещаем окно "О Eolite", окно вылетает (крэшится)

_________________
Через тернии к звездам


Top
   
PostPosted: Thu Oct 17, 2013 11:50 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Leency wrote:
Есть проблема и я не понимаю в чём дело. Уже голову сломал:

Вангую что проблема в том, что ты не понимаешь Как работает стек?

Поскольку с ассемблером у тебя хоть и лучше, но все таки тяжело, то подсказка:
Quote:
При занесении данных вершина стека перемещается к меньшему адресу

А у тебя последний поросенок остался без титьки:
Spoiler: Show
Quote:
case 10: //F10
RunProgram(EDITOR_PATH, abspath("Eolite.ini"));
break;
}
}


stop:

char about_stak[512];
char menu_stak[512];
char open_with_stak[512];
char copy_stak[4096];


Т.е. указатели на начало области стоят, а нужно их на конец области ставить. В твоем случае в char copy_stak[4096] вообще без всякой пользы пропадает 4 Кб ОЗУ. Не то чтобы они не нужны, но они ну совсем никак не используются.

И это при том, что я в С-- не в зуб ногой. :lol:

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Fri Oct 18, 2013 12:08 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Спасибо за ссылку. Я действительно не понимаю. Сейчас буду читать.

Spoiler: Show
Вообще нормальная книга по асму у меня в плане прочтения, но к сожалению после
- книги по HTML на 760 страниц :), которую я сейчас читаю
- книги по сертификации тестировщиков
- книги по экстремальному программированию
+ вот тут уже будет ассмеблер и затем книга по строению ОС.

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Oct 18, 2013 12:36 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
Прочитал. Т.е. правильно писать не
CreateThread(#about_dialog,#about_stak);
а
CreateThread(#about_dialog,#about_stak+512); //512 - размер стека
?

Также, если по-простому, то размер стека определяет максимальное количество push'ов без pop'ов в программе? :)

_________________
Через тернии к звездам


Top
   
PostPosted: Fri Oct 18, 2013 1:02 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Leency wrote:
Прочитал. Т.е. правильно писать не
CreateThread(#about_dialog,#about_stak);
а
CreateThread(#about_dialog,#about_stak+512); //512 - размер стека
?

Да.
Spoiler: Show
Ответ в стиле нашего Анонимного Анонимуса. :lol:

Но теоретически лучше, 512-4, чтобы наверняка не попасть на чужую сиську.
Spoiler: Show
Хотя сам я лентяй и так не делаю, хотя зря я так не делаю.

Leency wrote:
Также, если по-простому, то размер стека определяет максимальное количество push'ов без pop'ов в программе? :)

Нет.

Если стек не используется для хранения дополнительных данных (а компиляторы ЯВУ часто любят делать ESP - X dword и запихивать свои данные в стек, например локальные переменные и возможно массивы), то максимальная вложенность push, которая присутствует в коде. Еще push'и разные бывают, к примеру pusha или pushad, которые ловким движением отправляют содержимое нескольких регистров в стек. В общем лучше перебдеть со стеком, чем недобдеть - 640 Кб 4 Кб обычно достаточно, экспериментальным путем можно уменьшить размер. Стеки дополнительных потоков это абсолютно такие же стеки как и стек основного потока, который их породил.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 157 58 59 60 6175 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 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:  
cron
Powered by phpBB® Forum Software © phpBB Limited