Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Feb 27, 2020 9:30 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 165 66 67 68 6976 Next
Author Message
PostPosted: Fri Mar 13, 2015 8:43 am 
Offline
User avatar

Joined: Sat Apr 20, 2013 6:43 am
Posts: 29
Gluk wrote:
Хотя раз уж мы добавили,
Code:
cmp   eax, 0

то для однообразия может лучше и сменить всё на cmp

Теперь всё понятно :D У вас получится очень понятный учебник :)

Сейчас осваиваю циклы и операторы выбора и встал вопрос объявления переменных. Я делаю так чтобы объявить целочисленные переменные:
Code:
DATA
i_1 byte 986
; или так
i_2 db 991

И ещё несколько подобных вариантов, компилятор мне всегда говорит - неправильная инструкция. Как правильно объявлять переменные?


Top
   
PostPosted: Fri Mar 13, 2015 1:01 pm 
Offline
User avatar

Joined: Sat Apr 20, 2013 6:43 am
Posts: 29
Вроде азобрался с задачей переменных. Теперь пытаюсь их сравнить:
Code:
...
cmp i_1, i_2
   jne mcall -1
   jmp wait_event

...
DATA
i_1 dd 986d
i_2 dd 991d

Система говорит неправильные опернды. Какие тонкости сравнения я не учёл?


Top
   
PostPosted: Fri Mar 13, 2015 1:52 pm 
Offline
User avatar

Joined: Sat Apr 20, 2013 6:43 am
Posts: 29
gc986 wrote:
Вроде азобрался с задачей переменных. Теперь пытаюсь их сравнить:
Code:
...
cmp i_1, i_2
   jne mcall -1
   jmp wait_event

...
DATA
i_1 dd 986d
i_2 dd 991d

Система говорит неправильные опернды. Какие тонкости сравнения я не учёл?

Вроде разобрался, как я понимаю, нельзя сравнивать две переменные, нужно сравнивать переменную с регистром. По собственным офущениям на писал следующую вещь:
Code:
mov eax, [i_2]
cmp [i_1], eax
jne close_program
jmp wait_event

И тут у меня созрел один вопрос который уже давно мне не давал покоя время от времени всплывая в памяти - есть регистры процессоров, по какому принципу я могу их использовать и нужно ли мне опасаться того что в них может что-то находится из-за чего программа дальше не полетит?


Top
   
PostPosted: Fri Mar 13, 2015 3:32 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Используй регистры смело. Мало того, старайся использовать только регистры для временной информации (например, для счетчика цикла, или для результата вычисления. Или если тебе нужно получить размер экрана, но использовать его нужно только сейчас). НО! Передача параметров системным функциям происходит через регистры, поэтому следи за тем, чтобы при вызове системной функции в регистрах были нужные значения.


Top
   
PostPosted: Wed Mar 18, 2015 9:11 am 
Offline
User avatar

Joined: Sat Apr 20, 2013 6:43 am
Posts: 29
Три дня мучаюсь, не могу сделать чтобы кнопка закрывалась по десятому нажатию на неё X( ! Ребята выручайте!


Attachments:
WHILE.ASM [835 Bytes]
Downloaded 59 times
Top
   
PostPosted: Wed Mar 18, 2015 10:26 am 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
А вы пользуетесь отладчиком?

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Thu Mar 19, 2015 9:11 am 
Offline
User avatar

Joined: Sat Apr 20, 2013 6:43 am
Posts: 29
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.

Top
   
PostPosted: Thu Mar 19, 2015 12:31 pm 
Offline
User avatar

Joined: Sat Apr 20, 2013 6:43 am
Posts: 29
Gluk wrote:
А вы пользуетесь отладчиком?

Странно. Запустил под отладчиком. Данные аккумулируются в переменной, [button2], но у меня её нет в тексте программы. В отладчике вроде всё правильно - происходит аккумуляция, а далее ожидание события, требуется нажать на кнопку, Но когда программа работает нормально, я один раз нажимаю (видимо происходит цикл) и программа заканчивается.


Top
   
PostPosted: Thu Mar 19, 2015 4:07 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
он очень упрощает разработку, рекомендую разобраться! Вы будете видеть состояние каждого регистра и ячейки памяти при пошаговом выполнении программы, так что и с элементарными вещами разобраться будет гораздо проще - на практике

[набрал это сообщение, не видя предыдущего, извиняюсь]

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Last edited by Gluk on Fri Mar 20, 2015 3:06 pm, edited 1 time in total.

Top
   
PostPosted: Thu Mar 19, 2015 7:19 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
Не получается нормально сохранить данные. Функция 70, подфункция 3: Запись в существующий файл с поддержкой длинных имён.

Code:
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:
WriteFile(9, "BMP", "/tmp0/1/1.bmp"); //записывает как надо
WriteFileWithOffset(3, "OLO", "/tmp0/1/1.bmp", 3); //пишет мусор
WriteFileWithOffset(3, "PSH", "/tmp0/1/1.bmp", 6); //пишет мусор

Моя ошибка или ошибка в ядре?

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


Top
   
PostPosted: Fri Mar 20, 2015 2:03 pm 
Offline
User avatar

Joined: Sat Sep 27, 2014 2:59 pm
Posts: 102
gc986 wrote:
Gluk wrote:
А вы пользуетесь отладчиком?

Странно. Запустил под отладчиком. Данные аккумулируются в переменной, [button2], но у меня её нет в тексте программы. В отладчике вроде всё правильно - происходит аккумуляция, а далее ожидание события, требуется нажать на кнопку, Но когда программа работает нормально, я один раз нажимаю (видимо происходит цикл) и программа заканчивается.
Держи исправленый вариант. Программа отображает число нажатий на кнопку, и завершается, если на кнопку снизу, нажать 10 раз.


Attachments:
WHILE_screenshot.png
WHILE_screenshot.png [ 1.93 KiB | Viewed 1754 times ]
WHILE.ASM [2.13 KiB]
Downloaded 53 times
Top
   
PostPosted: Fri Mar 20, 2015 4:17 pm 
Offline
User avatar

Joined: Sat Sep 27, 2014 2:59 pm
Posts: 102
Leency wrote:
Не получается нормально сохранить данные. Функция 70, подфункция 3: Запись в существующий файл с поддержкой длинных имён.

Code:
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:
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:


Top
   
PostPosted: Fri Mar 20, 2015 4:28 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
FFUUUUU!!

Можешь код показать?

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


Top
   
PostPosted: Fri Mar 20, 2015 4:56 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Code:
   write_file_offset_70.param3 = write_data_size;
   write_file_offset_70.param3 = write_buffer;

?

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


Top
   
PostPosted: Fri Mar 20, 2015 5:11 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5083
NOOOOOO!!!!...

CleverMouse, ты как всегда лучше всех, спасибо.

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 165 66 67 68 6976 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:  
cron
Powered by phpBB® Forum Software © phpBB Limited