Чтение и запись файла

Тема в разделе "WASM.BEGINNERS", создана пользователем DbIM, 25 фев 2006.

  1. DbIM

    DbIM New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    13
    Вобщем хочу написать простенькую маленькую прогу

    чтобы при запуске она копировала файл из одной папки в другую

    (позже усовершенствовать (с одного компьютера на другой))

    Прочесть файл могу

    А вот записать как-то не получается

    Думаю это 40h функция 21го прерывания

    Вот только не работает нифига

    Код частично передрал с книги Калашникова (а откуда он так точно CX определяет тоже не понимаю)

    Заранее благодарен если поможете





    CSEG segment

    assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG

    org 100h



    BEGIN:

    mov ax,3D02h

    mov dx,offset file_open

    int 21h

    jc bad



    mov Handle,ax

    mov bx,ax

    mov ah,3fh

    mov cx,0fde8h

    mov dx,offset Buffer

    int 21h



    mov ah,3eh

    mov bx,Handle

    int 21h





    mov ax,4002h

    mov bx,handle

    mov cx,0FDE8h

    mov dx,offset file_save

    int 21h

    jc bad





    mov dx,offset mess1

    mov ah,9

    int 21h

    int 20h



    bad:

    mov dx,offset mess2

    jmp quit



    good:

    mov dx,offset mess1

    jmp quit



    quit:

    mov ah,9

    int 21h

    int 20h



    Handle dw 0



    file_open db 'd:\hiew\license.txt',0

    file_save db 'd:\license.txt',0

    mess1 db 'OK!$'

    mess2 db 'NOT!$'



    Buffer equ $



    CSEG ends

    end BEGIN
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Гм... А чем WriteFile не устроил?
     
  3. DbIM

    DbIM New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    13
    Дык ведь у Калашникова про writefile и прочее не написано

    Вот и попробовал

    А где еще такую же простую и доступную инфу взять?

    Потом почемубы и в этом не разобраться... хотя если сильно геморно тогда оно конечно можно и более простой вариант поискать (Вот только где искать то)
     
  4. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Смотри туториалы IczeLion'a . Они есть на этом сайте.

    А вообще, есть API CopyFile

    MSDN тебе в помошь:)
     
  5. DbIM

    DbIM New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    13
    Ну если ето единственных вариант...

    Все одно СПАСИБО
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    To OlegA11

    Вообще не в тему : Автор топика хотел узнать про запись в файл в досу (смотря на его код) а вы ему подсовываете винду с ее апишками..



    Для этого надо создать файл и записать в него то, что тебе надо

    для создания файла :

    mov ah,3ch

    mov cx, ;- атрибуты файла.

    а так же в DS:lol: Х поместить указатель на имя файл в виде строки ASCIIZ

    int 21h

    Возвращает, в случае успешного завершения, в AX дескриптор файла



    Для записи в файл :

    mov ah,40h

    mov bx, ;- дескриптор файла

    mov cx, ;- число байт которых надо записать

    а так же в DS:lol: X указатель на буфер , где находится инфа для записи.

    int 21h

    При успешном завершении в AX возвратится число байт.



    во первых советую вначале делать так :

    push cs

    pop ds



    код приблизительно такой

    mov ah,3ch

    mov cx,0

    mov dx,offset filename ; ИМЯ А не полный путь, filename db 'file.txt',0

    int 21h

    mov [handle],ax

    ...

    mov bx,[handle]

    mov cx, 10 ;(10 byte или измеряй типа Strlen = $-Str )

    mov dx,offset str

    mov ah,40h

    int 21h

    ..

    ret
     
  7. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Я думал автору в принципе пох. под ДОС или под API писать:)
     
  8. DbIM

    DbIM New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    13
    Спасибо TermoSINteZ Именно это и надо было :)))

    OlegA11 Win Подождет Разберусь сначала с Дос но все равно спасибо
     
  9. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Win Подождет Разберусь сначала с Дос но все равно спасибо



    Да умер он уже, что его копать...

    Да и сложнее это намного. Под Win32 легче писать на MASM'e
     
  10. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    OlegA11

    Да умер он уже, что его копать...

    Ну и что что умер. Я вот тож под уже умерший дос 4 месяца писал и не жалею.



    Да и сложнее это намного.

    Да нет там ничего сложного. А для начинающего возможностей в ос покопаться больше. Никтож там ничего не запрещает.
     
  11. DbIM

    DbIM New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    13
    mov ax,3D00h

    mov dx,offset file_open

    int 21h

    mov handle2,ax

    jc bad



    В данной конструкции на открытие есть сбой или нет ?

    Если нет то почему после выполнения выполняется jc bad

    Заранее спасибо
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    значит так.. если имя файла верно и такой файл есть, то ты открываешь файл на чтение.. возможные коды ошибок : 01h,02h,03h,04h,05h,0Ch (возвращаемое значение в AX если не забыл)

    jc - если перенос (флаг CF = 1)

    при чем тут эта проверка - я не пойму :)
     
  13. brat315

    brat315 New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2006
    Сообщения:
    21
    Адрес:
    Russia
    Попробуй почитать книгу С.Зубкова там все написано,ну а вообще запись реализуется через функцию 13h,что кладется в другие регистры уже не помню.
     
  14. DbIM

    DbIM New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    13
    2 brat315 13h это функция удаления файла

    В остальном разобрался и код выглядит в итоге так



    создаю файл

    mov ah,3ch

    mov cx,0

    mov dx,offset file_save

    int 21h

    jc bad

    mov handle,ax



    Открываю существующий файл

    mov ax,3d00h

    xor cx,cx

    mov dx,offset file_open

    int 21h

    mov handle2,ax

    jc bad



    Читаю файл

    mov ah,3fh

    mov bx,handle2

    mov cx,9999

    int 21h

    cmp ax,0



    Записываю прочтенное в созданный

    mov ah,40h

    mov bx,handle

    mov cx,9999

    mov dx,offset file_open

    int 21h

    jc bad

    cmp ax,cx



    Вопрос теперь в том как записывать файлы размером больше 9999 ?

    (ну того что в cx)

    Может за loop'ить как то надо ?
     
  15. DbIM

    DbIM New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    13
    2 brat315 13h это функция удаления файла

    В остальном разобрался и код выглядит в итоге так



    создаю файл

    mov ah,3ch

    mov cx,0

    mov dx,offset file_save

    int 21h

    jc bad

    mov handle,ax



    Открываю существующий файл

    mov ax,3d00h

    xor cx,cx

    mov dx,offset file_open

    int 21h

    mov handle2,ax

    jc bad



    Читаю файл

    mov ah,3fh

    mov bx,handle2

    mov cx,9999

    int 21h

    cmp ax,0



    Записываю прочтенное в созданный

    mov ah,40h

    mov bx,handle

    mov cx,9999

    mov dx,offset file_open

    int 21h

    jc bad

    cmp ax,cx



    Вопрос теперь в том как записывать файлы размером больше 9999 ?

    (ну того что в cx)

    Может за loop'ить как то надо ?
     
  16. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Ну как как.. по частям пишешь .. передвигая файловый указатель