Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.136.170] |
|
Сообщ.
#1
,
|
|
|
Всё же я не могу понять как выйти на _путь_ найденного файла: :-[ :-[ :-[
............................ mov ah,4eh; mov dx,offset Mask; xor cx,cx; int 21h; mov ah,9; mov dx,offset 9eh;это смещение в DTA. int 21h; ret; Mask db '*.*',0; .............................. Почему это не работает ? В принципе, при этом выводится имя файла, а за ним...почему-то куча непонятных иероглифов. Но я думал, что будет не так, а получится командная строка. Как быть, чтобы выводился путь к файлу без всяких там. |
Сообщ.
#2
,
|
|
|
По поводу пути:
Каталог не к чему определять, так как он известен изначально. Функции 4Eh и 4Fh осуществляют поиск записей в указанном каталоге (Mask). Когда в Mask ты путь не указываешь, поиск осуществляется в текущем каталоге. Чтобы получить путь найденного файла надо объединить строку с каталогом в пути поиска с именем файла А то что выводит белеберду, так это потому, что используешь для вывода ASCIIZ-строки функцию AH=9, которая осуществляет вывод строки, заканчивающейся символом $, на стандартное устройство вывода. Используй лучше AH = 40h BX = 1 (стандартноей устройство вывода) DS:DX -> строка CX = длина строки Функция же AH=9 хороша для вывода константных строк. |
Сообщ.
#3
,
|
|
|
Понял. :)
Спасибо. :) Но возникла ещё маленькая проблема. Т.е. ипользование 4Fh. Либо она тормозит, либо я (скорее второе), но при этом в DTA ничего нет (точнее имя файла не выводится), а ошибки в AX нет (я проверил). 4Fh использует, то что возвтатила 4eh, правильно ? Ну я и использую 4fh сразу после 4eh. Эффекта нет, но и ошибка не возвращается. Где зарыта собака ? |
Сообщ.
#4
,
|
|
|
Скорее всего, ты после выполнения функции не проверяешь флаг CF, сигнализирующий о результатах поиска...
|
Сообщ.
#5
,
|
|
|
Наверное, здесь дело всё-таки не в CF: :-[
........................ mov ah,4eh; mov dx,offset Mask; xor cx,cx; int 21h; mov cx,10; пока так(потом чего-нибудь придумаю) Label: mov ah,40h; mov bx,1; mov dx,9eh; mov cx,13; int 21h; mov ax,4fh; int 21h; loop Label; ....................... Такие вот дела. |
Сообщ.
#6
,
|
|
|
Не хорошо и не корректно, а также с грубыми ошибками:
нельзя внутри цикла loop изменять CX, в твоем случае получается бесконечный цикл. Еще раз повторяю, что об успешном результате поиска записи, сигнализирует CF (CF=0), это надо обязательно контролировать Короче, примерно так: PrintFiles PROC mov ah,4Eh mov dx,offset Mask xor cx,cx int 21h jc @@Exit mov bx,1 ;стандартное устройство вывода @@Find_Loop: mov dx,9Eh call StrLen mov ah,40h int 21h call NewLine mov ah,4Fh int 21h jnc @@Find_Loop @@Exit: ret PrintFiles ENDP ;In: DS:DX -> строка ;Out: CX = длина строки StrLen PROC push es push di push ds pop es mov di,dx ;ES:DI -> строка xor al,al ;AL=0 (признак конца строки) mov cx,0FFFFh cld repne scasb not cx dec cx ;CX = длина строки pop di pop es ret StrLen ENDP NewLine PROC mov ah,2 mov dl,0Dh int 21h mov dl,0Ah int 21h ret NewLine ENDP |
Сообщ.
#7
,
|
|
|
Признаю все свои ошибки, только сейчас я понял какаую XЕРНЮ я написал.
Спасибо. |