Прошу прощения за вопрос чайника
есть какой нибудь макрос для организации паузы при выводе текста в окно формы?
Пауза на fasm
DockPack ->Sysfunc -> http://prntscr.com/ikyepr
Из хаоса в космос
спасибо за подсказку
Есть еще вопрос
хочу сделать бегущую точку по экрану,
но не могу даже передать переменную в функцию отрисовки точки:
1.рисую точку так:
mcall 1, 3, 3, 0x00000000
все в порядке
2.если передаю параметр то точка пропадает
объявлю данные
x db 3
рисую точку
mcall 1, x, 3, 0x00000000
ткните носом плиз что делаю не так
Есть еще вопрос
хочу сделать бегущую точку по экрану,
но не могу даже передать переменную в функцию отрисовки точки:
1.рисую точку так:
mcall 1, 3, 3, 0x00000000
все в порядке
2.если передаю параметр то точка пропадает
объявлю данные
x db 3
рисую точку
mcall 1, x, 3, 0x00000000
ткните носом плиз что делаю не так
Так ты передаёшь адрес переменнойiki wrote:ткните носом плиз что делаю не так
Уточню ответ, изменив авторскую строчку:
Просто x - это адрес метки. По адресу расположен твой байт. Чтобы получить именно содержимое байта по адресу нужно это явно указать как byte[x].
db -- byte
dw -- word
dd -- dword
Остальные пока не понадобятся. =)
Более того регистр ebx не байт, а целых 4. Так что передавать так как я поправил выше нельзя. Смотри описание в документации.
Функция 1 - поставить точку в окне:
Параметры:
* eax = 1 - номер функции
* ebx = x-координата (относительно окна)
* ecx = y-координата (относительно окна)
* edx = 0x00RRGGBB - цвет точки
edx = 0x01xxxxxx - инвертировать цвет точки
(младшие 24 бита игнорируются)
Возвращаемое значение:
* функция не возвращает значения
Заводи:
и передавай:
Code: Select all
mcall 1, byte[x], 3, 0x00000000
db -- byte
dw -- word
dd -- dword
Остальные пока не понадобятся. =)
Более того регистр ebx не байт, а целых 4. Так что передавать так как я поправил выше нельзя. Смотри описание в документации.
Функция 1 - поставить точку в окне:
Параметры:
* eax = 1 - номер функции
* ebx = x-координата (относительно окна)
* ecx = y-координата (относительно окна)
* edx = 0x00RRGGBB - цвет точки
edx = 0x01xxxxxx - инвертировать цвет точки
(младшие 24 бита игнорируются)
Возвращаемое значение:
* функция не возвращает значения
Заводи:
Code: Select all
x dd 0
Code: Select all
dword[x]
Last edited by theonlymirage on Thu Mar 15, 2018 5:59 pm, edited 1 time in total.
Так будет ошибка компиляции. Надо изменить переменную на dd и тогда достаточно будет
Code: Select all
mcall 1, [x], 3, 0x00000000
tsdima
Плюсую, я как раз только дополнил свой ответ выше!
Как ещё вариант:
Плюсую, я как раз только дополнил свой ответ выше!
Как ещё вариант:
Code: Select all
x db 0
; и потом:
xor ebx, ebx ;mov ebx, 0 ; обнуляем регистр ebx
mov bl, byte[x]
mcall 1, ebx, 3, 0x00000000
спасибо за очень хороший развернутый ответ,
но почему я к переменной не могу просто добавить 1
mcall 1, [x]+1, 3, 0x00000000
не работает
но почему я к переменной не могу просто добавить 1
mcall 1, [x]+1, 3, 0x00000000
не работает
Работай с регистрами:
или памятью (с указанием размера, как уже писали выше), например:
до системного вызова mcall, при вызове передавай уже готовые значения. Короче расчёты делай заранее, пару лишних строк никому не помешают. Как маленький плюс это упрощает строку визуально и выглядит более универсально (если в будущем вдруг потребуется изменять переменную в зависимости от неких условий).
Описание самого mcall можешь найти в macros.inc и разобраться, вот документация fasm
Положить значение из памяти в регистр так же просто:
Code: Select all
inc ebx ; увеличить на единицу значение в регистре ebx
add ebx, 12 ;прибавить 12 к ebx
Code: Select all
add dword[x], 30
add byte[x], 13
Описание самого mcall можешь найти в macros.inc и разобраться, вот документация fasm
Положить значение из памяти в регистр так же просто:
Code: Select all
mov eax, dword[x] ;для случая, когда объявлено: x dd 0
Who is online
Users browsing this forum: No registered users and 48 guests