Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Oct 31, 2020 10:50 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 1140 posts ]  Go to page Previous 158 59 60 61 6276 Next
Author Message
PostPosted: Fri Oct 25, 2013 10:11 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Вопрос такой: как узнать номер слота текущего потока?
Судя по справке должен быть такой код
Code:
    mcall   9, win.procinfo, -1
    mov     eax, [win.procinfo + 4]
    and     eax, 0x0000FFFF
    mov     [win.sid], eax
    dph     [win.sid]

но данный код выводит совсем не номер слота, а постоянно разные числа (можно использовать как random функцию). В чем у меня ошибка?

Из спарвки:
Code:
    * +4: word: позиция окна потока в оконном стэке
    * +6: word: (не имеет отношения к запрошенному потоку)
      номер слота потока, окно которого находится в оконном стэке
      в позиции ecx


Top
   
PostPosted: Fri Oct 25, 2013 10:19 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1163
eAndrew, посмотри ф18.7

_________________
я лишь учусь


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

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Я имею в виду не активного, а "этого"/this/self.
Хотя такой вариант тоже подойдет, так как это это окно изначально активно. Спасибо.


Top
   
PostPosted: Fri Oct 25, 2013 10:28 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
eAndrew
Code:
   mcall   9,procinfo,-1
   mov   ecx,[ebx+30]   ; PID
   mcall   18,21
   mov   [active_process],eax   ; WINDOW SLOT

З.Ы. Использование ф.18.7 для запрашиваемого случая ненадежно.

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


Top
   
PostPosted: Fri Oct 25, 2013 10:31 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Mario_r4
Спасибо, то что нужно. Перечитал справку, понял ошибку.


Top
   
PostPosted: Mon Oct 28, 2013 7:15 pm 
Offline

Joined: Sun Oct 02, 2011 4:48 pm
Posts: 44
Я не могу понять как эта функция

Code:
char* strcpy(char* strDest,char* strSource)
{
        char* res;
        res=strDest;
        while(*strDest++ == strSource++) ;
        return res;     
}

которая лежит здесь http://websvn.kolibrios.org/filedetails ... 2Fstrcpy.c
может работать (в смысле правильно копировать) ?

Пробовал её использовать на Dev-C++ 4.9.9.2 но программа постоянно падает. Если у других работает то попытаюсь найти ошибку у себя. Или я просто не понимаю как она работает и как ей пользоваться


Top
   
PostPosted: Mon Oct 28, 2013 8:04 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Никак.
Должно быть while(*strDest++ == *strSource++);

У Страуструпа шикарный разбор этой строчки.


Top
   
PostPosted: Mon Oct 28, 2013 8:42 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
libc для tcc? do not want! С tcc можно даже newlib использовать, тащемто. Зачем извращаться?


Top
   
PostPosted: Tue Oct 29, 2013 2:02 pm 
Offline

Joined: Sun Oct 02, 2011 4:48 pm
Posts: 44
Serge wrote:
Никак.
Должно быть while(*strDest++ == *strSource++);

Никак второе - оператором сравнеия "==" копирование не получится. Всеравно спасибо за ответ.

SoUrcerer wrote:
libc для tcc? do not want! С tcc можно даже newlib использовать, тащемто. Зачем извращаться?

Не понял ни про "do not want!" ни про "Зачем извращаться?" -я не в курсе каких-то дел и мне это к сожелнию ни очем не говорит.

p.s.
Две ошибки выявилось и вроде как никого не интересует (в смысле так и осталось).


Top
   
PostPosted: Tue Oct 29, 2013 2:12 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
В теме про tcc я выкладывал рабочий tcc и сказал, что его можно отлично использовать с menuetlibc. На деле можно и с newlib. Зачем использовать убогую недолибу?


Top
   
PostPosted: Fri Nov 01, 2013 11:07 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
http://websvn.kolibrios.org/filedetails ... t#line-414
Quote:
Назначаемые новым потокам идентификаторы монотонно растут.
Ну и мне стало интересно.
Этот код:
Spoiler: Show
Code:
ORG 0
BITS 32
; --------------------------- ;
MENUET01       db 'MENUET01'
version        dd 1
program.start  dd START
program.end    dd END
program.memory dd END
program.stack  dd END
program.params dd 0
program.path   dd 0
; --------------------------- ;
START:
; thread.create
        mov    eax, 51
        mov    ebx, 1
        mov    ecx, THREAD
        xor    edx, edx
        int    64
        jmp    START
THREAD:
        or     eax, -1
        int    64
; --------------------------- ;
END:
И в некоторый момент
Spoiler: Show
Attachment:
1.PNG
1.PNG [ 40.16 KiB | Viewed 2437 times ]

svn4115, VirtualBox, Qemu
Attachment:
File comment: уже скомпилированный бинарник
out.kex [62 Bytes]
Downloaded 90 times


Top
   
PostPosted: Sat Nov 02, 2013 1:58 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Ну, так не нужно их в один стек все пихать - у тебя часть потоков тупо умирает, к тому же стек потока у тебя вообще с нулевым адресом - куда он должен уменьшаться по твоему? В несуществующую область памяти? В общем обычный указатель стека затирает код, а указатель стека потоков сразу вызывает PageFault. А CPU сортирует по слоту, а не по PID. Слот же берется первый свободный от начала.

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


Top
   
PostPosted: Sat Nov 02, 2013 11:32 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Mario_r4 wrote:
стек потока у тебя вообще с нулевым адресом - куда он должен уменьшаться по твоему? В несуществующую область памяти?
В моём примере стек вообще не используется.
Mario_r4 wrote:
указатель стека потоков сразу вызывает PageFault
И почему тогда это не произошло сразу же?


Top
   
PostPosted: Sat Nov 02, 2013 1:10 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
0CodErr wrote:
В моём примере стек вообще не используется.

O RLY?
0CodErr wrote:
И почему тогда это не произошло сразу же?

Потому что так захотел Ктулху.

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


Top
   
PostPosted: Sat Nov 02, 2013 1:27 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Mario_r4 wrote:
0CodErr писал(а):
В моём примере стек вообще не используется.

O RLY?
Покажи тогда, в каком месте это происходит.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1140 posts ]  Go to page Previous 158 59 60 61 6276 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 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