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

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


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

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

Выпуск № 420
от 19.11.2002, 17:00

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


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

Supra
Статус: Опытный
Общий рейтинг: 116.87
[Подробней >>]
keleb-glin
Статус: Начальный
Общий рейтинг: 119.35
[Подробней >>]
Остапенко александр
Статус: Начальный
Общий рейтинг: 111.9
[Подробней >>]
 
Eugene
Статус: Опытный
Общий рейтинг: 111.8
URL: мощный файловый архив
[Подробней >>]
DiGiT[old]
Статус: Опытный
Общий рейтинг: 107.14
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 154.51
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 126.11
[Подробней >>]
Maverick
Статус: Опытный
Общий рейтинг: 137.22
URL: Задачи по ассемблеру
Телефон: 89039415024 (BiLine GSM)
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.48
URL: Страничка обо мне и моих друзьях
[Подробней >>]
 
St
Статус: Опытный
Общий рейтинг: 116.28
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 152.4
[Подробней >>]
Portnov
Статус: Профессиональный
Общий рейтинг: 117.48
URL: Мой сайтик...
[Подробней >>]
 
LIFO
Статус: Профессиональный
Общий рейтинг: 127.48
URL: наш сайт
Телефон: 8 01710 24758
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.36
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 130.29
URL: моя рассылка по Protected Mode
[Подробней >>]
 
Sensey
Статус: Профессиональный
Общий рейтинг: 123
URL: Страничка рассылки по Паскаля...
Телефон: +38 (0572) 41-76-04 дом.
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 120
[Подробней >>]


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

Вопрос № 1796. Доброе время суток эксперты! Относительно асма нахожусь в предчайниковом состоянии, поэтому не обесс... (ответов: 3)
Вопрос № 1799. Здравствуйте Эксперты ! Как определить сгенерированый шестнадцатеричный обьектный код для: DB '26' ... (ответов: 2)
Вопрос № 1800. Здравствуйте Эксперты ! В программа MAINPRO определены переменые QTY как DB, VALUE как DW и PRICE ка... (ответов: 3)
Вопрос № 1801. Здравствуйте эксперты! Как под ДОС правильно открыть файл с длинным именем(LFN 6Ch), только для чтен... (ответов: 3)
Вопрос № 1802. Hello! Необходимо из программы на Delphi посылать в порт LPT значения от 0 до 128. Сделал внешнюю пр... (ответов: 2)
Вопрос № 1803. Как можно отключить меню, вызываемое по кнопке "ПУСК".Я получил его указатель, но уничтожи... (ответов: 1)
Вопрос № 1804. Привет всем, начал недавно изучать Assembler и столкнулся с проблемами, вроде бы правильная программ... (ответов: 7)
Вопрос № 1806. Здравствуйте. Будет интересно ознакомиться с Вашей курсовой работой в которой рассматривается написа... (ответов: 1)
Вопрос № 1808. Доброе время суток masquer! У меня к Вам следующий вопрос. Может, помните, я хочу написать программу... (ответов: 1)
Вопрос № 1810. Hi !Как сохранить связь символических имен в программе COM? То есть если я хочу исследовать EXE про... (ответов: 8)
Вопрос № 1811. Привет эксперты не подскажите почему прграмка не работает ассемблер nasm Заранее спасибо... (ответов: 2)
Вопрос № 1812. Здравствуйте уважаемые эксперты. Прочитал в рассылке вопрос № 1758 по работе с параллельным портом. ... (ответов: 1)
Вопрос № 1813. Здравствуйте!! Не подскажет ли кто-нибудь алгоритм поворота 3-х мерной фигуры (тетраэдр, например) н... (ответов: 3)
Вопрос № 1814. скажите как презагрузить комп и выключить ... дайте рабочий код win9x,amd ответ присылайте на lamac... (ответов: 4)

Вопросов: 14, ответов: 41


 Вопрос № 1796

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



Вопрос отправлен: 14.11.2002, 17:55
Отправитель: Alex

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

Отвечает Supra

Добрый день, Alex!
Можешь и даже нужешь. А почитать ищи, броди....

Ответ отправлен: 15.11.2002, 16:45
Отправитель: Supra


Отвечает keleb-glin

Доброе время суток, Alex!
Насчёт твоего первого вопроса ( про MASM32 и компиляцию под ДОС ). Скомпилировать обычный досовский исходник MASM32 я не смог. Скорее всего это или нельзя сделать или надо копаться и геморроиться, поэтому действительно порекомендую тебе добыть обычный MASM под ДОС или TASM, но MASM под ДОС ,на мой взгляд, предпочтительнее, т.к. было, что MASM компилил то, что не компилировалось в TASM, но не наоборот, к тому же говорят, что из под Виндоуз проги, скомпилированные TASM'ом могут глючить.
Теперь насчёт операционки. Лично у меня стоит Вынь98 и нет проблем с ДОСом, а для Вынь2000 можно работать из сеанса МС-ДОС. Такое можно замутить, если в QEDITOR'е из комплекта MASM32 выбрать в меню FILE - Command Prompt.
Если в Вынь2000 это не сработает, то ничем с этим помочь не могу.
Теперь насчёт чтения про ассемблирование. Все говорят про книги двух авторов: Юрова и Зубкова. Из них я знаком только с первым ( нет времени просто съездить и купить Зубкова ) и знаю, что изложено там действительно подробно, но, чтобы разобраться, нужно время. А ещё лучше, если ты помимо этих книг добудешь архивы этой рассылки ( с самого начала ). Там действительно изложено круче всего (не реклама).

Ответ отправлен: 14.11.2002, 21:56
Отправитель: keleb-glin


Отвечает Остапенко александр

Доброе время суток, Alex!
писать проги под dos с помощью masm32 вполне можно. А что касательно документации: поищи в инете, ее здесь дофига


Ответ отправлен: 15.11.2002, 08:00
Отправитель: Остапенко александр


 Вопрос № 1799

Здравствуйте Эксперты !
Как определить сгенерированый шестнадцатеричный обьектный код для:
DB '26'
DB 26
Как определить ассамблерный шестнадцатеричный обьектыный код для:
DB 26h
DW 2645h
DD 25733h
DQ 25733h
Программма под DOS



Вопрос отправлен: 14.11.2002, 20:30
Отправитель: Петрович

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

Отвечает Eugene

Добрый день, Петрович!
Собственно как в исходнике определяешь, так примерно и получается.
db '26' = 3236
db 26 = 1A
db 26h = 26
dw 2645h = 4526
dd 25733h = 33570200
dq 25733h = 3357020000000000


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


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

Приветствую Вас, Петрович!
Мы же те не кодеры чтобы по кодам представлять команды, а дизассемблить сам делай

Ответ отправлен: 15.11.2002, 09:14
Отправитель: DiGiT[old]


 Вопрос № 1800

Здравствуйте Эксперты !
В программа MAINPRO определены переменые QTY как DB, VALUE как DW и PRICE как DW.
программа делит VALUE на QTY и записывает частное в PRICE.
1.как в программе MAINPRO указать ассемблера, что три переменные должны быть доступны другим программам ?
2.каким образом подпрограмма SUBPRO указывает Ассемблеру, что три переменные определены в другом модуле ?
3.Как зделать, что бы программа MainPRO передавала все три переменные как параметры.
Подпрограмма SUBPRO должна возращать результат через параметр ?
4.какую директиву нужно указать в программе MAINPRO, что бы он указывала ассемблеру, что имя SubPRO определено вне ее собственного кого
5.какая директива в подпрограмме SUBPRO необходима для того, чтобы имя очки вхлда было доступно в основной прорамме MAINPRO ?
Программма под DOS



Вопрос отправлен: 14.11.2002, 20:30
Отправитель: Василий

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

Отвечает Bob Johnson

Приветствую Вас, Василий!
Если MainPro и SubPro - разные программы для ДОС, то НИКАК. Это можно только сделать, если это разные модули одной программы, тогда линкер на завершающем этапе создания проги все это соединит.
Тогда - Public (для определения публичной переменной) и Extrn - для определения переменной, определенной в другом файле.


Приложение:

Ответ отправлен: 15.11.2002, 13:56
Отправитель: Bob Johnson


Отвечает Eugene

Здравствуйте, Василий!
А как Сергеич ест бигмаки? Это я к тому, что непонятно под какой ассемблер.
Ещё непонятно откуда столько ошибок, неужели народ совсем обезграмотел?

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


Отвечает keleb-glin

Здравствуйте, Василий!
Ты тут пишешь, что твоя программа - под ДОС, но тогда не совсем ясно, что за вторая программа SUBPRO. ДОС не умеет организовывать никакое подобие многозадачности - даже распределять процессорное время между приложениями. Т.е. одновременно полноценно работать ты сможешь только с одной программой.
Если ты хочешь, чтобы вторая всегда оставалась в памяти, делай её резидентной ( об этом писали в 10-м и 12-м выпусках рассылки ). После вызова резиденту доступны все данные вызвавшей его программы через регистр DS. Если ты хорошо напишешь свой резидент, он сможет работать как обычная подпрограмма или функция в языке высокого уровня.
Можно сделать резидентными обе программы с активацией по таймеру ( прерывание int 08h ). Они будут поочерёдно получать управление и обмениваться данными через файл или дополнительные страницы видеобуфера ( см. 13-й выпуск рассылки про вирус ).
Но скорее всего тебе нужно полноценно работать с обеими программами. Тогда - все мучения по обмену данными сводятся к нулю. Просто эти программы будут производить обмен информацией через файл ( что надёжнее ) или через доп. страницы видеобуфера ( что быстрее ). Одна - перед завершением производит запись, вторая - чтение перед запуском. Единственное что, тебе придётся самому запускать обе программы. Но так будет намного проще и понятнее.
И последний совет: если программы работают с общими данными, почему бы их не объединить в одну?

Ответ отправлен: 15.11.2002, 21:02
Отправитель: keleb-glin


 Вопрос № 1801

Здравствуйте эксперты!
Как под ДОС правильно открыть файл с длинным именем(LFN 6Ch), только для чтения(нужно считать несколько байт и сразу закрыть.) Интересует, что писать в BX? Что-то никак не получается, получаю код ошибки AX=0001h. Обясните по поводу битов: 6-4, 7, 8, 9, 13, 14, что в них надо писать и в каком случае? Перевод не нужен, я его и сам знаю, хотелось бы узнать их значение, если про доступ, я, более или менее, понимаю(6-4 биты), то про наследование, архивирование и остальные не понимаю.
PS: Да, и как получить атрибут для CX найденного файла(LFN 4Eh), там четыре байта в буфере оказываются? Какие из них те, что мне нужны для открытия файла?
--
С уважением, ILYA D.



Вопрос отправлен: 14.11.2002, 20:46
Отправитель: ILYA D.

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

Отвечает Dark_Lord

Доброе время суток, ILYA D.!
Может у тебя в DX что-то не то, там должен только бит 0 стоять!

Ответ отправлен: 14.11.2002, 21:18
Отправитель: Dark_Lord


Отвечает keleb-glin

Доброе время суток, ILYA D.!
В bx нужно писать тип доступа к файлу.
Про биты:
14:
0 - нормальная буфферизация
1 - непосредственная работа с диском.
Если ты выставишь этот бит, будет забито на обычную ДОСовскую буфферизацию, а работа пойдёт непосредственно с диском ( как если бы ты после каждой процедуры записи вызывал 68h-fn - сброс буфера записи в файл ). Это медленнее, но безопаснее.
13: если выставлен этот бит, при критической ошибке при работе с файлом не будет вызван обработчик int 24h, а ты сам должен будешь обрабатывать ошибку.
биты 8 и 9 - нули.
бит 3 - ноль.
про бит 7 дословно говорится: если выставишь, запущенные тобой процессы не смогут работать с файлом. Иначе - смогут. Если честно, я сам не понял.
Биты 4-6 - тоже загадка для меня. Это видимо разрешение на работу с этим файлом других процессов, пока ты с ним работаешь.
Как бы то ни было, биты 0-7 предназначены для работы с файлами через сеть, а посему можно сделать какие-либо предположения.
Про твою ошибку. Функция прекрасно открыла файл с bx=0000000010000010b ( запрет наследования 13 и 14 - по умолчанию, compatibility в share и чтение/запись).
А код ошибки ax=0001h - неверное имя функции.
Теперь про 4eh.
После того, как ты найдёшь файл, в специальную область памяти - DTA запишется инфа о нём:
( +n - смещение относительно начала DTA )
+0 - что-то зарезервированное ДОСом
+15h - аттрибут файла
+16h - время создания/изменения в формате:
5432109876543210 - байты
15-11 - час(0-23)
10-5 - минута(0-59)
5-0 - кол-во раз по 2 секунды (0-30)
+18h - дата создания/изменения
+1ah - размер ( DWORD )
+1eh - имя ( max - 13 cимволов формат ASCIIZ)
Теперь про DTA. Если ты ничего не менял, его начало - 80h байт с начала программы. Если менял, поможет функция:
mov ah, 2fh
int 21h
В итоге в ES:BX - адрес DTA.



Ответ отправлен: 15.11.2002, 22:28
Отправитель: keleb-glin


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

Доброе время суток, ILYA D.!
Файл с длинным именем не откроешь в дос. Длинные имена юзаются в FAT32, причем такими же нодами как и в фат16, но большим их количеством. Причем длинные имена пишутся в формате UNICODE. Поподробнее могешь почитать в описании FAT32 и книге Кулакова "Программирование дисковых подсистем"

Ответ отправлен: 15.11.2002, 09:12
Отправитель: DiGiT[old]


 Вопрос № 1802

Hello!
Необходимо из программы на Delphi посылать в порт LPT значения от 0 до 128.
Сделал внешнюю программу (portlpt.exe) на pascal'е и передаю в нее значение из
delphi следующим образом:
StrPCopy(A, 'portlpt.exe '+FloatToStr(BinToInt(Param)));
WinExec(A, SW_HIDE);
А это portlpt.exe:
//--------------------------
Program portlpt;
var
i, e: Integer;
Begin
val(ParamStr(1),i,e);
if e=0 Then Port[$378]:=i;
End.
//--------------------------
Только это как-то тупо на мой взгляд. Хотя работает.
Мне бы хотелось сделать тоже самое в delphi, но я не могу из windows
обратится к порту напрямую как в DOS'е (Port[$378]:=128)
Можно-ли в Delphi написать вставку на assembler'е, чтобы передать в
порт значение и если можно, то подскажи пожалуйста как это сделать?
Спасибо.
------------
С уважением,
Serge



Вопрос отправлен: 14.11.2002, 20:51
Отправитель: Serge

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

Отвечает Maverick

Доброе время суток, Serge!
В приложении простенькая программа, которая выводит в порт 378h данные от 0 до 128 c помощью цикла, тебе остается лишь оформить ее как вставку для делфи.
Написано для дос.


Приложение:

Ответ отправлен: 15.11.2002, 07:54
Отправитель: Maverick


Отвечает Gibbel

Доброе время суток, Serge!
В Windows напрямую к портам можно обращаться только из драйверов.

Ответ отправлен: 15.11.2002, 09:38
Отправитель: Gibbel


 Вопрос № 1803

Как можно отключить меню, вызываемое по кнопке "ПУСК".Я получил его указатель, но уничтожить это окно не получилось, только свернуть. У меня все равно появляется серый квадрат.



Вопрос отправлен: 14.11.2002, 21:52
Отправитель: PWS

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

Отвечает Bob Johnson

Приветствую Вас, PWS!
Ты можешь вообще убрать и кнопку Пуск и таскбар и системтрэй и попап-меню на экране по правой кнопке - редактируешь файл system.ini, находишь там строку shell=Explorer.exe - вот тут запускается explorer как виндовс shell. Ставишь сюда свою любую программу и при запуске ОС будет запускаться только она и НИЧЕГО больше. Может так ты решишь свою проблему.


Ответ отправлен: 15.11.2002, 13:57
Отправитель: Bob Johnson


 Вопрос № 1804

Привет всем, начал недавно изучать Assembler и столкнулся с проблемами, вроде бы правильная программа не хочет запускаться , либо пишет:no stack; либо что-то с точкой входа. Влияет ли операционка на результат. Сейчас winme стоит. Желательно что бы кто-то помог с написанием программ. Заранее спасибо.



Вопрос отправлен: 14.11.2002, 22:14
Отправитель: Evgen (evgen_@list.ru)

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

Отвечает Supra

Приветствую Вас, Evgen!
Ну надо создать сегмент стэка и запуститься


Ответ отправлен: 15.11.2002, 16:43
Отправитель: Supra


Отвечает St

Привет, Evgen!
У меня для тасма всегда проходили следующие шаблоны (см Приложение)
Система не должна влиять на процесс компилирования, разве что иногда в некоторых системах могут не запускаться сами компиляторы/линкеры и тд.
St

Приложение:

Ответ отправлен: 15.11.2002, 17:09
Отправитель: St


Отвечает Bob Johnson

Здравствуйте, Evgen!
Если пишет no stack - это еще не так страшно. Все будет работать, просто ДОС сам выделит тебе стек. Если же нет точки входа - тогда ничего работать не будет. Точка входа указывается ассемблеру директивой end (которая одновременно и заканчивает программу). Пример: end _имя метки_.


Ответ отправлен: 15.11.2002, 13:57
Отправитель: Bob Johnson


Отвечает keleb-glin

Здравствуйте, Evgen!
Зря ты не указал, чем компилируешь и линкуешь прогу, я мог бы тебе ответить конкретнее, ну да ладно.
Похожее сообщения выводят и tlink и MASM, если ты линкуешь исходник со структурой .СОМ файла в .ЕХЕ файл, но это только на правах предупреждения. При попытке запуска подобного файла Виндоуз ( я работал из-под него в сеансе ДОС выдаёт сообщение о критической ошибке.
Но скорее всего ты действительно не так линкуешь, поэтому для tlinka попробуй указать параметр /t, а для ML.exe, - /АТ. Может поможет.
Просто всё дело в том, что сегмент стека отличается тем, что заполняется от последнего байта к первому, поэтому он и объявляется немного по-другому, и его отсутствие сразу заметно. А с экзешник с невернго инициализированным стеком просто не может работать.


Ответ отправлен: 16.11.2002, 20:01
Отправитель: keleb-glin


Отвечает Maverick

Доброе время суток, Evgen!
Ну да, влияет.
Недавно был похожий вопрос, еще зависит от того каким компилятором-линковщиком ты пользуешся.

Ответ отправлен: 15.11.2002, 07:54
Отправитель: Maverick


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

Доброе время суток, Evgen!
no stack о том и говорит!
не должна ОС влиять на результат, а влияет компилятор и железо

Ответ отправлен: 15.11.2002, 09:08
Отправитель: DiGiT[old]


Отвечает Gibbel

Приветствую Вас, Evgen!
1. no stack - это предупреждение, выдаваемое компилятором. Можешь не обращать на него внимания, в большинстве случаев полученная программа все равно будет работать.
2. Точку входа необходимо задать в конце основного ассемблерного модуля директивой END metka
где metka - метка точки входа, с которой начнет выполняться твоя программа.

Ответ отправлен: 15.11.2002, 09:43
Отправитель: Gibbel


 Вопрос № 1806

Здравствуйте.
Будет интересно ознакомиться с Вашей курсовой работой в которой рассматривается написание драйвера для Win9x. Мой адрес:
bayramanna@investbank.org
Спасибо.



Вопрос отправлен: 15.11.2002, 07:51
Отправитель: Bayram Annanurov

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

Отвечает Bob Johnson

Добрый день, Bayram Annanurov!
ок.


Ответ отправлен: 15.11.2002, 23:56
Отправитель: Bob Johnson


 Вопрос № 1808

Доброе время суток masquer!
У меня к Вам следующий вопрос.
Может, помните, я хочу написать программу под виндовс для управления АЦП. До сих пор я эту проблему не решил.
Возникли кое какие мысли.
В приложении приводится сначала оригинал асм функции для Easy Win программы, а затем то, что я с ней сделал.
В самом верху приведено описание функции на паскале, переданное нам разработчиками данного АЦП. Может дело всё в том, что АЦП всё-таки выставляет флаг готовности, только я проверяю его не там?
С уважением, Рифат.



Приложение:


Вопрос отправлен: 15.11.2002, 08:46
Отправитель: Рифат (abriofh@mail.ru)

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

Отвечает masquer

Добрый день, Рифат!
Я, честно говоря, с железом не очень...
Если этот код в виндах будет выполняется, то работать ничего не будет. Работа с портами только в ринг0, то бишь - драйвер писать нужно.

Ответ отправлен: 15.11.2002, 10:15
Отправитель: masquer


 Вопрос № 1810

Hi !Как сохранить связь символических имен в программе COM? То есть если я хочу исследовать EXE программу в отладчике (TD.EXE) то при запуске TASM и TLINK я должен указать /zi для TASM и /v для TLINK, это позволяет мне исследовать в отладчике исходный текст программы. Это работает для программ формата EXE. Меня интересует то же самое, но для программ формата COM.
Как можно увидеть исходный текст в отладчике, если программа COM?
Best regards
Alex.



Вопрос отправлен: 15.11.2002, 11:56
Отправитель: Alex (alexneta@aport2000.ru)

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

Отвечает Eugene

Приветствую Вас, Alex!
Это можно сделать, написав свой turbo debugger. Другого способа я лично не знаю.

Ответ отправлен: 15.11.2002, 12:24
Отправитель: Eugene


Отвечает Supra

Здравствуйте, Alex!
К сожалению, это не возможно.

Ответ отправлен: 15.11.2002, 16:41
Отправитель: Supra


Отвечает Portnov

Добрый день, Alex!
Не получится. COM-формат еще называют "плоский бинарный формат", это предельно простой формат исполнимых файлов. Настолько простой, что не поддерживает вставку отладочной информации. :( Единственное, что могу предложить, раз уж отладочная инфа очень нужна, это немного подправить самое начало вашей COM-программы с тем, чтобы переделать ее в EXE-файл для модели памяти small, а дальше как обычно.
С уважением, Portnov.

Ответ отправлен: 15.11.2002, 18:02
Отправитель: Portnov


Отвечает LIFO

Доброе время суток, Alex!
Да никак. В ком - формате нельзя сохранять таблицу символов.
Будет вылетать сообщение типа ' Programm has no symbol table'

Ответ отправлен: 16.11.2002, 21:03
Отправитель: LIFO


Отвечает St

Привет, Alex!
Отладочная информация сохраняется только в exe-файлах.
Если программа ваша - то в Windows откройте в другом окне текст и сверяйтесь :)
Если вам нужно отлаживать программу, то проще вначале скомпилировать ее как exe, и если все работает нормально, то в конце переделать обратно в com. Обычно это несложно сделать.
St

Ответ отправлен: 15.11.2002, 17:07
Отправитель: St


Отвечает Bob Johnson

Здравствуйте, Alex!
А никак. com файл для этого не предназначен. Только линкуй его как ехе (ну и соответствующую загрузку регистров сделай).


Ответ отправлен: 15.11.2002, 23:57
Отправитель: Bob Johnson


Отвечает keleb-glin

Доброе время суток, Alex!
Ты мог заметить, что tlink некоторых версий говорит, что отладочная информация игнорируется для .СОМ файлов. Скорее всего, нельзя сделать то, о чём ты говоришь.


Ответ отправлен: 15.11.2002, 22:38
Отправитель: keleb-glin


Отвечает Ayl

Здравствуйте, Alex!
Для программы COM это тебе сделать не удасться! Ну не приспособлены кролики для лазанья! (с)
Так что про исходный текст в программах COM можешь забыть.

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


 Вопрос № 1811

Привет эксперты не подскажите почему прграмка не работает
ассемблер nasm Заранее спасибо


Приложение:


Вопрос отправлен: 15.11.2002, 13:14
Отправитель: zamzam (zamzam@smtp.ru)

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

Отвечает Broken Sword

Доброе время суток, zamzam!
чето знакомое...
xor si,si - вот здесь у меня была запорка, надо на самом деле XOR ESI,ESI, хотя иногда работает без этого

Ответ отправлен: 15.11.2002, 16:36
Отправитель: Broken Sword


Отвечает Portnov

Добрый день, zamzam!
Я не очень-то сильно разбираюсь в таких вещах как переход в PMode, но вне зависимости от этого хочется дать вам пару советов. Видно, что вы недавно начали использовать nasm.
Вот вы пишете lea edx,[pmode_c]. Это тасм додумается, что в два раза быстрее выполняется инструкция mov edx, pmode_c, а насм из принципа ничего не оптимизирует, он так и оставит. Так что пишите в таких случаях просто mov edx,pmode_c. Некоторые, правда, могут возразить, что на современных процах это несущественно, но пусть мне покажут случай, когда оптимизация помешала, тогда я подумаю :)
Дальше. Вы дальний переход пишете с помощью db. Можно, конечно. Но красивее было бы, используя возможности nasm'а, написать, например:
my_far_jump:
jmp dword 00001000b:0 ;здесь любое смещение, лишь бы место забить
...
а потом к той переменной, которую вы в своем исходнике назвали Entry_PM, обращаться как dword[my_far_jmp+2], а к Descr_PM - как word[my_far_jmp+6]. Если неохота несколько раз писать такие длинные обращения, можно в начале программы написать:
%define Entry_PM dword[my_far_jmp+2]
%define Descr_PM word[my_far_jmp+6]
Здесь оптимизации нет, единственное, в чем вы выигрываете - это понятность, читабельность программы. В вашем варианте, при разборе исходника я должен был вспомнить, что такое префикс 66h, что за инструкцию являет собой 0EAh, и что после jmp'а идет сначала смещение, а потом сегмент, а не наоборот. А в том варианте, который я предлагаю, стоит чистый конкретный jump, и не надо помнить наизусть опкоды.
PS. С вопросами по специфике использования nasm'а обращайтесь portnov@mdv.ru, разъясню.
С уважением, Portnov.

Ответ отправлен: 15.11.2002, 18:43
Отправитель: Portnov


 Вопрос № 1812

Здравствуйте уважаемые эксперты.
Прочитал в рассылке вопрос № 1758 по работе с параллельным портом.
Никто ему толком не ответил (не в обиду экспертам будь сказано).
Если у Вас сохранился его адрес, пусть напишет на sergeysp@hotmail.com.
Имею некоторый опыт по данной теме.
С уважением Сергей.



Вопрос отправлен: 15.11.2002, 13:18
Отправитель: Sergey

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

Отвечает Sensey

Здравствуйте, Sergey!
Адреса читателей экспертам недоступны, если они сами явно этого не укажут.
Запускаю в рассылку, может Андрей сам прочитает и напишет...


Ответ отправлен: 15.11.2002, 13:26
Отправитель: Sensey


 Вопрос № 1813

Здравствуйте!! Не подскажет ли кто-нибудь алгоритм поворота 3-х мерной фигуры (тетраэдр, например) на определенное кол-во градусов. Или ссылкой поделитесь.



Вопрос отправлен: 15.11.2002, 13:40
Отправитель: Igoryk

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

Отвечает Sensey

Добрый день, Igoryk!
Исходные данные x y z - координаты, Angle - запись из трех углов(в градусах)
Выход xr, yr - преобразованные данные. zr==0.
yy:=y;zz:=z;
yt:=yy*tcos[Angle.a]+zz*tsin[Angle.a];
zt:=zz*tcos[Angle.a]-yy*tsin[Angle.a];
xt:=x*tcos[Angle.b]+zt*tsin[Angle.b];
xr:=round(xt*tcos[Angle.c]-yt*tsin[Angle.c]);
yr:=round(yt*tcos[Angle.c]+xt*tsin[Angle.c]);
tcos tsin - табулированные ф-ции cos sin соответственно
for i:=0 to 359 do
begin
tcos[i]:=cos(i*pi/180);tsin[i]:=sin(i*pi/180);
end;
Ниче, что на Паскале? :)
На ящик пошлю демонстрационку...


Ответ отправлен: 15.11.2002, 14:43
Отправитель: Sensey


Отвечает Bob Johnson

Приветствую Вас, Igoryk!
Если тебе необходимо повернуть что-либо вокруг х-оси, можно так:
[x', y', z', 1] = [x, y, z, 1]*M
M = [(1, 0, 0, 0), (0, cos, sin, 0), (0, -sin, cos, 0), (0, 0, 0, 1)]
Где cos и sin - косинус и синус угла поворота соответственно. Координаты без штрихов - до поворота, со штрихами - после.
Можешь посмотреть DX8SDK - там все подробно объясняется.


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


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

Добрый день, Igoryk!
Используй эти матрицы для поворота по осям X, Y и Z соответственно.
Алгоритм простой - умножай все координаты вершин фигуры на эти
матрицы и получишь новые координаты, по ним и выводи на экран новую
фигуру. В синусах и косинусах используй угол поворота.
Насчет ссылок - посмотри на www.enlight.ru
|1 0 0 |
|0 cos sin|
|0 -sin cos|
|cos 0 -sin|
|0 1 0 |
|sin 0 cos |
|cos sin 0|
|-sin cos 0|
|0 0 1|


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


 Вопрос № 1814

скажите как презагрузить комп и выключить ... дайте рабочий код
win9x,amd
ответ присылайте на lamachok@mail.ru



Вопрос отправлен: 15.11.2002, 16:43
Отправитель: lamachok (lamachok@mail.ru)

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

Отвечает St

Привет, lamachok!
push L 0
push EWX_POWEROFF; можно еще добавить OR EWX_FORCE
call ExitWindowsEx
Это работает с Win9x,
с NT-ми несколько сложнее, сам недавно разбирался, причем удалось сассемблировать только масмом, прога из под тасма так и не захотела работать.
Однако Win2k на работе так и не захотел выключаться, причем не только моей прогой но и любой другой. Видимо сочетание матери и блока питания неудачное, хотя WinXP на аналогичной машине выключается.
St

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


Отвечает Bob Johnson

Приветствую Вас, lamachok!
ExitWindowsEx (EWX_REBOOT, 0) - перезагрузка
ExitWindowsEx (EWX_SHUTDOWN, 0) - выключение.


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


Отвечает masquer

Доброе время суток, lamachok!
invoke ExitWindowsEx,EWX_SHUTDOWN,NULL

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


Отвечает Dark_Lord

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


Приложение:

Ответ отправлен: 16.11.2002, 17:19
Отправитель: Dark_Lord



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (43)
C / C++ (30)
Perl (8)
Delphi (13)
Pascal (21)
Basic / VBA (11)
Java / JavaScript (13)
PHP (11)
MySQL / MSSQL (9)
Пользователю
Windows 95/98/Me (31)
Windows NT/2000/XP (21)
"Железо" (28)
Поиск информации (17)
Администратору
Windows NT/2000/XP (11)
Linux / Unix (16)
Юристу
Гражданское право (7)
Семейное право (2)
Трудовое право (3)
КоАП (2)

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




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

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


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

В избранное