Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт авг 17, 2018 6:05 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 9 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Пауза на fasm
СообщениеДобавлено: Ср фев 28, 2018 5:31 pm 
Не в сети

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


Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Ср фев 28, 2018 6:26 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4452
DockPack ->Sysfunc -> http://prntscr.com/ikyepr

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


Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Чт мар 15, 2018 12:57 pm 
Не в сети

Зарегистрирован: Вт мар 22, 2016 10:09 am
Сообщения: 5
спасибо за подсказку
Есть еще вопрос
хочу сделать бегущую точку по экрану,
но не могу даже передать переменную в функцию отрисовки точки:

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

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


Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Чт мар 15, 2018 1:28 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 168
iki писал(а):
ткните носом плиз что делаю не так

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


Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Чт мар 15, 2018 5:43 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 72
Уточню ответ, изменив авторскую строчку:
Код:
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 бита игнорируются)
Возвращаемое значение:
* функция не возвращает значения

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

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


Последний раз редактировалось theonlymirage Чт мар 15, 2018 5:59 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Чт мар 15, 2018 5:59 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 168
Так будет ошибка компиляции. Надо изменить переменную на dd и тогда достаточно будет
Код:
mcall 1, [x], 3, 0x00000000


Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Чт мар 15, 2018 6:02 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 72
tsdima
Плюсую, я как раз только дополнил свой ответ выше!

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


Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Пт мар 16, 2018 10:52 am 
Не в сети

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


Вернуться к началу
 Заголовок сообщения: Re: Пауза на fasm
СообщениеДобавлено: Пт мар 16, 2018 1:16 pm 
Не в сети

Зарегистрирован: Сб апр 22, 2017 6:11 pm
Сообщения: 72
Работай с регистрами:
Код:
inc ebx ; увеличить на единицу значение в регистре ebx
add ebx, 12 ;прибавить 12 к ebx

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

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

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

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 9 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB