![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#41 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
![]()
R71MT, спасибо. А если ещё подскажешшь, какими регистрами можно пользоваться - век буду благодарен. API-функции ведь портят содержимое еbx, ecx,edx?
|
![]() |
![]() |
![]() |
#42 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
![]()
я просто учился программировать на 6502, с 64 кб памяти, а там, каждый байт на вес золота. Вот и привык все действия алгоритмизировать..
|
![]() |
![]() |
![]() |
#43 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,822
|
![]() Цитата:
Какая ОС? Какая размерность? https://en.wikipedia.org/wiki/X86_ca...ing_convention И? |
|
![]() |
![]() |
![]() |
#44 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,705
|
![]() |
![]() |
![]() |
![]() |
#45 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
Так и пусть портят.. Ты можешь использовать любые регистры РОН.
Суть в том, что в большинстве случаях тебе не нужно сохранять какие-либо регистры перед вызовом api. Ты просто оперируешь ими под свою задачу, а далее.. если это 32-бит, то отправляешь регистры со-своими значениями в стек как аргументы api, а если софт под х64, то аргументы кладёшь в rcx/rdx/r8/r9. Если-же говорить о вызове доп api внутри оконной процедуры WindowProc(), её 4-аргумента всегда будут лежать в стеке, к которым ты сможешь обратиться в любой момент. Таким образом сохранение регистров скорее исключение, чем правило.
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#46 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
groverx, вот тебе небольшая демка, которая создаёт "окно регистрации" с полем ввода пароля, и последующей его проверкой. Оригин пароль лежит в открытом виде, но это сейчас не важно.
Окно диалоговое, строится в секции-ресурсов, а создаётся функцией DialogBoxParam() вместо CreateWindowEx(). Как видно, здесь уже нет триады Get/Translate/DispatchMessage() - этим занимается сама система, которая по-сути и создаёт в фоне родительское окно чз CreateWindowEx(). Если юзер введёт валидный пароль, то из оконной процедуры "MyProc" (псевдоним WindowProc) вызывается пользовательская функция "GetMsgTime", чтобы сбоксить приветствие + время мессаги, полученное через GetMessageTime(). Кстати последняя возвращает время в миллисек с последнего запуска системы, а не дату/день/час. Код:
Код:
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#47 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,369
|
![]()
Один единственный вопрос - зачем городить все это на ассемблере?
Не, я понимаю, если надо оптимизировать внутренний цикл и т.д. но чем "invoke MessageBox,0,<'Пароль неверный!',0>,<'Тест',0>,0" лучше "MessageBox(0, "Пароль неверный!", "Тест", 0)"... |
![]() |
![]() |
![]() |
#48 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
чем? это те-же яйки, только вид сбоку.
просто тс хочет попрактиковаться в ассме, вот ему и пример. а так да.. для больших проектов асм не оправдывает себя, хотя и собирает компактный код без всякой шелухи.
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#49 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,822
|
![]()
так ТС не признает ваших invoke, макросов и т.д.
|
![]() |
![]() |
![]() |
#50 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
мда... что-же теперь делать?
вот это проблема века.
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос от новичка | Валерий718 | Помощь студентам | 4 | 23.10.2013 19:28 |
Вопрос новичка | geranton | Общие вопросы Delphi | 2 | 23.03.2012 14:00 |
Вопрос новичка | vaultboy2010 | Общие вопросы C/C++ | 3 | 02.10.2011 01:51 |
Создание функции вопрос от новичка C | CKent | Общие вопросы C/C++ | 2 | 07.12.2008 17:31 |