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

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


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

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

Выпуск № 635
от 08.09.2003, 13:50

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


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

Broken Sword
Статус: Профессиональный
Общий рейтинг: 120.63
URL: мой сайт
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.3
URL: Программирование
[Подробней >>]
Greys
Статус: Доверительный
Общий рейтинг: 119.68
[Подробней >>]
 
_vt
Статус: Профессиональный
Общий рейтинг: 122.1
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.05
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 133.99
[Подробней >>]
 
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 147.32
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.69
[Подробней >>]
St
Статус: Профессиональный
Общий рейтинг: 106.69
[Подробней >>]
 
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 107.29
URL: Beeblebrox / TMA HomePage
[Подробней >>]
Никита
Статус: Начальный
Общий рейтинг: 103.12
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 107.23
URL: Savage Metal Club - жизнь в стиле рок-н-ролл
Телефон: +7 901 710 3146
[Подробней >>]
 
Lynx
Статус: Профессиональный
Общий рейтинг: 116.2
Телефон: (8442) 750522
[Подробней >>]
GL
Статус: Опытный
Общий рейтинг: 102.52
[Подробней >>]
Eugene
Статус: Профессиональный
Общий рейтинг: 106.39
URL: мощный файловый архив
[Подробней >>]


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

Вопрос № 4074. Доброго время суток! У меня програма переходит в защ. реж. и GDT загружатся по адресу 0100h:0000h. К... (ответов: 3)
Вопрос № 4075. Уважаемые эксперты! Мой вопрос как продолжение и уточнение к вопросу № 4001. Я работаю с Windows Me ... (ответов: 1)
Вопрос № 4076. Здравствуйте, Эксперты!!!!!!!!! 0) Как дела? По Direct3Drm: 1) Где взять докуме... (ответов: 1)
Вопрос № 4077. Здравствуйте, уважаемые эксперты! В VC++6.0 пытаюсь создать файл асм вставкой (в приложении). Не пол... (ответов: 5)
Вопрос № 4078. Хлопцы, подскажите как в МАСМЕ подавить подчеркивание перед функциями и в конце функций ставит подле... (ответов: 3)
Вопрос № 4079. Почему при вызове функции DOS 48h (выделение блока памяти), всегда происходит ошибка #8 (нехватка па... (ответов: 5)
Вопрос № 4080. Ув. эксперты помогите Мне нужна версия 1.5 программы Help Development Studio, либо ключ к версии 1.8... (ответов: 1)
Вопрос № 4081. Уважаемые, Эксперты , есть надобность на ассемблере написать программу которая садится в трей , даже... (ответов: 1)
Вопрос № 4082. Интервью с разработчиками сайса: http://www.fcenter.ru/articles.shtml?interview/7386... (ответов: 2)
Вопрос № 4083. Приветствую глубокоуважаемых экспертов ! Такая проблемка - валяется в WINNT файлик со странным имене... (ответов: 2)
Вопрос № 4084. Здравствуйте, Эксперты! Можно ли (и если да, то как - ключи линкера) с помощью ТАСМ 5 (5.3) получить... (ответов: 4)

Вопросов: 11, ответов: 28


 Вопрос № 4074

Доброго время суток!
У меня програма переходит в защ. реж. и GDT загружатся по адресу 0100h:0000h.
Как при этом мне загружать GDTr?
Спасибо за ответы!



Вопрос отправлен: 02.09.2003, 18:38
Отправитель: Madman (yo-ho@km.ru)

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

Отвечает Broken Sword

Здравствуйте, Madman!
если точно по этому адресу, то тогда GDT base должно быть равно 1000h, а лимит - какой получиться.
Т.е. вот такая структура у тебя в программе
gdt_size = $-GDT ; идет после GDT
gdtr dw gdt_size-1
dd 1000h
а загружать GDTR нада так: lgdt fword ptr lgdt
на письмо отвечу чуть позже

Ответ отправлен: 03.09.2003, 00:18
Отправитель: Broken Sword


Отвечает Bob Johnson

Доброе время суток, Madman!
В реальном режиме адрес 0100h:0000h соответствует адресу 01000h. Вот его и загружай в GDTR.

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


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


Отвечает Greys

Приветствую Вас, Madman!
; Загрузка регистра GDTR:
lgdt [gd_reg]
gd_reg:
dw 8192 ;предел(размер GDT-1)
dd gdt;адрес GDT
С уважением,GREYS!

Ответ отправлен: 04.09.2003, 22:50
Отправитель: Greys


 Вопрос № 4075

Уважаемые эксперты!
Мой вопрос как продолжение и уточнение к вопросу № 4001.
Я работаю с Windows Me и установил SoftIce v 4.05. При запуске Symbol Loader появляется строка “SoftICE is not active. Symbols cannot be loaded.” Понятно, что незагружен winice.exe. На любые попытки загрузить winice из командной строки или используя реестр появляется сообщение “Enhanced Windows 386 is already running”. Понятно мне сообщают, что SoftIce должен быть загружен до системы, но как это сделать. Подскажите возможен запуск SoftIce из Windows Me.
Спасибо.
Александр.



Вопрос отправлен: 02.09.2003, 20:29
Отправитель: Александр (tavo@permonline.ru)

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

Отвечает _vt

Доброе время суток, Александр!
Очень плохо помню ME, вроде как он не обрабатывает autoexec.bat по умолчанию... Но так как в NT-системах в реестре есть параметр ParseAutoexec, который можно выставить в 1, и autoexec будет обрабатываться, могу предположить, что такая фича есть и в МЕ... Пропиши в autoexec.bat (возможно установщик сайса прописал там запуск сам, но обработка autoexec отключена, вот и не грузится...)

---===*** Updated E-Man 1.5 - it's cool!***===---


Ответ отправлен: 02.09.2003, 22:49
Отправитель: _vt


 Вопрос № 4076

Здравствуйте, Эксперты!!!!!!!!!
0) Как дела?
По Direct3Drm:
1) Где взять документацию по программированию 3D графики через DirectX в режиме Retained Mode, т.е. описание функций, констант На русском или английском?
2) Как в Retained Mode "натягивать" текстуры на Mesh-объекты?
По Hook:
3) Как можно с помощью ловушки ловить ВСЕ нажимаемые клавиши (также и в консольных приложениях)?
4) Как отловить сообщение о завершении(перезагрузке) работы Windows.
P.S.: Тигран молодец - наиболее популярные вопросы собрал вместе.
Конечно, это все общие простые вопросы, ориентированные на asm'овцов, но там есть, что почитать всем.
Особенно закономерным был ответ Тиграна на вопрос "Зачем нужен ASM?" - он, как всегда, повернул в сторону портов и "самопальных" устройств.
Ответ на этот извечный вопрос Боба на его сайте немного менее предвзятый, т.е. "ASM позволяет лучше понять/узнать устройство компьтера"...
Это просто заметка.
Ещё хотел бы Евгению Иванову передать привет и сказать, чтобы он как можно реже использовал светлые цвета в ответах, а то читать невозможно.
Спасибо.



Вопрос отправлен: 02.09.2003, 22:07
Отправитель: URiS (urisff@inbox.ru)

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

Отвечает Bob Johnson

Приветствую Вас, URiS!
> 1) Где взять документацию...
Ну даже не знаю, но ты яндекс спрашивал? Вот, например, одна ссылка: http://www.programme.ru/archive/2001/5/052001_4_1.phtml, а вот - другая: http://pmg-ru.narod.ru/russian/rm02.htm...
Вообще же эта информация есть в MSDN и в DirectX SDK (тут я думаю тебе нужна версия 6). Кстати, а зачем тебе этот режим, ведь он - отстой?
> 3) Как можно с помощью ловушки ловить ВСЕ нажимаемые клавиши
Используй другой тип хука (под НТ есть WH_KEYBOARD_LL, который работает везде).
> 4) Как отловить сообщение о завершении(перезагрузке) работы Windows.
Тебе (твоему окну) придет сообщение WM_QUERYENDSESSION.
> P.S.: Тигран молодец - наиболее популярные вопросы собрал вместе.
Согласен.
> Конечно, это все общие простые вопросы, ориентированные на asm'овцов
:) Ну так и faq-то по асму! Да и в faq всегда вносят именно простые вопросы...
> Ответ на этот извечный вопрос Боба на его сайте немного менее предвзятый
Не понял - это мой извечный вопрос? Да ну, я никогда его не задавал ни себе, ни кому-либо другому, потому что считаю, что асм должен лежать в начале иерархической лестницы изучаемых языков программирования. Другое дело, что изучать асм ради этого обычный юзерский программер вряд ли станет, но в этой ситуации его программы будут хуже, чем если бы он его все-таки изучил.

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


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


 Вопрос № 4077

Здравствуйте, уважаемые эксперты!
В VC++6.0 пытаюсь создать файл асм вставкой (в приложении). Не получается. Если использовать Сишную строчку CreateFile ((char*)&filename, и тд) то все получается, а вот асм вставка выдает какую то ошибку при отладке: "Unhandled exception in prog.exe: 0xC00..05: Access Violation" Вот так ;(
Пасибо


Приложение:


Вопрос отправлен: 03.09.2003, 11:59
Отправитель: Faraon (faraon@hotmail.kz)

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

Отвечает vitya

Здравствуйте, Faraon!
1. сначала надо push esi
2. потом не советую передавать как второй параметр 0.


Ответ отправлен: 04.09.2003, 13:19
Отправитель: vitya


Отвечает masquer

Доброе время суток, Faraon!
Может
mov esi, filename
и у меня только так получилось
mov eax, [CreateFile]
call eax

Ответ отправлен: 03.09.2003, 12:17
Отправитель: masquer


Отвечает _vt

Приветствую Вас, Faraon!
Как не пытался добиться от VC6 каких-то результатов - исключение "Privileged instruction" :-((
А вот С++ Builder 6 ("борландовская поделка", как некоторые говорят :-)) нормально отреагировал - и запускается и файл создается... :-)

---===*** Updated E-Man 1.5 - it's cool!***===---


Ответ отправлен: 03.09.2003, 13:52
Отправитель: _vt


Отвечает Bob Johnson

Доброе время суток, Faraon!
В VC++ надо писать:

Call dword ptr [CreateFile]

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


Ответ отправлен: 03.09.2003, 14:32
Отправитель: Bob Johnson


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

Добрый день, Faraon!
Проблема с адресами...


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


 Вопрос № 4078

Хлопцы, подскажите как в МАСМЕ подавить подчеркивание перед функциями и в конце функций ставит подлец - @0. Т.е. public функция MyFunc в OBJ выглядит как _MyFunc@0
Спасибо



Вопрос отправлен: 03.09.2003, 13:02
Отправитель: имя

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

Отвечает _vt

Здравствуйте, имя!
А тебе не все равно? Вроде так положено у M$, если будешь пользовать TASM - всё будет в нормальном виде...

*** Updated E-Man 1.5 - it's cool! Join to us, if you're a real rusfaq expert! :-()***


Ответ отправлен: 03.09.2003, 20:23
Отправитель: _vt


Отвечает Ayl

Приветствую Вас, имя!
Похоже, что MASM не поддерживает такую опцию, только опции с регистрозависимыми именами.
Попробуй в свем коде заменить все PUBLIC и EXTRN таким образом:
Было: PUBLIC MyFunc
Стало: PUBLIC Pascal MyFunc

Было: EXTRN MyFunc
Стало: EXTRN Pascal MyFunc

Правда, в этом случае он переведет все идентификаторы к заглавные буквы. Но, думаю, это не страшно.
А насчет @0 я не знаю... Как тебе удалось это получить? Хотя бы пример прислал, что ли. И командную строку для компиляции.
Хотя возможно, что указание паскаль-соглашения поможет и в этом случае.

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


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

Доброе время суток, имя!
Языковые вещи: или С++, или Windows.
Попробуй STDCALL.


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


 Вопрос № 4079

Почему при вызове функции DOS 48h (выделение блока памяти), всегда происходит ошибка #8 (нехватка памяти), а в BX - 0 ?
Sysinfo 6 показывает более 300 кб памяти.
Заранее спасибо!



Вопрос отправлен: 03.09.2003, 15:46
Отправитель: AlX

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

Отвечает St

Привет, AlX!
Может быть вы забыли сначала освободить память ненужную вашей программе, но принадлежащую ей?
St

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


Отвечает Beeblebrox

Приветствую Вас, AlX!
А ты перед этим освободил память? Ведь у тебя, небось, COM-файл?

Ответ отправлен: 03.09.2003, 16:12
Отправитель: Beeblebrox


Отвечает Ayl

Здравствуйте, AlX!
Стандартная ошибка. Файл небось типа COM? При загрузке таких файлов ДОС выделяет процессу всю доступную на данный момент память, поэтому выделить "еще немножко" уже не может. Для того, чтобы в процессе работы можно было выделять память, надо при старте программы освободить незанятую. Как это может выглядеть - см.в Приложении.

Сначала прога выводит максимальный объем доступной памяти после загрузки программы. Потом переносит свой стек и освобождает память по максимуму. Снова выводит размер максимального блока. Потом пытается выделить 34h параграфа. Если получается - выводит сообщение, что память выделена, иначе - что памяти нет. В конце опять выводит размер блока памяти.

Неболшое замечание. ДОС выделяет не всю доступную память, а весь блок памяти, в который загружается прога. Например, если запустить командную строку ДОС и выполнить мою прогу, то результат будет такой:

Свободно: 0000
Свободно: 8FF9
Память выделена успешно!
Свободно: 8FC4

Все происходит, как и должно быть. Прога загрузилась и захватила всю память (свободно - 0 параграфов). Потом освободила ненужное (получили 8FF9 свободных параграфов, около 575К), потом выделили 34h параграфов и получили свободное место в 8FC4 параграфа. Замечу, что 8FF9 - 8FC4 = 35 = 34 + 1. Один лишний параграф расходуется на заголовок в цепочке MCB - Memory Control Block.

Но если потом запустить, например, keyrus, то результат изменится:

Свободно: 0007
Свободно: 8D31
Память выделена успешно!
Свободно: 8CFC

То есть ДОС имеет свободный кусок памяти размером в 7 параграфов после запуска программы! Происходит это из-за того, что keyrus, будучи резидентной программой, после своей загрузки освобождает часть памяти, занимаемой загрузчиком. Но этот освобожденный блок не привязывается к блоку, в который загружается моя прога. В результате он по-прежнему остается свободным.

Приложение:

Ответ отправлен: 03.09.2003, 16:59
Отправитель: Ayl


Отвечает _vt

Доброе время суток, AlX!
А откуда ты ее вызываешь?? По умолчанию, при запуске вся свободная DOS-память уже отдана программе, и для выделения блока памяти надо переопределить эти размеры функцией 4Eh(realloc - в языке С)... Ужимаешь память основной программы этой функцией и уже потом выделяешь блок памяти функцией 48h... Думаю, пример приводить не стоит - если не понятно - архив рассылки по DOS

*** Updated E-Man 1.5 - it's cool! Join to us, if you're a real rusfaq expert! :-()***


Ответ отправлен: 03.09.2003, 20:23
Отправитель: _vt


Отвечает Bob Johnson

Добрый день, AlX!
Потому что изначально вся свободная память отдается твоей программе. Ты прежде всего должен изменить размер выделенного тебе блока на нужный (кажется 4Ah) а уже потом дополнительно выделять еще память.

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


Ответ отправлен: 03.09.2003, 21:09
Отправитель: Bob Johnson


 Вопрос № 4080

Ув. эксперты помогите
Мне нужна версия 1.5 программы Help Development Studio,
либо ключ к версии 1.8


Приложение:


Вопрос отправлен: 04.09.2003, 00:06
Отправитель: lonfst

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

Отвечает Никита

Приветствую Вас, lonfst!
смотри DownLoad.ru - недавно видел.
Бывай.


Ответ отправлен: 04.09.2003, 16:58
Отправитель: Никита


 Вопрос № 4081

Уважаемые, Эксперты , есть надобность на ассемблере написать программу которая садится в трей , даже желательно чтобы в панель задач не садилась иконка программы только в трей, желательно только костяк программы без лишних деталей ,чтобы легче было понять механизм работы, заранее благодарен.....



Вопрос отправлен: 04.09.2003, 08:03
Отправитель: greg

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

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

Добрый день, greg!

mov esi, ofs nid_0
mov [(t NOTIFYICONDATA esi).hWnd], ebx
mov eax, [wc.hIcon]
mov [(t NOTIFYICONDATA esi).hIcon], eax
Call Shell_NotifyIcon, NIM_ADD, esi
;-------------
Call Shell_NotifyIcon, NIM_DELETE, ofs nid_0



Ответ отправлен: 05.09.2003, 16:44
Отправитель: Евгений Иванов


 Вопрос № 4082

Интервью с разработчиками сайса:
http://www.fcenter.ru/articles.shtml?interview/7386



Вопрос отправлен: 04.09.2003, 08:53
Отправитель: Broken Sword (brokensword@mail.ru)

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

Отвечает Gibbel

Здравствуйте, Broken Sword!
Спасибо. Отправляю в рассылку. ;-)

Ответ отправлен: 04.09.2003, 13:18
Отправитель: Gibbel


Отвечает Lynx

Приветствую Вас, Broken Sword!
Отправил в массы.


Ответ отправлен: 04.09.2003, 22:02
Отправитель: Lynx


 Вопрос № 4083

Приветствую глубокоуважаемых экспертов !
Такая проблемка - валяется в WINNT файлик со странным именем "?" и не открывается даже на чтение. Весьма интересно было бы получить идентификатор или хендл процесса открывшего этот загадочный файл. Может кто подскажет как ?



Вопрос отправлен: 04.09.2003, 10:35
Отправитель: Beetle

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

Отвечает GL

Доброе время суток, Beetle!
Скандиск запустить бы для начала, ведь знак "?" запрещён в имени файла. Может это сбой в структуре каталога.

Ответ отправлен: 04.09.2003, 14:01
Отправитель: GL


Отвечает Eugene

Здравствуйте, Beetle!
А чем ты видишь этот файлик? Это очень похоже на то, как Total Commander показывает файлы, в именах которых есть нестандартные символы. Попробуй посмотреть explorer'ом на этот файл и удалить из него же. Если это не поможет посмотреть какие файлы используются помогут утилы от Sysinternals -> www.sysinternals.com

Ответ отправлен: 04.09.2003, 11:08
Отправитель: Eugene


 Вопрос № 4084

Здравствуйте, Эксперты!
Можно ли (и если да, то как - ключи линкера) с помощью ТАСМ 5 (5.3) получить
*.exe для работы в win2000 (Nt)?



Вопрос отправлен: 04.09.2003, 13:44
Отправитель: Anatoly (tolathome@mail.ru)

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

Отвечает St

Привет, Anatoly!
Что-то вроде:
tasm32 /zi /ml /m2 $(NAME).asm
tlink32 /Tpe /aa /c /x /V4.0 /v $(OBJS),$(NAME),, $(IMPORT), $(DEF)
St

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


Отвечает _vt

Приветствую Вас, Anatoly!
Тебе надо, чтобы программа работала в версиях виндов не ниже 5.0 ???(Win2000=NT5)
Тогда попробуй добавь в ниже приведенную строку ключ /V5.0
Если ты имеешь в виду просто под Win32 любой версии(95/98/ME/NT4/2000/XP), тогда так:
tasm.exe /m /ml prog.asm
tlink32.exe /Tpe /aa /c /x prog.obj

*** Updated E-Man 1.5 - it's cool! Join to us, if you're a real rusfaq expert! :-()***


Ответ отправлен: 04.09.2003, 23:24
Отправитель: _vt


Отвечает Bob Johnson

Приветствую Вас, Anatoly!
Можно, а почему нет? Ключи такие: tlink32 -x -Tpe -ap -c -V4.0
Если хочешь, зайди ко мне на страницу - там в разделе faq есть полный пример батника для компиляции win32 приложения.

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


Ответ отправлен: 05.09.2003, 14:46
Отправитель: Bob Johnson


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

Здравствуйте, Anatoly!
tasm32.exe /mv40 /m9 /t /ml /kh200000 /ie:\asm\include main.asw,main.obj >_errors.obj
tlink32.exe /P /V4.0 /Af:512 /x /Tpe /aa /c main.obj ,main.exe,,,main.def,main.res


Ответ отправлен: 05.09.2003, 16:44
Отправитель: Евгений Иванов



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (35)
C / C++ (28)
Perl (5)
Builder / Delphi (17)
Pascal (21)
Basic / VBA (7)
Java / JavaScript (10)
PHP (10)
Криптография (8)
WinAPI (15)
Пользователю
Windows 95/98/Me (48)
Windows NT/2000/XP (63)
"Железо" (41)
Поиск информации (23)
Администратору
Windows NT/2000/XP (29)
Linux / Unix (10)
Юристу
Гражданское право (8)
Семейное право (5)
Трудовое право (6)
КоАП (5)

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




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


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


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

В избранное