Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 478
от 26.01.2003, 18:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 2506
Отправлено ответов: 7571
Активность: 302.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Ayl
Статус: Профессиональный
Общий рейтинг: 117.73
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 146.38
[Подробней >>]
Илья
Статус: Начальный
Общий рейтинг: 108.13
[Подробней >>]
 
Igoryk
Статус: Опытный
Общий рейтинг: 141.05
URL: IgorykSoft
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.16
URL: Программирование
[Подробней >>]
Топор
Статус: Начальный
Общий рейтинг: 110.44
[Подробней >>]
 
DiGiT[old]
Статус: Опытный
Общий рейтинг: 108.07
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 117.88
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 107.95
[Подробней >>]
 
Maverick
Статус: Профессиональный
Общий рейтинг: 139.28
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
mang
Статус: Доверительный
Общий рейтинг: 108.57
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 112
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 2462. Доброго дня! >Возможно ли создать универсальную загрузочную дискету >(2 и более ОСей)?... (ответов: 1)
Вопрос № 2463. Приветствую Экспертов. Какой нужен hook, чтобы моя процедура получала управление ПОСЛЕ любого измен... (ответов: 4)
Вопрос № 2464. Доброго времечка! Как на асме делать строковые переменные переменной длины. В ЯВУ об этом не задумыв... (ответов: 7)
Вопрос № 2465. Сорри за малость "не тему", но как-то похожий вопрос встречал у Вас. Карта GeForce2MX (non... (ответов: 1)
Вопрос № 2466. привет эксперты спасибо за помощь....... у меня вопрос-- как асм пониммает,что,регистр,ax,это,регист... (ответов: 7)
Вопрос № 2468. Здравствуйте долго и без хлопот глубоко уважаемые эксперты! Вот вы мне пишете оптимизация, оптимизац... (ответов: 5)

Вопросов: 6, ответов: 25


 Вопрос № 2462

Доброго дня!
>Возможно ли создать универсальную загрузочную дискету
>(2 и более ОСей)? И как можно ее руками создать?
>Какие универсальные дрова надо написать на асме (или взять стандартные)?
>Вообще проконсультируйте на эту тему..
Вы все не совсем меня поняли! На самом деле все гораздо проще, чем вы себе
представляете. Например... на чистый винтя хочу поставить вынь 98 и вынь 2000
с сидюка (не загрузочного). Так вот, загружаюсь с этой дискеты с основными
дровами (подключение графики, сидюка и т.д.) и выбирая любою ось. Так как
для каждой оси свои бут-дискеты (Панель задач->Создать бут-дискету), мне бы
хотелось что-то универсальное. Что теперь сказать можите? Мне нужна технология,
как в батнике (autoexec.bat)!



Вопрос отправлен: 21.01.2003, 18:25
Отправитель: noname

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Приветствую Вас, noname!
Стоп. А нафига тебе дискета тогда? Ставь Partition Magic или что-нибудь подобное - и вперед! И вообще, если 2000 поставить вместе с 98-й, то она сама разберется в этом и при загрузке будет тебя спрашивать, а что ты хочешь грузить. И не нужна тебе загрузочная дискета.


Ответ отправлен: 21.01.2003, 19:01
Отправитель: Ayl


 Вопрос № 2463

Приветствую Экспертов.
Какой нужен hook, чтобы моя процедура получала управление ПОСЛЕ любого изменения на экране (мигание курсора и движение мыши не в счёт)?
И такой же вопрос, но в отношении конкретного окна:
какой должен быть hook для отлавливания изменений в определенном окне?
ЗЫ Дело в том, что пару дней назад я уже задавал этот вопрос, но ни подтверждение доставки, ни ответов я не получил, поэтому прошу извинить, если вы уже отвечали на мой вопрос.
Заранее благодарю.



Вопрос отправлен: 21.01.2003, 23:14
Отправитель: Студент

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Доброе время суток, Студент!
Ставишь хук (WH_MSGFILTER) для конкретного потока, который отрисовывает на экран (WM_PAINT, например)

Ответ отправлен: 22.01.2003, 11:14
Отправитель: masquer


Отвечает Илья

Добрый день, Студент!
WH_CALLWNDPROC and WH_CALLWNDPROCRET Hooks:
Позволяют приложению осуществлять обработку тех сообщений, которые были посланы оконной процедуре при помощи функции SendMessage(). Хук типа WH_CALLWNDPROC вызывается ДО передачи сообщения оконной процедуре, WH_CALLWNDPROCRET - ПОСЛЕ.
WH_CBT Hook:
Хуки этого типа используются для того, чтобы перехватывать сообщения о создании окон, переходе окон в активное состояние, удаление, минимизации и максимизации их, изменении размеров и перемещения окон. Получают управления перед выполнением системных команд, перед удалением событий от мышки или клавиатуры из системной очереди.
WH_MSGFILTER and WH_SYSMSGFILTER Hooks:
Эти хуки позволяют перехватывать сообщения меню, полосы прокрутки, окон сообщений, диалоговых окон. Также могут использоватся для обнаружения активизации какого-либо окна вследствии нажатия пользователем комбинаций клавиш ALT+TAB или ALT+ESC. WH_MSGFILTER хук может контролировать только сообщения вышеописанных контролов созданных программой установившей хук. WH_SYSMSGFILTER хук может контролировать данные сообщения для всех программ.
Все остальное скажут другие или найдешь в первоисточнике данного материала - MSDN'е (указатель - hooks [Win32]).

Ответ отправлен: 22.01.2003, 00:42
Отправитель: Илья


Отвечает Igoryk

Приветствую Вас, Студент!
WM_SIZE.

Ответ отправлен: 24.01.2003, 18:24
Отправитель: Igoryk


Отвечает Bob Johnson

Приветствую Вас, Студент!
В общем случае, изменения на экране происходят по приходу окнам сообщений WM_PAINT и WM_ERASEBKGND (или как оно там). Тебе нужно поставить хук на все оконные сообщения, а в нем просто фильтровать эти.
Существуют, естественно, исключения, когда приложение просто так рисует в окне (например, в отдельном потоке).


Ответ отправлен: 22.01.2003, 00:47
Отправитель: Bob Johnson


 Вопрос № 2464

Доброго времечка!
Как на асме делать строковые переменные переменной длины.
В ЯВУ об этом не задумываешся.


Приложение:


Вопрос отправлен: 22.01.2003, 06:06
Отправитель: Игорь

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Доброе время суток, Игорь!
Можно выделить память под максимальный размер строки (например, 255 символов). Соответственно, тебе нужно будет проверять, что при операциях со строкой ты не превысишь этот размер.
Можно сделать по другому - выделить память для строки нужного размера. Тогда при превышении разера выделенной области тебе нужно будет выделять новую область большего размера и копировать туда свою строку.
В обоих случаях нужно как-то определять конец строки. Есть 2 подхода:
- хранить текущую длину строки (например, в 0-м байте строки, как в Паскале);
- помечать конец строки (например, символом с кодом 0, как в Си).
Все варианты равнозначны. Какой использовать - зависит от поставленной задачи. Например, если у тебя будет работа со строками, предполагающая частое добавление символов в конец, причем размер строки не будет превышать определенного числа - лучше, наверное, использовать первый подход. Если же будут использоваться множество строк различной длины, причем с частыми операциями добавления символов в любое место и удаления символов из середины - лучше, ИМХО, 2-й подход. Все равно придется копировать.


Ответ отправлен: 22.01.2003, 12:34
Отправитель: Ayl


Отвечает Топор

Доброе время суток, Игорь!
В ЯВУ для этого используется динамическая память - необходимая память запрашивается и освобождается посредством запросов к ОС, организуются связанные списки (это может делать или сама прога, или ОС). В самом простейшем случае, если строка одна и дело происходит под DOS, можно использовать память за концом файла - поставить метку в самом конце последнего сегмента и по ней ходить.


Ответ отправлен: 22.01.2003, 11:29
Отправитель: Топор


Отвечает masquer

Добрый день, Игорь!
А никак. Память выделил, поработал. А когда какой-нибудь недоделанный программер на недоделанном делфи такую прогу напишет, переполнение буфера обычно и происходит. :)
Что конкретно нужно?

Ответ отправлен: 22.01.2003, 11:31
Отправитель: masquer


Отвечает Igoryk

Добрый день, Игорь!
Можно использользовать буфер с максимально нужной длиной. По типу bufer DB 0 DUP (0 или ?)

Ответ отправлен: 24.01.2003, 18:24
Отправитель: Igoryk


Отвечает Bob Johnson

Доброе время суток, Игорь!
Динамическим выделением памяти, т.е. когда строка удлиняется, тебе нужно выделить ей больший объем памяти.


Ответ отправлен: 23.01.2003, 00:07
Отправитель: Bob Johnson


Отвечает DiGiT[old]

Приветствую Вас, Игорь!
Просто как и в ЯВУ. выделяешь память и потом ее или увеличивашь этот блок или выделяешь новый, а потом копируешь ту строку. В Си та же концепция.

Ответ отправлен: 23.01.2003, 04:06
Отправитель: DiGiT[old]


Отвечает ASMодей

Добрый день, Игорь!
Как это не задумываешься? А на С/С++ где ты строки переменной
длины видел? Там вообще строк нет, только массивы. Так вот
и в ассемблере то же самое - одни массивы.


Ответ отправлен: 23.01.2003, 16:54
Отправитель: ASMодей


 Вопрос № 2465

Сорри за малость "не тему", но как-то похожий вопрос встречал у Вас. Карта GeForce2MX (noname) с ViewSonic'ом G55 в режиме
1024x768x32 при дровах версии не 12.40 (12.41) на виндах 2к/XP
не совсем корректно работает, точнее совсем некорректно :)
Экран из 15'' превращается в 13 и встроенный в дисп viewmeter
показывает user mode 11 вместо 2-го. Пробовал ковырять дрова (убивал 60 герцовые режимы etc), стало еще хуже, даже переустановка дров не помогла (XP), пришлось жать восстановление системы.
Вопрос в следующем: кто-нить сталкивался с подобным, и как помочь NT полюбить новые детонаторы ???
Заранее Thx !



Вопрос отправлен: 22.01.2003, 06:33
Отправитель: Yarik (hawchick@bk.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, Yarik!
У меня под ХР на Ge Force 2 mx стояли драйвера версии 23.11 и все было ок. Попробуй поставить их себе тоже. Все таки 12.40 для второго ge force маловато...


Ответ отправлен: 23.01.2003, 00:07
Отправитель: Bob Johnson


 Вопрос № 2466

привет эксперты спасибо за помощь.......
у меня вопрос-- как асм пониммает,что,регистр,ax,это,регистр
ax.ex и тд



Вопрос отправлен: 22.01.2003, 08:01
Отправитель: .hf

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Добрый день, .hf!
Хм... ты же сам в тексте программы пишешь - ax, cx, bx и т.д. Компилятор анализирует текст и генерирует соответствующие машинные коды, которые отличаются для каждого регистра.

Ответ отправлен: 22.01.2003, 08:43
Отправитель: vitya


Отвечает Maverick

Приветствую Вас, .hf!
???
Как ты распознаешь, что тебе сказали А, а не Б? :)
У каждого регистра есть его двоичный эквивалент, по которому проц его распознает... Вооружись отладчиком и эксперементируй с командами.
mov ax,1
mov bx,1
mov cx,1
mov ax,2
mov bx,2
inc ax
dec ax
........
Только анализируй не в 16ричном, а в 2ичном виде.
Много интересного надыбаешь.
Или погляди доки по полиморфам, там расписаны принципы построения команд, т.е. закономерности в отличиях(например):
mov ax,1
mov bx,1
и т.д.


Ответ отправлен: 22.01.2003, 10:57
Отправитель: Maverick


Отвечает Ayl

Здравствуйте, .hf!
Блин, ты научишься вопросы корректно задавать? Что значит - как понимает? Так и понимает - ему ведь русским языком черным по белому пишут, например: mov ax, lalala :-)
Что ты имеешь в виду?
А если ты интересуешься, как процессор понимает, какой регистр использовать в команде - так для этого и существует система машинных команд. Во-первых, каждая команда имеет свой код. Во-вторых, каждый регистр тоже кодируется определенным образом. В-третьих, в команде предусмотрены специальные биты для указания, с каким режимом адресации и каким размером данных идет работа. В-четвертых, бит указания направления передачи данных (процессор - память или наоборот). В-пятых, сегменты имеют бит указания размерности по умолчанию - 16 или 32 бит. В зависимости от этого и префикса изменения размерности выбирается, идет ли работа с регистрами ax, bx, cx и т.д. или с регистрами eax, ebx, ecx и т.д.
Кстати, а что ты имел в виду под регистром ex? Я такого не знаю.


Ответ отправлен: 22.01.2003, 12:45
Отправитель: Ayl


Отвечает mang

Добрый день, .hf!
ax.ex и.т.д это имена(мнемокоды) для програмистов.
На самом деле в логической системе проца каждый регистр имеет свой двоичный кодадресс,которым управляют дешифратоы,
мультиплексоры инверторы,ну в общем вся огромная цифрообрабатывающая фабрика процессора АЛУ.
имя>asm>дешифратор= двоичный код> АЛУ процессор.
Не обязательно знать как это делает ASM не нужно идаже просто не возможно писать прогу одними нулями и еденицами.


Ответ отправлен: 22.01.2003, 16:21
Отправитель: mang


Отвечает Igoryk

Добрый день, .hf!
Это не асм, а процессора должен понимать к какому регистру обращаться, а вообще это все на электронном уровне выполняется, т.е. все очень условно.

Ответ отправлен: 24.01.2003, 18:24
Отправитель: Igoryk


Отвечает Bob Johnson

Приветствую Вас, .hf!
Странный вопрос... Что такое ax.ex?
Мне кажется, что ответ тебе помежет найти вопрос: как комп понимает, что reset - это reset. Я думаю, что потому, что это жестко задано производителем...


Ответ отправлен: 23.01.2003, 00:07
Отправитель: Bob Johnson


Отвечает DiGiT[old]

Добрый день, .hf!
Ну смотрит строку
mov ax, bx видит первое слово mov значит команда, потом смотрит операнды первый AX поэтому ишет в списке ключевых слов такое слово и находит его вместе с командой mov они образуют отдельную команду, то есть ищет он по сути mov ax и т.д
Просто синтаксический анализ

Ответ отправлен: 23.01.2003, 04:04
Отправитель: DiGiT[old]


 Вопрос № 2468

Здравствуйте долго и без хлопот глубоко уважаемые эксперты!
Вот вы мне пишете оптимизация, оптимизация .
Сами же в своих программах вызываете функции API предназначенные для вызова из Си. Ядро созданное Microsoft выделяет вам память,
синхронизирует потоки и т. д. Так где же ваша оптимизация ?



Вопрос отправлен: 22.01.2003, 18:17
Отправитель: konst

[Следующий вопрос >>] [Список вопросов]

Отвечает Igoryk

Доброе время суток, konst!
Я лично не вызываю. Ты иммеешь в виду __imp__??? Так это только MASM и WASM используют.

Ответ отправлен: 24.01.2003, 18:24
Отправитель: Igoryk


Отвечает masquer

Здравствуйте, konst!
Ну путай божий дар с яичницей.
А, кстати, что ты предлагаешь? Писать программы под винды и не использовать апи функции (даже неявно через LoadLibrary->GetProcAddress). Я с удовольствием посмотрю на такую программку.
Да, раз уж оптимизировать, то глобально - пользоваться прерываниями в досе тоже запретим - нету никакой оптимизации.
Бред... (это о вопросе)

Ответ отправлен: 22.01.2003, 18:38
Отправитель: masquer


Отвечает St

Привет, konst!
Чем хорош ассемблер, так это тем что если вам не нравится как сделана какая-либо функция, то вы можете сделать свою такую же, причем часто разными способами. Например, я когда-то писал блокнот с усиленными возможностями поиска и замены. Так в некоторых случаях вместо использования API, я использовал свои варианты некоторых функций. В результате замена 40 кб текста из букв A на буквы Б происходило быстрее чем во всех протестированных редакторах (штук 10 и под винды и под дос), кроме досовского Norton Editor. Так что всё в ваших руках!
St

Ответ отправлен: 22.01.2003, 20:37
Отправитель: St


Отвечает Bob Johnson

Здравствуйте, konst!
Ну, в принципе, все здесь уже согласились, что без особых на то причин проги целиком на асме не пишут. Особые причины - это желание изучить асм, получить минимальную длину программы или максимальное быстродействие. Фанатичное безумство программиста тоже может являться причиной.
> Ядро, созданное Microsoft выделяет вам память
Я, может быть, старомоден, но мне кажется, что уж ядро windows (vmm) написано на ассемблере
Знаешь, твой вопрос риторичен... Не хочешь - не учи, заставлять тебе, конечно, никто не будет. Кроме оптимизации есть еще другие применения асму. Самое простое - если ты выучил асм одного процессора, выучить асм другого тебе будет значительно проще. А вот это тебе может пригодиться, если ты собрался pic контроллер освоить или еще что-то. Ну и все такое...
Да, как у тебя там с драйверами на Visual Basic?


Ответ отправлен: 23.01.2003, 00:07
Отправитель: Bob Johnson


Отвечает ASMодей

Приветствую Вас, konst!
А оптимизация - между ними ;)
Если серьезно, то оптимизация присутствует, в основном, в
алгоритмах программы. Например если тебе для обработки каких-то
данных надо несколько сотен раз получить косинус, то лучше
использовать свой алгоритм, написанный для решения именно
этой задачи, а не бибилиотечный.
А функции API - это в большинстве своем функции для получения
или вывода информации и они не используются при работе с данными.


Ответ отправлен: 23.01.2003, 16:55
Отправитель: ASMодей



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (38)
C / C++ (29)
Perl (5)
Delphi (18)
Pascal (22)
Basic / VBA (12)
Java / JavaScript (10)
PHP (6)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (29)
"Железо" (34)
Поиск информации (19)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (14)
Юристу
Гражданское право (10)
Семейное право (6)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное