Страница 1 из 1

Вывод информации о файле из DTA

Добавлено: 23 ноя 2006, 11:17
Volodia
Задание: Надо найти файл и вывести инфу о нем

SECTION .text
org 0x100

mov ah, 4Eh
xor cx,cx
mov dx,filespec
int 0x21
jnc vyvod

not_found:
mov ah, 0x09
mov dx, screen_error
int 0x21
jc prog_end

vyvod:
mov ah, 40h
mov bx, 2
mov cx,12
mov dx, 80h+1Eh
int 21h

prog_end:
mov ah, 0x4c
mov al, 0
int 0x21

.data
screen_test DB "file mask: *.txt", 0xd, 0xa,'$'
mes DB "mes", 0xd, 0xa,'$'
screen_error DB "file not found", 0xd, 0xa,'$'
filespec DB "*.txt",0

При использовании функции 0х09 выводится абракадабрица.
При использовании 40h имя файла выводится нормально, а все остальное опять абракадабрицей.
Подскажите как вывести инфу. Мне нужно имя файла, время и дата создания, размер файла.
Спасибо.

Добавлено: 23 ноя 2006, 12:48
somewhere
mov dx, screen_error
В DX - два байта по адресу Screen Error - т.е. 'fi', надо

Код: Выделить всё

lea dx, screen_error
2.
jc prog_end
- нужен безусловный переход. Это здесь не к чему.
Не забудь на всякий случай сравнять сегменты кода и данных

Код: Выделить всё

push cs
pop ds

Добавлено: 23 ноя 2006, 14:51
somewhere
mov dx,filespec
- тогда уж mov dx, offset FileSpec
После выполнения 4Е (Find First) DTA заполняеться, чтобы взять адрес этого места, делаем:

Код: Выделить всё

mov ah, 2Fh
int 21h
на выходе получаем в ES:BX адрес DTA. Структура DTA следующая:

00H-14H Зарезервированы
15H Атрибут файла
16H-17H Время
биты 0-4 = секунды / 2 (0 - 29)
5-10 = минуты
11-15H = часы
18H-19H Дата
биты 0-4 = день (1-31)
5-8 = месяц
9-15= год (относительно 1980)
1AH-1DH Размер файла
1EH-2AH ASCIIZ Имя файла

впредь старайся не путать загрузку адреса и загрузку значения. В принципе во всех языках такая же проблема

Код: Выделить всё

mov eax, offset MyData
lea eax, MyData - два эквивалента для загрузки адреса MyData в EAX

mov eax, MyData - загрузка значения в EAX по адресу MyData