Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить путь к запущенной программе 
:(
    Опции темы
Server
Дата 27.4.2006, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Доброго времени суток.
Мне нужно при запуске .com программы получить путь с какого места она запустилась(где расположена).

Подскажите эту строку нужно искать в префиксе программного сегмента (PSP)?
При загрузке (.exe) программы  ds  и es указывают на PSP
При загрузке (.com) программы cs указывает на PSP
В PSP по смещению 80H расположенна область DTA по умолчанию получает  командную строку программы.

Для .ехе
Код

.model  small        
.stack  256h
.data        

.code
start:
          ;тут ds должен указывать на PSP?
          ;ds:80H тут должно быть DTA?

          mov ax,@data
          mov ds,ax
          ;а тут ds должен указывать на сегмент данных?       
 
          mov  ax,4c00h
          int  21h     
end  start

Пожалуйста подскажите.
Заранее благодарю. 
PM MAIL   Вверх
Akina
Дата 27.4.2006, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Полное имя хранится не в PSP, а в блоке среды, адрес которой ты берешь из PSP.

Код

; ds указывает на PSP
mov ax, ds:[2Ch]
mov es,ax
xor ax,ax
mov di,ax
cld
repeat:
scasw
je found
dec di
jmp short repeat
found:
; es:di указывает на полное имя программы
 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Chingachguk
Дата 27.4.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Я полагаю, в DTA ничего по умолчанию нет. Необходимо получать текущий диск и каталог двумя функциями, например:

Цитата

SaveDisk   Proc near
              mov   ah,019h                     ; Get current disk
              int   21h                         ; CALL DOS(al=disk)
              ret
SaveDisk   Endp
SavePath   Proc near
              mov   StartDisk,al                ; Save current disk (after)
              mov   ah,047h                     ; Get current path
              mov   dl,0                        ; Default drive
              mov   si,offset StartPath         ; save variable
              int   21h                         ; CALL DOS
              ret
SavePath   Endp
 


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Server
Дата 27.4.2006, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Спасибо большое.
А то кручусь на одном месте.
Я смотрел в отладчике но по адресу ds:80H  и ds:2cH ничего не было.

Спасибо ещё раз, буду пробовать. 
PM MAIL   Вверх
Server
Дата 27.4.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Chingachguk дал ответ прямо в точку.
Это у меня задание к контрольной работе 
Привязать запуск программы к диску т.е. программа должна запускаться только с определённого диска. Я думал сравнивать по букве диска а можно или даже нужно в данном случае сравнивать по номеру диска.

То что предложил Akina тоже пригодиться.

Akina 
Chingachguk 

Благодарю!!! 
PM MAIL   Вверх
Akina
Дата 27.4.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Цитата(Chingachguk @  27.4.2006,  10:36 Найти цитируемый пост)
Я полагаю, в DTA ничего по умолчанию нет. 

При старте программы там находятся разобранные первые 2 FCB, если они были в параметрах командной строки.

Цитата(Chingachguk @  27.4.2006,  10:36 Найти цитируемый пост)
Необходимо получать текущий диск и каталог двумя функциями, например:

Бесполезно...

c:\ > d:\folder\filename.exe
 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.