Вопрос

No comments
  • Мне нужен конкретный простой пример, как именно это делается на фасм
    ну я знаю что в асме доступаться можно вот вроде так
    mov [eax], eax ну или mov [Label1], eax при этом в eax должен быть адрес метки или метка Label1 должна указывать на массив?! А как масив размечать то ?
    DB $00, $00, $00..... так что ли ?! Ну компилятор жалуется.... в точности не помню в каком моменте... но я подумал, что из-за того что DB считается как константы и на их место записывать данные нельзя.
    В общем, мне хотелось бы увидеть простой и конкретный пример для Фасм, где разметка масива и способ обращения (чтения и записи в масив)
  • ИЗ ЧАТА (чтобы не затерялось):

    ALEXS1983 « Пн ноя 16, 2015 12:37 am » pavelyakov: А доступ к рамДиску достаточно быстрый ? если мне нужно будет сотни тысяч байт для прорисовки экрана несколько (50) раз в секунду ?
    ALEXS1983 « Пн ноя 16, 2015 12:36 am » pavelyakov: а что если мне нужны масивы в килобайты и мегабайты, такое в КОС можно ? Через РамДиск что ли ?
    ALEXS1983 « Пн ноя 16, 2015 12:35 am » pavelyakov: arr: buffer db 255 , ага работает, вот только не пойму а чего ограничение только 255 ?
    pavelyakov « Пн ноя 16, 2015 12:31 am » ALEXS1983: можно попробовать arr: buffer db 64, т.е. зарезервировать 64 db
    pavelyakov « Пн ноя 16, 2015 12:22 am » $00 это константа для компилятора
    pavelyakov « Пн ноя 16, 2015 12:20 am » ALEXS1983: знак вопроса вместо db $00
  • Кто нибудь может мне описать вот это:
    ============== Функция 0 - определить и нарисовать окно. =============
    ......
    * edx = 0xXYRRGGBB, где:
    * Y = стиль окна:
    * Y=0 - тип I - окно фиксированных размеров
    * Y=1 - только определить область окна, ничего не рисовать
    * Y=2 - тип II - окно изменяемых размеров
    * Y=3 - окно со скином
    * Y=4 - окно со скином фиксированных размеров
    ......
    человеческим языком, например как
    * ebx = [координата по оси x]*65536 + [размер по оси x]
    или
    mov ebx , (KX*65536+RX); где KX - координата по X, RX - размер по X
  • mov edx, Y*16777216 + цвет
    или
    mov edx, Y*1000000h + цвет
    или
    mov edx, Y shl 24 + цвет
    или
    mov dl, Y ;/dx/edx
    shl edx, 24
    add edx, цвет
  • Так а в чем проблема написать mov edx, 0xXYRRGGBB? Возможные значения Y расписаны же (надо только помнить, что актуальные на данный момент типы окон - 3, 4 и в редких случаях 1). С Х немного сложнее, но тоже не запредельно: пишешь на бумажке 4 нуля, читаешь описание, что значит каждый бит, меняешь в тех местах 0 на 1, переводишь полученное двоичное число в шестнадцатеричное на калькуляторе или еще как - получаешь X.
  • Pathoswithin, Heavyiron СПАСИБО!
    ========================
    Из файла sysfuncr.txt:
    Коды событий:
    * 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)

    А из за чего возникает сообщение о перерисовке ?
  • [quote="ALEXS1983"]Pathoswithin, Heavyiron СПАСИБО!
    ========================
    Из файла sysfuncr.txt:
    Коды событий:
    * 1 = сообщение о перерисовке (сбрасывается при вызове функции 0)

    А из за чего возникает сообщение о перерисовке ?[/quote]

    Когда: изменение размера, восстановление, движение, перекрывания окна.
  • При создании прямоугольников и точек на форме (Функция 13 - нарисовать прямоугольник в окне) ( Функция 15, подфункция 2 - поставить точку на фоновом изображении. ) ТОЖЕ ВОЗНИКАЕТ ?
    При запуске программы, еще до вызова формы (mcall 0, Функция 0 - определить и нарисовать окно ) ТОЖЕ ВОЗНИКАЕТ ?
  • При создании прямоугольников и точек на форме (Функция 13 - нарисовать прямоугольник в окне) ( Функция 15, подфункция 2 - поставить точку на фоновом изображении. ) ТОЖЕ ВОЗНИКАЕТ ? -> нет
    При запуске программы, еще до вызова формы (mcall 0, Функция 0 - определить и нарисовать окно ) ТОЖЕ ВОЗНИКАЕТ ? -> да
  • ........................
    mcall 17 ; 17 - получить идентификатор нажатой кнопки
    cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
    jne CycleProcesEvents ; вернуться
    .exit:
    mcall -1 ; иначе конец программы
    ........................

    Как я понял если вместо mcall -1 вписать Jmp CycleProcesEvents ( вернуться ), то окно, по нажатию на "крестик" не закроется, а программа продолжит работу перейдя по данной метке.
    Вот возникает вопрос почему при нажатии ALT+F4 окно всё равно закроется, независимо от того что .exit: Jmp CycleProcesEvents ? Является ли закрытие окна по ALT+F4 моментальным прекращением работы программы и переход в систему ?
    Возможно ли отменить закрытие окна и/или прекращения работы программы по ALT+F4 ?
  • Думаю по Alt+F4 просто завершается,процесс программы
  • Можно попробовать накинуть хук.
  • [quote="ALEXS1983"]........................
    mcall 17 ; 17 - получить идентификатор нажатой кнопки
    cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
    jne CycleProcesEvents ; вернуться
    .exit:
    mcall -1 ; иначе конец программы
    ........................

    Как я понял если вместо mcall -1 вписать Jmp CycleProcesEvents ( вернуться ), то окно, по нажатию на "крестик" не закроется, а программа продолжит работу перейдя по данной метке.
    Вот возникает вопрос почему при нажатии ALT+F4 окно всё равно закроется, независимо от того что .exit: Jmp CycleProcesEvents ? Является ли закрытие окна по ALT+F4 моментальным прекращением работы программы и переход в систему ?
    Возможно ли отменить закрытие окна и/или прекращения работы программы по ALT+F4 ?[/quote]
    Этим занимется @taskbar. При нажатии Alt+F4 он посылает активному приложению код события 3 и параметр 1 (по сути нажимает на крестик) (sysfunc 72.1(3, 1) )
  • Я извиняюсь, может я чего недопонял, а где можно ознакомится с Free Pascal для КОС ?
  • Who is online

    Users browsing this forum: No registered users and 10 guests