Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Записать список файлов, с датой создания меньше заданной 
:(
    Опции темы
Ura20007
Дата 25.4.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Есть Файл.Каталог файлов.Надо занести в отдельный файл записи о файлах созданных ранее указанной даты.Никак не могу подойти к реализации задачи. 

Есть алгоритм: есть стандартные DOS'овские функции по поиску файлов, на каждый найденный файл проверить  его аттрибуты и дату создания. находится  первый файл текущей директории функцией DOS 0x4E, потом двигаешь по цепочке к следующему файлу при помощи функции DOS 0x4F. При этом глядеть надо  в область DTA (то куда они рез-ты возвращают) там по смещению 0x16 - время создания файла в формате DOS, а по смещению 0x18 - дата создания файла в формате DOS, по смещению 0x1E - имя файла. RTFM, как говориться.
Я не знаю как это написать на ассемблере!!! Кто знает как это сделать выручьте пожалуйста человека.Заранее огромное спасибо. 
PM MAIL   Вверх
Ura20007
Дата 26.4.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Выручьте ради бога не к кому обратиться больше!!!!!!!
PM MAIL   Вверх
dumb
Дата 27.4.2007, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



Код

; сборка:
; tasm findf.asm
; tlink /t findf.obj
    .model tiny
    .386
    .data

fileHandle  dw  0
findMask    db  '*.*',0
fileName    db  'found.txt',0

errorString db  'error$'

Year        dw  2005
Month       dw  4
Day         dw  1

Hour        dw  12
Minute      dw  34
Second      dw  56

Date        dw  0
Time        dw  0

    .code
    org   100h

start:
;Bitfields for file date:
;Bit(s)  Description     (Table 01643)
; 15-9   year - 1980
; 8-5    month
; 4-0    day
    mov   ax, Year                  ; преобразуем в формат даты файла
    sub   ax, 1980
    shl   ax, 4
    or    ax, Month
    shl   ax, 5
    or    ax, Day
    mov   Date, ax
;Bitfields for file time:
;Bit(s)  Description     (Table 01642)
; 15-11  hours (0-23)
; 10-5   minutes
; 4-0    seconds/2
    mov   ax, Hour                  ; преобразуем в формат времени файла
    shl   ax, 6
    or    ax, Minute
    shl   ax, 5
    or    ax, Second
    mov   Time, ax

    mov   ax, 3c00h                 ; создаем файл-список
    xor   cx, cx
    mov   dx, offset fileName
    int   21h
    mov   fileHandle, ax
    jc    errorMsg

    mov   ah, 4eh                   ; пытаемся найти первый файл по маске
    xor   cx, cx
    mov   dx, offset findMask
    int   21h
    jc    EndOfFiles
NextFile:
    mov   ax, ds:[80h + 18h]        ; сравниваем дату
    cmp   ax, Date
    jb    DateTimeOk
    ja    FindNext
    mov   ax, ds:[80h + 16h]        ; даты равны, сравним время
    cmp   ax, Time
    jae   FindNext
DateTimeOk:                         ; дата-время меньше указанных
    mov   di, 80h + 1eh             ; получаем длину имени файла
    xor   ax, ax
    mov   cx, -1
    cld
    repnz scasb
    not   cx
    dec   di
    inc   cx                        ; корректируем длину с учетом добавления CR-LF
    mov   ax, 0a0dh                 ; добавляем CR-LF (перенос строки)
    stosw
    mov   bx, fileHandle            ; записываем имя файла в файл-список
    mov   dx, 80h + 1eh
    mov   ah, 40h
    int   21h
    jc    errorMsg
FindNext:
    mov   ah, 4fh                   ; пытаемся найти след.файл
    int   21h
    jnc   NextFile

EndOfFiles:
    mov   ah, 3eh                   ; закрываем файл-список
    int   21h
    mov   ax, 4c00h                 ; завершаем программу
    int   21h

ErrorMsg:
    mov   ah, 09h
    mov   dx, offset errorString
    int   21h
    jmp   EndOfFiles
    
end start

PM MAIL   Вверх
Ura20007
Дата 27.4.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Огромнейшее спасибо.Программа видимо работает в com-файле.А как сделать чтобы работала нормально в еxe-файле???   

Это сообщение отредактировал(а) Ura20007 - 27.4.2007, 12:16
PM MAIL   Вверх
dumb
Дата 27.4.2007, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



Код

; сборка:
; tasm findf.asm
; tlink findf.obj
    .model small
    .386
    .data

fileHandle  dw  0
findMask    db  '*.*',0
fileName    db  'found.txt',0

errorString db  'error$'

Year        dw  2005
Month       dw  4
Day         dw  1

Hour        dw  12
Minute      dw  34
Second      dw  56

Date        dw  0
Time        dw  0

    .code

start:
    mov   ax, @data
    mov   ds, ax
;Bitfields for file date:
;Bit(s)  Description     (Table 01643)
; 15-9   year - 1980
; 8-5    month
; 4-0    day
    mov   ax, Year                  ; преобразуем в формат даты файла
    sub   ax, 1980
    shl   ax, 4
    or    ax, Month
    shl   ax, 5
    or    ax, Day
    mov   Date, ax
;Bitfields for file time:
;Bit(s)  Description     (Table 01642)
; 15-11  hours (0-23)
; 10-5   minutes
; 4-0    seconds/2
    mov   ax, Hour                  ; преобразуем в формат времени файла
    shl   ax, 6
    or    ax, Minute
    shl   ax, 5
    or    ax, Second
    mov   Time, ax

    mov   ax, 3c00h                 ; создаем файл-список
    xor   cx, cx
    mov   dx, offset fileName
    int   21h
    mov   fileHandle, ax
    jc    errorMsg

    mov   ah, 4eh                   ; пытаемся найти первый файл по маске
    xor   cx, cx
    mov   dx, offset findMask
    int   21h
    jc    EndOfFiles
NextFile:
    mov   ax, es:[80h + 18h]        ; сравниваем дату
    cmp   ax, Date
    jb    DateTimeOk
    ja    FindNext
    mov   ax, es:[80h + 16h]        ; даты равны, сравним время
    cmp   ax, Time
    jae   FindNext
DateTimeOk:                         ; дата-время меньше указанных
    mov   di, 80h + 1eh             ; получаем длину имени файла
    xor   ax, ax
    mov   cx, -1
    cld
    repnz scasb
    not   cx
    dec   di
    inc   cx                        ; корректируем длину с учетом добавления CR-LF
    mov   ax, 0a0dh                 ; добавляем CR-LF (перенос строки)
    stosw
    mov   bx, fileHandle            ; записываем имя файла в файл-список
    mov   dx, 80h + 1eh
    mov   ah, 40h
    push  ds
    push  es
    pop   ds
    int   21h
    pop   ds
    jc    errorMsg
FindNext:
    mov   ah, 4fh                   ; пытаемся найти след.файл
    int   21h
    jnc   NextFile

EndOfFiles:
    mov   ah, 3eh                   ; закрываем файл-список
    int   21h
    mov   ax, 4c00h                 ; завершаем программу
    int   21h

ErrorMsg:
    mov   ah, 09h
    mov   dx, offset errorString
    int   21h
    jmp   EndOfFiles
    
end start

PM MAIL   Вверх
Ura20007
Дата 27.4.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Что-то я открываю exe- и он закрывается.Или я что то не так делаю. Как вообще должна работать программа?Нужно  вводить дату и видимо данный файл или не так?

Dumb,помоги пожалуйста!!!


Это сообщение отредактировал(а) Ura20007 - 28.4.2007, 00:09
PM MAIL   Вверх
dumb
Дата 28.4.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



Ura20007, вообще, предполагается, что ты потрудишься хотя бы просмотреть код глазами.

дата-время "жестко зашиты" в код, т.е. нужная дата прописывается в исходник перед компиляцией. .exe файл сканирует текущий каталог, создает список файлов(имя файла видно в исходнике) и завершается.

чтобы сделать ввод даты-времени с клавиатуры, нужно довольно значительно "усложнить" код. увольте-с...
PM MAIL   Вверх
Ura20007
Дата 28.4.2007, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Указанная дата это 1.04.2005?
А как посмотреть список файлов? Насколько я понял он находится в FileHandle.


PM MAIL   Вверх
Ura20007
Дата 28.4.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Мне надо бы с вводом даты.то сможет помогите пожалуйста.
PM MAIL   Вверх
Alexander_Veselov
Дата 2.5.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как работает в общем эта прога.

Это сообщение отредактировал(а) Alexander_Veselov - 2.5.2007, 23:54
PM MAIL   Вверх
Ura20007
Дата 5.5.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Ну ребята помогите пожалуйста.Нужно сделать эту програмку с вводом даты с клавиатуры(год,число,месяц).
PM MAIL   Вверх
dumb
Дата 5.5.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



user posted image

Код

    .model small
    .386

    .data

fileHandle  dw  0
findMask    db  '*.*',0
fileName    db  'found.txt',0

sError      db  0dh,0ah,'error',0dh,0ah,'$'
sYearP      db  0dh,0ah,'Year  : $'
sMonthP     db  0dh,0ah,'Month : $'
sDayP       db  0dh,0ah,'Day   : $'

Date        dw  0

    .code

start:
    mov   ax, @data
    mov   ds, ax

    mov   ah, 09h
    mov   dx, offset sYearP
    int   21h
    call  wordIn
    or    ax, ax
    je    errorMsg
    sub   ax, 1980
    shl   ax, 4
    mov   bx, ax

    mov   ah, 09h
    mov   dx, offset sMonthP
    int   21h
    call  wordIn
    or    ax, ax
    je    errorMsg
    or    bx, ax
    shl   bx, 5

    mov   ah, 09h
    mov   dx, offset sDayP
    int   21h
    call  wordIn
    or    ax, ax
    je    errorMsg
    or    ax, bx
    mov   Date, ax

    mov   ax, 3c00h                 ; создаем файл-список
    xor   cx, cx
    mov   dx, offset fileName
    int   21h
    mov   fileHandle, ax
    jc    errorMsg

    mov   ah, 4eh                   ; пытаемся найти первый файл по маске
    xor   cx, cx
    mov   dx, offset findMask
    int   21h
    jc    EndOfFiles
NextFile:
    mov   ax, es:[80h + 18h]        ; сравниваем дату
    cmp   ax, Date
    jae   FindNext

DateTimeOk:                         ; дата-время меньше указанных
    mov   di, 80h + 1eh             ; получаем длину имени файла
    xor   ax, ax
    mov   cx, -1
    cld
    repnz scasb
    not   cx
    dec   di
    inc   cx                        ; корректируем длину с учетом добавления CR-LF
    mov   ax, 0a0dh                 ; добавляем CR-LF (перенос строки)
    stosw
    mov   bx, fileHandle            ; записываем имя файла в файл-список
    mov   dx, 80h + 1eh
    mov   ah, 40h
    push  ds
    push  es
    pop   ds
    int   21h
    pop   ds
    jc    errorMsg
FindNext:
    mov   ah, 4fh                   ; пытаемся найти след.файл
    int   21h
    jnc   NextFile

EndOfFiles:
    mov   ah, 3eh                   ; закрываем файл-список
    int   21h
    mov   ax, 4c00h                 ; завершаем программу
    int   21h

ErrorMsg:
    mov   ah, 09h
    mov   dx, offset sError
    int   21h
    jmp   EndOfFiles

WordIn proc pascal
  local buf:byte:16
    push  ds bx si di
    push  ss
    pop   ds
    mov   ax, 0a06h
    lea   si, buf
    mov   [si], al
    mov   dx, si
    int   21h
    xor   ax, ax
    inc   si
    mov   al, byte ptr [si]
    or    al, al
    je    exit
    xor   di, di
    inc   si
    mov   bx, 10
    mov   cx, ax
    cld
next:
    mov   ax, di
    xor   dx, dx
    mul   bx
    mov   di, ax
    xor   ax, ax
    lodsb
    cmp   al, '0'
    jb    ret0
    cmp   al, '9'
    ja    ret0
    sub   al, '0'
    add   di, ax
    loop  next
    mov   ax, di
    jmp   exit
ret0:
    xor   ax, ax
exit:
    pop   di si bx ds
    ret
WordIn endp

    end start

PM MAIL   Вверх
Ura20007
Дата 5.5.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 22.4.2007

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



Спасибочки.Только я не понимаю почему программа не выдает список файлов или(ввожу дату нажимаю  Enter   и ничего не выдается).Или я что то не так делаю?

Помоги пожалуйста.

PM MAIL   Вверх
dumb
Дата 6.5.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



Цитата(Ura20007 @  25.4.2007,  15:25 Найти цитируемый пост)
Надо занести в отдельный файл записи о файлах

вот это, ...., кто писал?!

Цитата(dumb @  5.5.2007,  19:04 Найти цитируемый пост)
fileName    db  'found.txt',0

а эта строчка ни о чем не говорит?!

smile
PM MAIL   Вверх
Anna_Lebedeva
Дата 20.5.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 20.5.2007

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



У меня вот похожая задача тоже с вводом даты,только надо еще обработать ошибки.
 
Нужно создать файл,со структурой такой же как каталог файлов.Из этого файла переписывать в другой файл записи,которые удовлетворяют условию по дате(такие же как и в решенной.)

Выручьте пожалуйста ребятки!!!!!!!!!!!!!!1
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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