Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Find first, какието глюки с DTA 
:(
    Опции темы
TP@MB@Y
Дата 4.6.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Код

{=find first=}
    mov ah,4eh
    xor cx,cx
    lea dx,mask
    inc dx
    int 21h
    jc ERROR
    {=take it name=}
    mov ah,2fh
    int 21h
    mov cx,13
    mov si,0
    add bx,1eh
    @NAME: mov al,es:[bx+si]
           mov byte ptr name83[si+1],al
           cmp al,0
           je @GO
           inc si
           loop @NAME


Причем, переменная name83 до испоьзования уже инициализировалась. И после этого обрезается до первоночальной длинны. Т.е. если сначала было name83:='123' то в приведенном коде уже после 3 символа ничего не меняется...

Это сообщение отредактировал(а) TP@MB@Y - 4.6.2005, 18:04
PM   Вверх
Chingachguk
Дата 4.6.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Загрузи код в отладчике td.exe или другом, посмотри что там.


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


Опытный
**


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

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



Chingachguk
Я в отладчике и смотрел...

Вобщем решил делать по другому: запоминаю смещение имени файла в DTA и потом при прерывании открытия файла в dx двигаю это смещение. Но что то не работает такой подход... Так можно вообще делать то?

Код

    mov ah,2fh
    int 21h
    mov ax,es:[bx+1eh]
    mov ofs_name83,ax
.....
mov ah,3ch
mov dx,ofs_name83
mov cx,0
int 21h

PM   Вверх
Chingachguk
Дата 5.6.2005, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

Function Find_First(Mask,Curr_Dir_Addr,Res_Str_Addr:word):boolean;
 Begin
   Asm
     mov  @Result,False
     mov  AH,2Fh
     int  21h                   {es:bx-adress DTA}
     mov  AH,4Eh
     mov  CX,Mask
     mov  DX,Curr_Dir_Addr
     int  21h
     jc   @Done
     mov  @Result,True
     mov  DX,BX
     lea  SI,[BX+1Eh]           {pointer to filename}
     mov  BX,Res_Str_Addr
     lea  DI,[BX+1]             {pointer to result string}
     mov  byte ptr [BX],0
@Move_Str: mov  AL,ES:[SI]
           inc  SI
           test AL,AL
           jz   @Done_M
           inc  byte ptr [BX]
           mov  [DI],AL
           inc  DI
           jmp  @Move_Str
@Done_M:   mov  SI,DX
           test byte ptr ES:[SI+15h],16
           jz   @Done
           mov  byte ptr [DI],'\'
           inc  byte ptr [BX]
@Done:
   End;
 End;
Function Find_Next(Curr_Dir_Addr:word; Res_Str_Addr:word):boolean;
 Begin
   Asm
     mov  @Result,False
     mov  AH,2Fh
     int  21h                   {es:bx-adress DTA}
     mov  AH,4Fh
     mov  DX,Curr_Dir_Addr
     int  21h
     jc   @Done
     mov  @Result,True
     mov  DX,BX
     lea  SI,[BX+1Eh]           {pointer to filename}
     mov  BX,Res_Str_Addr
     lea  DI,[BX+1]             {pointer to result string}
     mov  byte ptr [BX],0
@Move_Str: mov  AL,ES:[SI]
           inc  SI
           test AL,AL
           jz   @Done_M
           inc  byte ptr [BX]
           mov  [DI],AL
           inc  DI
           jmp  @Move_Str
@Done_M:   mov  SI,DX
           test byte ptr ES:[SI+15h],16
           jz   @Done
           mov  byte ptr [DI],'\'
           inc  byte ptr [BX]
@Done:
   End;
 End;



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


Опытный
**


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

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



Chingachguk
Переделал свой код... теперь все окей с копированием имени файла в переменную, но когда я пытаюсь открыть файл, то выдается ошибка "файл не найден", хотя я меняю текущую директорию на ту в которой этот файл находится. В чем ошибка?

Код

{current directory := dir for pack}
    mov ah,3bh
    lea dx,name_for_pack
    inc dx
    int 21h
    jc ERROR
    {=find first=}
    mov ah,4eh
    xor cx,cx
    lea dx,mask
    inc dx
    int 21h
    jc ERROR
    {=take it name=}
    mov ah,2fh
    int 21h
    lea si,[bx+1eh]     {file name}
    mov bx,offset name83
    lea di,[bx+1]       {buffer}
    mov byte ptr [bx],0
    @MOVE_STR: mov al,es:[si]
               inc si
               inc byte ptr [bx]
               mov [di],al
               inc di
               cmp al,0
               je @GO
               jmp @MOVE_STR

@GO:
    {Open file for pack}
    mov ah,3dh
    mov dx,offset name83
    inc dx
    mov al,0
    int 21h
    jc ERROR1
    mov f_in,ax

PM   Вверх
TP@MB@Y
Дата 5.6.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Chingachguk
После некоторых экспериментов выяснил, что текущая директория меняется как надо, но толька на логическом диске F (директория "F:\2"), на диске D (где находится сама программа) текущая директория остается неизменной (та где находится прога). Именно эту директорию мне и нужно изменить.... Но КАК?? В функции 3bh не указывается логический номер диска...
PM   Вверх
Chingachguk
Дата 5.6.2005, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Для других дисков нужно менять диск, а потом уже искать там.


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


Опытный
**


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

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



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

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

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


 




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


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

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