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

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Volodia
Сообщения: 1
Зарегистрирован: 13 ноя 2006, 23:08

Задание: Надо найти файл и вывести инфу о нем

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 имя файла выводится нормально, а все остальное опять абракадабрицей.
Подскажите как вывести инфу. Мне нужно имя файла, время и дата создания, размер файла.
Спасибо.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

mov dx, screen_error
В DX - два байта по адресу Screen Error - т.е. 'fi', надо

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

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

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

push cs
pop ds
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

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
It's a long way to the top if you wanna rock'n'roll
Ответить