Помогите новичку

Applications development, KoOS API questions
  • Огромное спасибо dunkaist - баг исправлен!
    Из хаоса в космос
  • GerdtR wrote:Вопрос: как вызвать функцию, если известен её адрес? Писал так: call 4F3h, но ассемблер написал, что неверное использование символа.
    В обычных бинарниках такое должно работать. В COFF-файлах такая команда невозможна из-за устройства машинного кода: call N кодирует свой операнд относительно начала следующей инструкции, то есть в итоговом машинном коде должно быть N - (адрес следующей инструкции) = (что-то) - (адрес загрузки COFF); COFF умеет кодировать только вещи типа (что-то) + (адрес загрузки COFF). Как следствие, нужно использовать одну из форм с абсолютными адресами: либо mov (регистр), N / call (регистр), либо call [variable], где variable - отдельная переменная вида variable dd N.
    Сделаем мир лучше!
  • Ну я использовал mov eax,proc call eax. proc - это константа, и так экономится место в таблице релокаций. А eax всё равно почти наверняка измениться.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Это из ZKEY.asm:

    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
    
    А что будет в esp? Я думал, в этом случае надо самому его настраивать, например:

    Code: Select all

    mov esp, stack_top
  • Zkey не нужны были дополнительные параметры, поэтому я использовал старую версию заголовка.
    esp вручную устанавливать не нужно.
    Смотри taskman.inc
  • Помогите разобраться с форматом .ico . Итак добрался до каталога информации об изображении(у меня только одна запись с иконкой 32x32, 32бит). Читаю поле "размер растра" и вижу 10A8h. Но ведь должно быть 32*32*4=1000h . Т.е. есть какое-то поле(и очень похоже, что перед растром) размером 0A8h. Пробовал 32x32, 24бит и там тоже было это поле. Создавал иконки в Gimp. Что это за поле? Как часто встречается? И вообще есть где-нибудь нормальное описание формата? Ничего кроме Википедии не нашёл.
    Attachments
    qwe.png
    qwe.png (14.99 KiB)
    Viewed 5073 times
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Посмотри, как сделано в libimg. А лучше просто используй libimg.
  • BITMAPINFOHEADER - 28h байт;
    палитры нет;
    XOR-маска - 32x32x4 байт;
    AND-маска - 32x32/8 байт.

    Инфа гуглится на раз.
  • Как можно этот код записать короче?

    Code: Select all

    mov ecx, ebx
    sub ecx, WIN_H
    shl ecx, 16
    add ecx, WIN_H
    Из хаоса в космос
  • И так хорошо.
  • Если есть свободные регистры, например EAX, то можно так:

    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
  • punk_joker wrote:При подключении какой либо библиотеки, необходимо выделять в программе дополнительно память в размере этой библиотеки?
    В обязательном порядке под сам код библиотеки не нужно - система сама все решит, на то она и Операционная Система. А вот под данные либо статически выделяется, либо динамически - все зависит от ситуации и предпочтений самого программиста. Смотри API библиотеки.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: No registered users and 9 guests