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

Applications development, KoOS API questions
  • Вроде азобрался с задачей переменных. Теперь пытаюсь их сравнить:

    Code: Select all

    ...
    cmp i_1, i_2
       jne mcall -1
       jmp wait_event
    
    ...
    DATA
    i_1 dd 986d
    i_2 dd 991d
    
    Система говорит неправильные опернды. Какие тонкости сравнения я не учёл?
  • gc986 wrote:Вроде азобрался с задачей переменных. Теперь пытаюсь их сравнить:

    Code: Select all

    ...
    cmp i_1, i_2
       jne mcall -1
       jmp wait_event
    
    ...
    DATA
    i_1 dd 986d
    i_2 dd 991d
    
    Система говорит неправильные опернды. Какие тонкости сравнения я не учёл?
    Вроде разобрался, как я понимаю, нельзя сравнивать две переменные, нужно сравнивать переменную с регистром. По собственным офущениям на писал следующую вещь:

    Code: Select all

    mov eax, [i_2]
    cmp [i_1], eax
    jne close_program
    jmp wait_event
    
    И тут у меня созрел один вопрос который уже давно мне не давал покоя время от времени всплывая в памяти - есть регистры процессоров, по какому принципу я могу их использовать и нужно ли мне опасаться того что в них может что-то находится из-за чего программа дальше не полетит?
  • Используй регистры смело. Мало того, старайся использовать только регистры для временной информации (например, для счетчика цикла, или для результата вычисления. Или если тебе нужно получить размер экрана, но использовать его нужно только сейчас). НО! Передача параметров системным функциям происходит через регистры, поэтому следи за тем, чтобы при вызове системной функции в регистрах были нужные значения.
  • Три дня мучаюсь, не могу сделать чтобы кнопка закрывалась по десятому нажатию на неё X( ! Ребята выручайте!
    Attachments
    WHILE.ASM (835 Bytes)
    Downloaded 194 times
  • А вы пользуетесь отладчиком?
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Gluk wrote:А вы пользуетесь отладчиком?
    Честно говоря, не дошёл до него ещё, сначала думал с элементарными вещами разобраться (циклы, выбор, присваивание). Ране не приходилось пользоваться отладчиком из командной строки.

    Нашёл этот архив с документацией за 2010 год, по идее всё должно совпадать с современной версией - download/file.php?id=1932
    Last edited by gc986 on Thu Mar 19, 2015 12:56 pm, edited 1 time in total.
  • Gluk wrote:А вы пользуетесь отладчиком?
    Странно. Запустил под отладчиком. Данные аккумулируются в переменной, [button2], но у меня её нет в тексте программы. В отладчике вроде всё правильно - происходит аккумуляция, а далее ожидание события, требуется нажать на кнопку, Но когда программа работает нормально, я один раз нажимаю (видимо происходит цикл) и программа заканчивается.
  • он очень упрощает разработку, рекомендую разобраться! Вы будете видеть состояние каждого регистра и ячейки памяти при пошаговом выполнении программы, так что и с элементарными вещами разобраться будет гораздо проще - на практике

    [набрал это сообщение, не видя предыдущего, извиняюсь]
    Last edited by Gluk on Fri Mar 20, 2015 3:06 pm, edited 1 time in total.
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Не получается нормально сохранить данные. Функция 70, подфункция 3: Запись в существующий файл с поддержкой длинных имён.

    Code: Select all

    f70 write_file_offset_70; 
    int WriteFileWithOffset(dword write_data_size, write_buffer, write_file_path, offset)
    {
    	write_file_offset_70.func = 3;
    	write_file_offset_70.param1 = offset;
    	write_file_offset_70.param2 = 0;
    	write_file_offset_70.param3 = write_data_size;
    	write_file_offset_70.param3 = write_buffer;
    	write_file_offset_70.param4 = 0;
    	write_file_offset_70.name = write_file_path;
    	$mov eax,70
    	$mov ebx,#write_file_offset_70.func
    	$int 0x40
    }  

    Code: Select all

    WriteFile(9, "BMP", "/tmp0/1/1.bmp"); //записывает как надо
    WriteFileWithOffset(3, "OLO", "/tmp0/1/1.bmp", 3); //пишет мусор
    WriteFileWithOffset(3, "PSH", "/tmp0/1/1.bmp", 6); //пишет мусор
    Моя ошибка или ошибка в ядре?
    Из хаоса в космос
  • gc986 wrote:
    Gluk wrote:А вы пользуетесь отладчиком?
    Странно. Запустил под отладчиком. Данные аккумулируются в переменной, [button2], но у меня её нет в тексте программы. В отладчике вроде всё правильно - происходит аккумуляция, а далее ожидание события, требуется нажать на кнопку, Но когда программа работает нормально, я один раз нажимаю (видимо происходит цикл) и программа заканчивается.
    Держи исправленый вариант. Программа отображает число нажатий на кнопку, и завершается, если на кнопку снизу, нажать 10 раз.
    Attachments
    WHILE_screenshot.png
    WHILE_screenshot.png (1.93 KiB)
    Viewed 6551 times
    WHILE.ASM (2.13 KiB)
    Downloaded 192 times
  • Leency wrote:Не получается нормально сохранить данные. Функция 70, подфункция 3: Запись в существующий файл с поддержкой длинных имён.

    Code: Select all

    f70 write_file_offset_70; 
    int WriteFileWithOffset(dword write_data_size, write_buffer, write_file_path, offset)
    {
    	write_file_offset_70.func = 3;
    	write_file_offset_70.param1 = offset;
    	write_file_offset_70.param2 = 0;
    	write_file_offset_70.param3 = write_data_size;
    	write_file_offset_70.param3 = write_buffer;
    	write_file_offset_70.param4 = 0;
    	write_file_offset_70.name = write_file_path;
    	$mov eax,70
    	$mov ebx,#write_file_offset_70.func
    	$int 0x40
    }  

    Code: Select all

    WriteFile(9, "BMP", "/tmp0/1/1.bmp"); //записывает как надо
    WriteFileWithOffset(3, "OLO", "/tmp0/1/1.bmp", 3); //пишет мусор
    WriteFileWithOffset(3, "PSH", "/tmp0/1/1.bmp", 6); //пишет мусор
    Моя ошибка или ошибка в ядре?
    Наверно твоя! :? У меня всё работает! (FASM) :mrgreen:
  • FFUUUUU!!

    Можешь код показать?
    Из хаоса в космос
  • Code: Select all

       write_file_offset_70.param3 = write_data_size;
       write_file_offset_70.param3 = write_buffer;
    
    ?
    Сделаем мир лучше!
  • NOOOOOO!!!!...

    CleverMouse, ты как всегда лучше всех, спасибо.
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 17 guests