 |
Ассемблер в примерах - Поиск файла
- Вопрос:
-
пытаюсь найти файл с помощью функции 4Еh
по идее DTA должна заносится информация о файле(атрибуты, размер файла и имя файла)
но в отладчике по адресу 0000h-100h имени файла не обнаружил, хотя флаг переноса сброшен(то есть файл найден)
seg1 segment
org 100h
start:
mov ah,4eh
mov cx,10h
mov dx, offset mask1
int 21h
int 20h
mask1 db '*.txt',0
seg1 ends
end start
- Ответ:
-
Эта функция предполагает, что в программе ранее установлена область DTA, с помощью функции 1Аh прерывания 21h.
Я делал как в приложении. Именно там Вам и нужно всё искать. Пример в приложении использует 37 байт для области DTA, есть ещё и 44-х байтная запись, где перед идентификатором дисковода идут шесть байт:( 0FFh и 5ть байтов резервных). Вариант зависит от версии MSDOS. Учитывайте это.
data segment
dtaIdDD db ?;id disk drive
dtaName db 8 dup(?)
dtaExt db 3 dup(?)
dtaCBlock dw ?;current block number
dtaRSize dw ?
dtaFSize dw ?,?
dtaData dw ?
dtaTime dw ?
dtaReserve db 8 dup(?)
dtaCRec db ?;current record number
dtaORec db ?
dtaStub db 10 dup(?);заглушка вдруг 44-байтная запись
maskFile db '*.*',0
data ends
;begin main program
begin: mov ax,seg data
mov ds,ax
mov es,ax
;setup DTA
mov ah,01ah
mov dx,offset dtaIdDD
int 21h
;find first file
;. . . дальше как у Вас
code ends
|  |