Мне очень нужна помощь. Дело в том, что при использовании потоков у меня всегда были проблемы, но иногда они не возникали, если ничего не трогать Сейчас вопрос стал ребром в новой версии Eolite:
1. http://imgur.com/sy9Btkm по этим адресам вылет в ядре или в приложении?
2. что это за странная отрисовка - я понимаю что-то одно бы глючило, но в данном случае проблема вообще с разными строками. После нескольких вызовов меню (но как минимум двух), основная прога падает, не меню. Что странно. Какие могут быть мысли?
Помогите новичку
-
- Attachments
-
-
iBqVE84.png (63.51 KiB)Viewed 5357 times
-
Из хаоса в космос
Огромное спасибо dunkaist - баг исправлен!
Из хаоса в космос
В обычных бинарниках такое должно работать. В COFF-файлах такая команда невозможна из-за устройства машинного кода: call N кодирует свой операнд относительно начала следующей инструкции, то есть в итоговом машинном коде должно быть N - (адрес следующей инструкции) = (что-то) - (адрес загрузки COFF); COFF умеет кодировать только вещи типа (что-то) + (адрес загрузки COFF). Как следствие, нужно использовать одну из форм с абсолютными адресами: либо mov (регистр), N / call (регистр), либо call [variable], где variable - отдельная переменная вида variable dd N.GerdtR wrote:Вопрос: как вызвать функцию, если известен её адрес? Писал так: call 4F3h, но ассемблер написал, что неверное использование символа.
Сделаем мир лучше!
Ну я использовал mov eax,proc call eax. proc - это константа, и так экономится место в таблице релокаций. А eax всё равно почти наверняка измениться.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Это из ZKEY.asm:А что будет в esp? Я думал, в этом случае надо самому его настраивать, например:
Code: Select all
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
Code: Select all
mov esp, stack_top
Zkey не нужны были дополнительные параметры, поэтому я использовал старую версию заголовка.
esp вручную устанавливать не нужно.
Смотри taskman.inc
esp вручную устанавливать не нужно.
Смотри taskman.inc
Помогите разобраться с форматом .ico . Итак добрался до каталога информации об изображении(у меня только одна запись с иконкой 32x32, 32бит). Читаю поле "размер растра" и вижу 10A8h. Но ведь должно быть 32*32*4=1000h . Т.е. есть какое-то поле(и очень похоже, что перед растром) размером 0A8h. Пробовал 32x32, 24бит и там тоже было это поле. Создавал иконки в Gimp. Что это за поле? Как часто встречается? И вообще есть где-нибудь нормальное описание формата? Ничего кроме Википедии не нашёл.
- Attachments
-
-
qwe.png (14.99 KiB)Viewed 5092 times
-
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Посмотри, как сделано в libimg. А лучше просто используй libimg.
BITMAPINFOHEADER - 28h байт;
палитры нет;
XOR-маска - 32x32x4 байт;
AND-маска - 32x32/8 байт.
Инфа гуглится на раз.
палитры нет;
XOR-маска - 32x32x4 байт;
AND-маска - 32x32/8 байт.
Инфа гуглится на раз.
Как можно этот код записать короче?
Code: Select all
mov ecx, ebx
sub ecx, WIN_H
shl ecx, 16
add ecx, WIN_H
Из хаоса в космос
И так хорошо.
Если есть свободные регистры, например EAX, то можно так:
Не всегда этот код будет меньше (не компилировал и не проверял), зато обращение к регистру выполняется намного быстрее чем к ячейке памяти, где хранятся нужные данные.
Кстати вероятно таки правильно [WIN_H], ты же не адресом работаешь, а с данными. Хотя если WIN_H заменяется постоянным значением, то квадратные скобки не нужны, но замечание насчет использования регистра в любом случае актуально.
Code: Select all
mov eax, WIN_H
mov ecx, ebx
sub ecx, eax
shl ecx, 16
add ecx, eax
Кстати вероятно таки правильно [WIN_H], ты же не адресом работаешь, а с данными. Хотя если WIN_H заменяется постоянным значением, то квадратные скобки не нужны, но замечание насчет использования регистра в любом случае актуально.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Leency, если WIN_H — константа, то:
Code: Select all
WIN_H equ 3333
; ........................................
mov ecx, ebx
shl ecx, 16
sub ecx, (WIN_H << 16) - WIN_H
При подключении какой либо библиотеки, необходимо выделять в программе дополнительно память в размере этой библиотеки?
to infinity and beyond
В обязательном порядке под сам код библиотеки не нужно - система сама все решит, на то она и Операционная Система. А вот под данные либо статически выделяется, либо динамически - все зависит от ситуации и предпочтений самого программиста. Смотри API библиотеки.punk_joker wrote:При подключении какой либо библиотеки, необходимо выделять в программе дополнительно память в размере этой библиотеки?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Who is online
Users browsing this forum: No registered users and 35 guests