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

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


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

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

Выпуск № 744
от 27.06.2004, 16:40

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


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

bocha
Статус: Опытный
Общий рейтинг: 147.19
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 137.79
URL: Программирование
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 134.07
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
 
n0name
Статус: Начальный
Общий рейтинг: 109.92
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 111.45
[Подробней >>]
flasher
Статус: Начальный
Общий рейтинг: 104.19
[Подробней >>]
 
Стас
Статус: Опытный
Общий рейтинг: 128.4
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.69
[Подробней >>]
Portnov
Статус: Профессиональный
Общий рейтинг: 105.19
URL: Мой сайтик...
[Подробней >>]


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

Вопрос № 5484. Подскажите пожалуйста, как обработать командную строку после вызова GetCommandLine? Нужно для запуск... (ответов: 2)
Вопрос № 5485. Здравствуйте, эксперты! Может кто подскажет, есть ли программа, которая по исходнику программы выдае... (ответов: 1)
Вопрос № 5486. Здравствуйте! Один из экспертов под ником bocha написал следующее: “…при помощи профилировщика, опти... (ответов: 3)
Вопрос № 5488. Сразу извиняюсь за тупые вопросы ))) Я только начинаю ))) Как мне можно написать програму, чтобы о... (ответов: 2)
Вопрос № 5489. Экспертам Hi! Помогите разобратся в азах Assemblerа. Как установить и как запускать. А дальше сам ка... (ответов: 1)
Вопрос № 5490. Ув.эксперты есть трабла. Делал под Милениум программу - запускается из программы другая функцией Win... (ответов: 2)
Вопрос № 5492. Здравствуйте ув. Эксперты! Вопросы такие: 1)Как располагаются даннные структуры? И если друг за друг... (ответов: 2)
Вопрос № 5493. Добрый день! Известно, что программа на асм-е занимает обычно меньше места, чем аналогичная на Си. (... (ответов: 5)
Вопрос № 5494. Я только начал программировать и использую пакет TASM. Когда я вызываю процедуры Win32, то возникают... (ответов: 1)
Вопрос № 5495. как получить текстовую информацию введенную в диалоговом окне (ресурс Windows) перевести в числовой ... (ответов: 1)
Вопрос № 5496. Добрый день! Очень бы хотелось получить хоть какую-то информацию по анализу структуры html-страницы,... (ответов: 1)
Вопрос № 5497. Здравствуйте уважаемые эксперты! Насколько мне известно, в MS-DOS имеются так называемые драйвера мы... (ответов: 4)

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


 Вопрос № 5484

Подскажите пожалуйста, как обработать командную строку после вызова GetCommandLine? Нужно для запуска проги в свернутом виде. Есть подозрение что монжо обойтись и без командной строчки, но как не знаю (многие проги в автозапуске запускаются без каких-либо параметров.
Спасибо



Вопрос отправлен: 20.06.2004, 02:47
Отправитель: Alex

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

Отвечает bocha

Здравствуйте, Alex!
1.Как с любой другой. Если бы написал еще, что сделать с ней хочешь... М.б. и есть среди экспертов телепаты, но я к ним не отношусь. Хоть Антон Палыч и писал, что краткость сестра таланта, но чем подробней написан вопрос, тем проще на него ответить. Очень часто при правильной формулировке вопроса, его и задавать никому не придется, т.к. сам на него ответишь. Строка возвращается в формате:"полное длинное имя файла в кавычках" аргументы.
2.Читают настройки из ини, реестра или другого файла, имеют настройки по умолчанию, либо не настраиваются вообще.

Ответ отправлен: 20.06.2004, 07:28
Отправитель: bocha


Отвечает Bob Johnson

Доброе время суток, Alex!
Руками - проходишь по ней, разделяешь ее на логические единицы (параметры) и анализируешь их. Если у тебя НТ система и не пугает unicode, используй функцию CommandLineToArgvW

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 22.06.2004, 01:05
Отправитель: Bob Johnson


 Вопрос № 5485

Здравствуйте, эксперты!
Может кто подскажет, есть ли программа, которая по исходнику программы выдает блок-схему. Буду рад любым ссылкам. Заранее благодарен,
EraSer



Вопрос отправлен: 20.06.2004, 09:02
Отправитель: EraSer (eraser99@tut.by)

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

Отвечает Евгений Иванов

Здравствуйте, EraSer!
Это довольно сложно, почти невозможно.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 20.06.2004, 13:23
Отправитель: Евгений Иванов


 Вопрос № 5486

Здравствуйте!
Один из экспертов под ником bocha написал следующее:
“…при помощи профилировщика, оптимизируется код на языке высокого уровня…”
Напишите, пожалуйста, можно ли достать этот профилировщик и подскажите ссылки на литературу об оптимизации или использования профилировщика.



Вопрос отправлен: 20.06.2004, 09:58
Отправитель: Alexander

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

Отвечает n0name

Здравствуйте, Alexander!
С помощью профилировщика находятся hotspot'ы. Горячие точки.
Лит-ра:
Оптимизация программ Криса Касперски

Ответ отправлен: 21.06.2004, 08:51
Отправитель: n0name


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

Здравствуйте, Alexander!
Поищи статью Криса Касперски "Техника Оптимизации Программ"

Ответ отправлен: 21.06.2004, 13:01
Отправитель: ASMодей


Отвечает bocha

Приветствую Вас, Alexander!
В VC6, EE и PE, в SE нет. ProjectSetings -> Link -> флажек enable profiling

Ответ отправлен: 20.06.2004, 10:18
Отправитель: bocha


 Вопрос № 5488

Сразу извиняюсь за тупые вопросы ))) Я только начинаю ))) Как мне можно написать програму, чтобы она введенное слово с клавиатуры сохраняло в файл ? Буду благодарен за исходник



Вопрос отправлен: 20.06.2004, 14:55
Отправитель: Andruew (andruew@mail.ru)

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

Отвечает flasher

Доброе время суток, Andruew!
http://www.danil.com.ua/keyspy1.htm

Ответ отправлен: 20.06.2004, 20:46
Отправитель: flasher


Отвечает Стас

Приветствую Вас, Andruew!
Переделал одну из ...
TASM4.1.

Приложение:

Ответ отправлен: 20.06.2004, 21:07
Отправитель: Стас


 Вопрос № 5489

Экспертам Hi! Помогите разобратся в азах Assemblerа. Как установить и как запускать. А дальше сам как-нибудь.



Вопрос отправлен: 20.06.2004, 20:10
Отправитель: Kocapb

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

Отвечает bocha

Добрый день, Kocapb!
Вообще-то не мешало бы заглянуть в архив рассылки, данный вопрос поднимался не раз. Для установки нужно распаковать архив с ассемблером в любую папку, и все, установка завершена... Можно, но необязательно, установить пути к папкам bin, include, lib, настройка завершена... Далее пишешь текст программы в любом текстовом редакторе, сохраняешь. Затем в командной строке собираешь программу, формат строки зависит от используемого ассемблера. Можно воспользоваться каким-нибуть специализированым редактором, с настраиваимыми командами компиляции и сборки, но имхо на первых порах более полезно это делать ручками.

Ответ отправлен: 21.06.2004, 06:48
Отправитель: bocha


 Вопрос № 5490

Ув.эксперты есть трабла.
Делал под Милениум программу - запускается из программы другая
функцией WinExec, далее первая программа завершается вторая -
продолжает работать все работало нормально, а под ХР с завершением первой программы завершается и вторая.Запускаю вторую
перед самым выходом.Пробовал через LoadModule - тоже самое.
Как можно запустить вторую программу, чтобы она не вылетала спервой желательно через эти функции.Или хотя бы подскажите, как
завершить первую из второй(хендл первой не известен).Может
быть можно завершить процесс породивший текущий?
Спасибо.



Вопрос отправлен: 20.06.2004, 20:31
Отправитель: farby

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

Отвечает bocha

Здравствуйте, farby!
WinExec
LoadModule
для обоих ф-й:
Note This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.
Используй CreateProcess, ShellExecute, в соответствии с рекомендациями

Ответ отправлен: 21.06.2004, 05:48
Отправитель: bocha


Отвечает Bob Johnson

Добрый день, farby!
Ты используешь устаревшие функции - используй более новую, например CreateProcess.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 22.06.2004, 01:02
Отправитель: Bob Johnson


 Вопрос № 5492

Здравствуйте ув. Эксперты!
Вопросы такие:
1)Как располагаются даннные структуры? И если друг за другом то:
2)Есть proc загрузки текстуры из файла (см. Приложение), где TexAddr адрес структуры текстуры (адрес буфера данных,ширина,высота и т.д).Почему прога вылетает с ошибкой?
(Причём при записи длины или высоты)
Заранее всем благодарен!


Приложение:


Вопрос отправлен: 22.06.2004, 01:09
Отправитель: varyag

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

Отвечает Евгений Иванов

Доброе время суток, varyag!
;)
круто ты сделал..
ты передаёшь адрес структуры в подпрограмму?
тогда делай так:
mov esi,[TexAddr]
mov dword ptr[esi+4],TWidth
mov dword ptr[esi+8],THeight
и это не правильно:
mov dword ptr [TexAddr],eax
просто оставляй выходное значение в EAX.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 22.06.2004, 21:35
Отправитель: Евгений Иванов


Отвечает Стас

Приветствую Вас, varyag!
Я в виндовском ASM разбираюсь наверное хуже тебя, тем не менее вот, что могу сказать:
Когда ты делаешь call LoadTexture ты погружаешь в стек offset на структуру? (не саму же структуры в стек запихиваешь!)
А внутри LoadTexture ты присваеваешь eBP=месту где лежит Offset структуры, и начинаешь вокруг и около стек менять. А нужно структуру!
Т.е. нужно в LoadTexture сделать примерно так:
push ebp
mov ebp,dword ptr [eSP+8] ;указатель на структуру
mov dword ptr[eBP+4],TWidth
mov dword ptr[eBP+8],THeight
при условии что SS=DS данные попадают куда надо! (иначе используй другой регистр либо префикс)
...
mov dword ptr [eBP],eax ;<- Теперь нормально
leave
ret 4

Ответ отправлен: 22.06.2004, 12:36
Отправитель: Стас


 Вопрос № 5493

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



Вопрос отправлен: 22.06.2004, 11:25
Отправитель: soflot (soflot@ukr.net)

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

Отвечает Евгений Иванов

Доброе время суток, soflot!
Эти блоки кода используются для поддержания работы С-программы.
Чем больше ты используешь высокоуровневых возможностей, то тем больше этих установок и настроек.
Используя Ассемблер, это придётся нужно делать вручную.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 22.06.2004, 21:36
Отправитель: Евгений Иванов


Отвечает bocha

Добрый день, soflot!
Размер исполняемого файла зависит не от заголовка, а от подключаемых библиотек. Вот такая прога(VC6) весит ровно один килограмм, для винды и на асме, меньше не получишь(заголовок PE + секция кода 512б (меньше нельзя))
#include <windows.h>
#pragma comment(linker, "-merge:.rdata=.text")
#pragma comment(linker, "-align:=512")
extern "C" void WinMainCRTStartup()
{
ExitProcess(0);
}
Добавь сюда какие-нибуть данные, получишь еще не менее пол кило, подключи сюда какю-нибуть библиотеку, требующую инициализации(например сишную RTL) и получишь кроме необходимых функций, еще кучу функций требующихся при инициализации и подключаемых "по умолчанию"

Ответ отправлен: 22.06.2004, 20:08
Отправитель: bocha


Отвечает Ayl

Доброе время суток, soflot!
Потому что проект на асме пишется программистом, а прога на Си - в основном, компилятором. Поясняю. При программировании на ЯВУ программист не заморачивается вопросами размещения переменных, вызовами подпрограмм и т.п. Это все возлагается на компилятор. Так же как распределение памяти и т.п. А пока компиляторы не настолько умны, как люди. Поэтому они действуют по шаблону, который подходит для любых проектов. А на асме человек может выбрать наиболее подходящий вариант именно для данной процедуры.
Кроме этого, при программировании на ЯВУ для обеспечения нормальной работы программы требуется подключение стандартных библиотек, по крайней мере, библиотеки времени выполнения (Run-Time Library). Она включается в любую программу, даже в пустую. А на асме это делать не надо, даже в больших проектах.


Ответ отправлен: 22.06.2004, 14:06
Отправитель: Ayl


Отвечает Portnov

Здравствуйте, soflot!
Ну, кроме инициализации, там еще стандартные библиотеки...
Нужны они или не нужны - вообще говоря, зависит от конкретной программы. Однако подавляющее большинство компиляторов не желают вникать в смысл написанного вами кода (или не могут), и "на всякий случай" включают в исполнимый файл стандартный набор библиотек и инициализирующих функций. При программировании на асме, включать те или иные библиотеки и функции или нет - зависит только от вас. Конечно, объем кода (в том числе инициализирующего) будет и на асме расти с увеличением сложности программы. Например, если вы в своей программе на асме используете принципы ООП, то вам волей-неволей придется в самом начале программы инициализировать таблицы виртуальных функций и выполнять еще кучу рутинной работы. А компилятор Си++ включит в исполнимый файл этот код вне зависимости от того, используете ли вы ООП в своей программе - грубо говоря, ему лень разбираться.
С уважением, Portnov.

Ответ отправлен: 22.06.2004, 13:58
Отправитель: Portnov


Отвечает Стас

Добрый день, soflot!
Си не ассемблер ему надо сделать СВОЮ инициализацию, свои переменные обнулить, свою память зарезервировать и т.д.
На ASMе ты это делаешь сам по мере надобности.
Проги на C значительно больше не только из-за заголовока, но и сам код несколько "коряв". Например я отлаживая Сишную прогу видел такие участки:
mov ax,1234
pop ax
или что то вроде этого...

Ответ отправлен: 22.06.2004, 12:45
Отправитель: Стас


 Вопрос № 5494

Я только начал программировать и использую пакет TASM. Когда я вызываю процедуры Win32, то возникают проблемы.
Просмотрите эту простинькую программу.
.386
extern AllocConsole : proc
extern ExitProcess : proc
data segment para public \'data\' use32
per db 0
data ends
code segment para public \'code\' use32
main:
call AllocConsole
exit:
push 0
call ExitProcess
code ends
end main
Программа транслируется без ошибок, а вот компилятор сообщает об ошибках, в месте вызова этих 2 процедур.
Если указать вызов следующим образом:
и вторую процедуру также вызвать, то исполняемый модуль создается. Только запустив его Windows сообщает, что программа вызвала недопустимую ошибку.
Еще, я получил успешно работающую эту же программу с помощью пакета MASM встроенного в TASM. Сравнил файлы листинга 2 программ, для работающей (написанного с помощью MASM ) строка вызова процедуры имеет вид: 0E8 00000000e
не работающая: 0E8 0000e
Для получения 2-х исполняемых файлов я использовал один и тот же .bat файл.
Перепробовал разные варианта у меня ничего не получается. Подскажите в чем проблема, что я не учел, как ее решить?



Вопрос отправлен: 22.06.2004, 13:32
Отправитель: Alexcey

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

Отвечает Евгений Иванов

Здравствуйте, Alexcey!
Посмотри мои исходники, там всё есть. И не изобретай велосипед!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 22.06.2004, 21:36
Отправитель: Евгений Иванов


 Вопрос № 5495

как получить текстовую информацию введенную в диалоговом окне (ресурс Windows) перевести в числовой формат если вводится цифра и затем сложить с числом заданным как константа в программе и соответственно выдать в виде любого msgbox результат/язык написания tasm5.0



Вопрос отправлен: 22.06.2004, 14:22
Отправитель: dengubenko

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

Отвечает bocha

Здравствуйте, dengubenko!
Извините, тасм я плохо знаю, да и под винду лучше (имхо) масм, поэтому и пишу в его синтаксисе. Процедура обработки сообщений на вашего диалогового окна выглядеть должна примерно так

Приложение:

Ответ отправлен: 22.06.2004, 17:59
Отправитель: bocha


 Вопрос № 5496

Добрый день! Очень бы хотелось получить хоть какую-то информацию по анализу структуры html-страницы, т.е. разбор его внешней программой и выделение нужных блоков. Задаю вопрос всем, т.к. возможно кто-то знает хотя бы направление, в котором надо идти (общий случай).
Если не затруднит - пожалуйста пишите на поту.
С уважением, Stein.



Вопрос отправлен: 22.06.2004, 17:50
Отправитель: Stein (stein@fromru.com)

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

Отвечает Евгений Иванов

Добрый день, Stein!
Смотри мой исходник программы HTM2.
http://superforest.narod.ru/research_htm2.htm

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 22.06.2004, 21:37
Отправитель: Евгений Иванов


 Вопрос № 5497

Здравствуйте уважаемые эксперты!
Насколько мне известно, в MS-DOS имеются так называемые драйвера мыши. Они перехватывают аппаратное прерывание от соответствующего мыше порта и каки-то образом переводят данные в доступный прикладным программам вид... Но как ими воспользоватся?
И еще один вопрос: не мог бы кто-нибудь сказать, где можно найти машинные коды команд процессоров 186 и старше, а также коды средств 32 разрядного режима (32 разрядные регистры и все команды с ними)?
Заранее благодарен за ответ -- Nikita



Вопрос отправлен: 23.06.2004, 16:36
Отправитель: Nikita

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

Отвечает Евгений Иванов

http://superforest.narod.ru/research_mou3.htm
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 25.06.2004, 21:01
Отправитель: Евгений Иванов


Отвечает Ayl

Добрый день, Nikita!
Для прикладных программ для работы с мышью предназначен интерфейс прерывания 33h. Посмотри его описание.


Ответ отправлен: 23.06.2004, 17:30
Отправитель: Ayl


Отвечает Portnov

Доброе время суток, Nikita!
1. См. в TechHelp по теме int33h.
2. Начиная с 386 все команды, их описания и опкоды есть в мануалах от интела. См. developer.intel.com.
С уважением, Portnov.

Ответ отправлен: 24.06.2004, 14:41
Отправитель: Portnov


Отвечает Стас

Приветствую Вас, Nikita!
Прерывание INT 33h.
In:AX=0(сброс драйвера) Out:AX=0 нет драйвера, ffff все ок! BX=0 колво кнопок не 2, 2-две кнопки, 3-три кнопки.
In:AX=1(Показать курсор мыши).
In:AX=2(Спрятать курсор мыши).
In:AX=3(Получить коорд.) Out:BX-бит 0 левая кнопка нажата, 1 правая, 2 средняя. CX=X(горизонт.), DX=Y(верт.)
In:AX=4(Переместить курсор) CX=X, DX=Y
In:AX=5(Информация о нажатии) BX= бит 0-левая,1-правая,0-средняя. Out: AX - бит 0-левая,1-правая,0-средняя нажаты, BX-количество нажатий после последнего вызова функции, CX-X, DX-Y в момент нажатия.
In:AX=6(Информация о отпускании) аналогично предидущ.
In:AX=7(Ограничение по гориз.) CX-min, DX-max.
In:AX=8(Ограничение по верт.) CX-min, DX-max.
In:AX=9(форма курсора в граф.)BX-ширина с лева, CX-высота с верха, ES:DX-адрес битового поля.
In:AX=10(форма курсора в текст.)BX-0-апаратное,другое программное, CX-маска экрана, маска курсора.
In:AX=11(счетчик шагов) Out: CX-(гориз.) колво шагов перемещения мышы после последнего вызова функции. DX-вертикаль.
In:AX=12(прерывание по условию), CX-биты(0-перемещение,1-нажатие левой кн.,2-отпуск,3-наж.правой... и т.д.) ES:DX - наш обработчик.(In:AX-тоже, BX-состояние кнопок, CX-X, DX-Y, SI-шагов по X, DI -по Y; FAR RET)

Ответ отправлен: 23.06.2004, 22:18
Отправитель: Стас



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

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (23)
C / C++ (14)
Perl (3)
Builder / Delphi (18)
Pascal (27)
Basic / VBA (7)
Java / JavaScript (4)
PHP (12)
Криптография (8)
WinAPI (12)
Радиоэлектроника (12)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (48)
"Железо" (35)
Поиск информации (15)
Администратору
Windows NT/2000/XP (30)
Linux / Unix (14)
Юристу
Гражданское право (11)
Семейное право (8)
Трудовое право (9)
КоАП (7)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться

В избранное