Вопрос № 71774: Здравствуйте!По мотивам тамы резидентов попробовал напипсать следю код. НО он не работает :(. объясните пожалуйста где ошибка...Вопрос № 71842: Здраствуйте, уважаемые эксперты!
У меня вопрос по ассемблеру в частности по WinAPI.
1. Как вывести системное время прямо в окно программы(если можно подробно)
2. Можно ли на ассемблере с помощью WinAPI создавать такие формы как Label в De...Вопрос № 71891: Здрасвуйте!
Скажите как проверить чётное число или нет?!!...
Вопрос № 71.774
Здравствуйте!По мотивам тамы резидентов попробовал напипсать следю код. НО он не работает :(. объясните пожалуйста где ошибка
Приложение:
Отправлен: 20.01.2007, 09:20
Вопрос задал: ATZATZ (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, ATZATZ!
А что именно вы хотите получить? Искажение регистров вы получили, это точно, поэтому наверное, система и зависает. Сохраняйте все регистры через PUSHA.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 20.01.2007, 15:58
Отвечает: Стас
Здравствуйте, ATZATZ!
1) Получается что вы запретили все 21 функции кроме 9, и ту подменили... Честно говоря не знаю как поведет себя система, но наверняка это будет похоже на зависание, ведь даже выход из проги (ah=4ch) не сработает и прога вылетит с ошибкой.
2) Вызов call dword ptr cs:[vect_21h] не корректен. Вот представте что должно произойти:
вы делаете длинный call, в стек идут (ДВА!!!) регистры CS:IP дальше начинает работать int21, по окончании в нем стоит iret который извлекает из стека ТРИ!!! регистра CS:IP:флаги. Ошибка. Правильно pushf:call dword...
Тут надо заметить что выходить из своей обработки следует сохраним флаги которые вам дала int21, а то программы не получат сообщения об ошибках (CF) или получат ложные сообщения об ошибках.
3) jmp dword ptr cs:[vect_21h] КРАЙНЕ не корректен так как у текущей проги по этому адресу ничего нет. Адрес int21 остался в резиденте.
4) может еще чтото я пропустил, смотрите...
Приложение:
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 21.01.2007, 03:33 Оценка за ответ: 5 Комментарий оценки: Спасибо Стас!Особенно за pushf/iret!
Вопрос № 71.842
Здраствуйте, уважаемые эксперты!
У меня вопрос по ассемблеру в частности по WinAPI.
1. Как вывести системное время прямо в окно программы(если можно подробно)
2. Можно ли на ассемблере с помощью WinAPI создавать такие формы как Label в Delphi (очень удобно им пользоваться в Delphi).
С глубоким уважением Stalker.
sub edi,edi ;=FALSE
mov esi,[Skin]
call SetState,ebx
or edi,eax
Call GetLocalTime,ofs newTime
call PrintTime,[hDCMain],edi
;add
jmp @@exit0
;--------------------------------------------------------------
; Выводит в DC текущее время
; IN -> hdc - DC для вывода
; fPaint = FALSE - не перерисовывать, если нет изменений
; = TRUE - перерисовывать всё
;
proc PrintTime
ARG hDC:dword,fPaint:dword
USES esi,edi,ebx
mov esi,[Skin]
mov edi,ofs tCrdOut0
sub eax,eax
mov ebx,eax
mov ax,[(t SYSTEMTIME edi+LenCrdOut0+LenCrdIn0+size SYSTEMTIME).wHour]
cmp [fPaint],0
jnz @@m1
cmp ax,[(t SYSTEMTIME edi+LenCrdOut0+LenCrdIn0).wHour]
jz @@m2
@m1:
cmp [Ini.f12or24],FALSE
jnz @@m1_0
cmp al,13
jc @@m1_0
sub al,12
@m1_0:
mov bl,10
div bl
mov ebx,eax
sub ah,ah
LenCrdIn0 = 10*4
time SYSTEMTIME ?
newTime SYSTEMTIME ?
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 20.01.2007, 19:41
Отвечает: QDSota
Здравствуйте, Stalker-vir!
2) В ассемблере есть стандартный класс STATIC - аналог label.
Создать текст:
invoke CreateWindowEx,0,ADDR LabelClass,ADDR Caption,WS_CHILD+WS_VISIBLE,x,y,width,height,hwnd,hCode,hInstance,NULL
...
LabelClass db "Static",0
Caption db "Заголовок вашего окна",0
hwnd dd HWND_окна_куда_ставиться_текст
hCode dd КОД_передаваемый_материнскому_окну_для_обработки_событий
--------- Открыть глаза навстречу солнцу
Ответ отправил: QDSota (статус: Профессионал) Россия, Зеленоград Тел.: 8-916-53-43-916 ICQ: 84611301 ---- Ответ отправлен: 23.01.2007, 09:35
Вопрос № 71.891
Здрасвуйте!
Скажите как проверить чётное число или нет?!!
Отправлен: 21.01.2007, 01:54
Вопрос задал: chikanok (статус: 3-ий класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, chikanok!
Проверяй нулевой бит.
test ax, 1
jz чётное
успехов.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 21.01.2007, 01:59
Отправить вопрос экспертам этой рассылки
Приложение (если необходимо):
* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.
Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!
Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.
Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.