Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Nov 15, 2019 11:35 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 154 55 56 57 5875 Next
Author Message
PostPosted: Fri Jun 21, 2013 10:53 pm 
Online
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Мне очень нужна помощь. Дело в том, что при использовании потоков у меня всегда были проблемы, но иногда они не возникали, если ничего не трогать :) Сейчас вопрос стал ребром в новой версии Eolite:
1. http://imgur.com/sy9Btkm по этим адресам вылет в ядре или в приложении?
2. что это за странная отрисовка - я понимаю что-то одно бы глючило, но в данном случае проблема вообще с разными строками. После нескольких вызовов меню (но как минимум двух), основная прога падает, не меню. Что странно. Какие могут быть мысли?


Attachments:
iBqVE84.png
iBqVE84.png [ 63.51 KiB | Viewed 1730 times ]

_________________
Через тернии к звездам
Top
   
PostPosted: Sat Jun 22, 2013 1:45 am 
Online
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Огромное спасибо dunkaist - баг исправлен!

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


Top
   
PostPosted: Wed Jul 03, 2013 3:04 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
GerdtR wrote:
Вопрос: как вызвать функцию, если известен её адрес? Писал так: call 4F3h, но ассемблер написал, что неверное использование символа.

В обычных бинарниках такое должно работать. В COFF-файлах такая команда невозможна из-за устройства машинного кода: call N кодирует свой операнд относительно начала следующей инструкции, то есть в итоговом машинном коде должно быть N - (адрес следующей инструкции) = (что-то) - (адрес загрузки COFF); COFF умеет кодировать только вещи типа (что-то) + (адрес загрузки COFF). Как следствие, нужно использовать одну из форм с абсолютными адресами: либо mov (регистр), N / call (регистр), либо call [variable], где variable - отдельная переменная вида variable dd N.

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


Top
   
PostPosted: Wed Jul 03, 2013 11:21 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Ну я использовал mov eax,proc call eax. proc - это константа, и так экономится место в таблице релокаций. А eax всё равно почти наверняка измениться.

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


Top
   
PostPosted: Sat Jul 20, 2013 9:01 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Это из ZKEY.asm:
Code:
use32
   org   0x0

   db   'MENUET00'   ; 8 byte id
   dd   38      ; required os
   dd   STARTAPP   ; program start
   dd   I_END      ; program image size
   dd   0x100000   ; required amount of memory
   dd   0x00000000   ; reserved=no extended header

include "ASPAPI.INC"

N_KEYCOLOR equ 0x00677889 ; Normal button color
C_KEYCOLOR equ 0x00344556 ; Control button color
L_KEYCOLOR equ 0x00258778 ; Lock button color
TEXTCOLOR  equ 0x00FFFFFF ; Button caption color


STARTAPP:
   mov   ecx, 1      ; to send scancodes.
   call   set_keyboard_mode
А что будет в esp? Я думал, в этом случае надо самому его настраивать, например:
Code:
mov esp, stack_top


Top
   
PostPosted: Sun Jul 21, 2013 1:15 am 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Zkey не нужны были дополнительные параметры, поэтому я использовал старую версию заголовка.
esp вручную устанавливать не нужно.
Смотри taskman.inc


Top
   
PostPosted: Fri Aug 02, 2013 12:08 am 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Помогите разобраться с форматом .ico . Итак добрался до каталога информации об изображении(у меня только одна запись с иконкой 32x32, 32бит). Читаю поле "размер растра" и вижу 10A8h. Но ведь должно быть 32*32*4=1000h . Т.е. есть какое-то поле(и очень похоже, что перед растром) размером 0A8h. Пробовал 32x32, 24бит и там тоже было это поле. Создавал иконки в Gimp. Что это за поле? Как часто встречается? И вообще есть где-нибудь нормальное описание формата? Ничего кроме Википедии не нашёл.


Attachments:
qwe.png
qwe.png [ 14.99 KiB | Viewed 1465 times ]

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Top
   
PostPosted: Fri Aug 02, 2013 4:15 pm 
Offline
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 435
Посмотри, как сделано в libimg. А лучше просто используй libimg.


Top
   
PostPosted: Tue Aug 06, 2013 3:58 pm 
Offline

Joined: Sun Feb 18, 2007 8:34 pm
Posts: 158
BITMAPINFOHEADER - 28h байт;
палитры нет;
XOR-маска - 32x32x4 байт;
AND-маска - 32x32/8 байт.

Инфа гуглится на раз.


Top
   
PostPosted: Sun Sep 08, 2013 4:36 pm 
Online
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Как можно этот код записать короче?
Code:
mov ecx, ebx
sub ecx, WIN_H
shl ecx, 16
add ecx, WIN_H

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


Top
   
PostPosted: Sun Sep 08, 2013 5:35 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
И так хорошо.


Top
   
PostPosted: Sun Sep 08, 2013 8:26 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Если есть свободные регистры, например EAX, то можно так:
Code:
mov eax, WIN_H
mov ecx, ebx
sub ecx, eax
shl ecx, 16
add ecx, eax

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

Кстати вероятно таки правильно [WIN_H], ты же не адресом работаешь, а с данными. Хотя если WIN_H заменяется постоянным значением, то квадратные скобки не нужны, но замечание насчет использования регистра в любом случае актуально.

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


Top
   
PostPosted: Sun Sep 08, 2013 10:30 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Leency, если WIN_H — константа, то:
Code:
WIN_H equ 3333
; ........................................
        mov    ecx, ebx
        shl    ecx, 16
        sub    ecx, (WIN_H << 16) - WIN_H


Top
   
PostPosted: Fri Sep 13, 2013 6:10 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
При подключении какой либо библиотеки, необходимо выделять в программе дополнительно память в размере этой библиотеки?

_________________
я лишь учусь


Top
   
PostPosted: Fri Sep 13, 2013 10:02 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker wrote:
При подключении какой либо библиотеки, необходимо выделять в программе дополнительно память в размере этой библиотеки?

В обязательном порядке под сам код библиотеки не нужно - система сама все решит, на то она и Операционная Система. А вот под данные либо статически выделяется, либо динамически - все зависит от ситуации и предпочтений самого программиста. Смотри API библиотеки.

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1119 posts ]  Go to page Previous 154 55 56 57 5875 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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