Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Nov 13, 2019 2:42 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 9 posts ] 
Author Message
 Post subject: Пауза на fasm
PostPosted: Wed Feb 28, 2018 5:31 pm 
Offline

Joined: Tue Mar 22, 2016 10:09 am
Posts: 8
Прошу прощения за вопрос чайника
есть какой нибудь макрос для организации паузы при выводе текста в окно формы?


Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Wed Feb 28, 2018 6:26 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5064
DockPack ->Sysfunc -> http://prntscr.com/ikyepr

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


Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Thu Mar 15, 2018 12:57 pm 
Offline

Joined: Tue Mar 22, 2016 10:09 am
Posts: 8
спасибо за подсказку
Есть еще вопрос
хочу сделать бегущую точку по экрану,
но не могу даже передать переменную в функцию отрисовки точки:

1.рисую точку так:
mcall 1, 3, 3, 0x00000000
все в порядке
2.если передаю параметр то точка пропадает
объявлю данные
x db 3
рисую точку
mcall 1, x, 3, 0x00000000

ткните носом плиз что делаю не так


Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Thu Mar 15, 2018 1:28 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
iki wrote:
ткните носом плиз что делаю не так

Так ты передаёшь адрес переменной


Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Thu Mar 15, 2018 5:43 pm 
Offline

Joined: Sat Apr 22, 2017 6:11 pm
Posts: 222
Уточню ответ, изменив авторскую строчку:
Code:
mcall 1, byte[x], 3, 0x00000000

Просто x - это адрес метки. По адресу расположен твой байт. Чтобы получить именно содержимое байта по адресу нужно это явно указать как byte[x].
db -- byte
dw -- word
dd -- dword
Остальные пока не понадобятся. =)

Более того регистр ebx не байт, а целых 4. Так что передавать так как я поправил выше нельзя. Смотри описание в документации.

Функция 1 - поставить точку в окне:
Параметры:
* eax = 1 - номер функции
* ebx = x-координата (относительно окна)
* ecx = y-координата (относительно окна)
* edx = 0x00RRGGBB - цвет точки
edx = 0x01xxxxxx - инвертировать цвет точки
(младшие 24 бита игнорируются)
Возвращаемое значение:
* функция не возвращает значения

Заводи:
Code:
x dd 0

и передавай:
Code:
dword[x]


Last edited by theonlymirage on Thu Mar 15, 2018 5:59 pm, edited 1 time in total.

Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Thu Mar 15, 2018 5:59 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Так будет ошибка компиляции. Надо изменить переменную на dd и тогда достаточно будет
Code:
mcall 1, [x], 3, 0x00000000


Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Thu Mar 15, 2018 6:02 pm 
Offline

Joined: Sat Apr 22, 2017 6:11 pm
Posts: 222
tsdima
Плюсую, я как раз только дополнил свой ответ выше!

Как ещё вариант:
Code:
x db 0
; и потом:
xor ebx, ebx ;mov ebx, 0 ; обнуляем регистр ebx
mov bl, byte[x]
mcall 1, ebx, 3, 0x00000000


Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Fri Mar 16, 2018 10:52 am 
Offline

Joined: Tue Mar 22, 2016 10:09 am
Posts: 8
спасибо за очень хороший развернутый ответ,
но почему я к переменной не могу просто добавить 1
mcall 1, [x]+1, 3, 0x00000000
не работает


Top
   
 Post subject: Re: Пауза на fasm
PostPosted: Fri Mar 16, 2018 1:16 pm 
Offline

Joined: Sat Apr 22, 2017 6:11 pm
Posts: 222
Работай с регистрами:
Code:
inc ebx ; увеличить на единицу значение в регистре ebx
add ebx, 12 ;прибавить 12 к ebx

или памятью (с указанием размера, как уже писали выше), например:
Code:
add dword[x], 30
add byte[x], 13

до системного вызова mcall, при вызове передавай уже готовые значения. Короче расчёты делай заранее, пару лишних строк никому не помешают. Как маленький плюс это упрощает строку визуально и выглядит более универсально (если в будущем вдруг потребуется изменять переменную в зависимости от неких условий).

Описание самого mcall можешь найти в macros.inc и разобраться, вот документация fasm

Положить значение из памяти в регистр так же просто:
Code:
mov eax, dword[x] ;для случая, когда объявлено: x dd 0


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 9 posts ] 

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:  
Powered by phpBB® Forum Software © phpBB Limited