Ассемблер

Тема в разделе "Другие", создана пользователем Guest_Misha, 17 май 2005.

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. Guest_Misha

    Guest_Misha Гость

    Народ как на ассемблере прочитать список папок с диска С, файлы не надо. Желательно с коментариями и подробным описанием какие системные функции и прерывания bios использовались и почему. Вся проблема в том что мне надо сделать ассемблерную вставку а я ассемблера не знаю
     
  2. _dimka_

    _dimka_ Гость

    Скачай любую книгу по асму, там глянь работу с файлами.
    Всё. Что за проблема.

    Работать, работать и работать. Может получится программист. :)
     
  3. Guest_Misha

    Guest_Misha Гость

    Скачал я книгу и не одну но там нигде не нашел готового алгоритма, а я ассемблера не знаю, а ради того чтоб сделать вставку читать всю книгу??? Народ я больше чем уверен там прога на 10 строчек, неужели асам в ассемблере влом их чиркануть? Ну вот очень надо выручайте
     
  4. mike.dld

    mike.dld Гость

    DOS, Windows?
     
  5. mike.dld

    mike.dld Гость

    Нижеследующий код прекрасно компилируется FASM'ом (http://flatassembler.net) и должен работать под MS-DOS 2.0+
    Код (Text):
    format MZ

    FILE_SETDTA  = $1A
    FILE_FINDFIRST = $4E
    FILE_FINDNEXT = $4F

       push  cs
       pop   ds

       mov   ah,FILE_SETDTA
       mov   dx,dta
       int   $21

       mov   ax,FILE_FINDFIRST shl 8 + 0
       mov   cx,00110111b; folder attributes
       mov   dx,s_anyfile
       int   $21
       jc   .done

    .next_file:
       test  byte[dta+$15],00010000b
       jz   .findnext
       mov   ah,9
       mov   dword[dta+$1E+13],$240A0D
       mov   dx,dta+$1E
       int   $21

    .findnext:
       mov   ah,FILE_FINDNEXT
       int   $21
       jnc   .next_file

    .done:
       mov   ax,$4C00
       int   $21

    s_anyfile db 'c:\*.*',0
    dta:   rw $80
     
  6. Guest_Misha

    Guest_Misha Гость

    Огромное спасибо, хоть один человек выручил
     
  7. Guest_Misha

    Guest_Misha Гость

    А как это алгоритм будет выглядеть на masm, просто Pascal не понял FASM
     
  8. mike.dld

    mike.dld Гость

    Я не думаю, что различия в синтаксисе очень велики... На MASM'е я никогда не писал, так что если кто-нибудь и может помочь - это не я.
     
  9. ????

    ???? Гость

    $21 => 21h - числа в 16-ричной форме записываются с суффиксом h и 0 в начале, если первая цифра-буква (тавтология :D ) 12h, 0Ah... Метки должны начинаться с буквы или @ (поменяй . на @)

    Может ещё что-то, но это первое что бросилось в глаза.

    З.Ы. Это Tasm'овские правила, т.к. AFAIK в Pascal именно правила Tasm (точнее очень схожие). Более подробно можешь прочитать в Help'е к твоему Pascal'ю.
     
  10. Guest_Misha

    Guest_Misha Гость

    Если я правильно понял то это будет выглядеть так, но это не компилируется

    FILE_SETDTA = 1Ah
    FILE_FINDFIRST = 4Eh
    FILE_FINDNEXT = 4Fh

    push cs
    pop ds

    mov ah,FILE_SETDTA
    mov dx,dta
    int 21h

    mov ax,FILE_FINDFIRST shl 8 + 0
    mov cx,00110111b; folder attributes
    mov dx,s_anyfile
    int 21h
    jc @done

    @next_file:
    test byte[dta+$15],00010000b
    jz @findnext
    mov ah,9
    mov dword[dta+$1E+13],$240A0D
    mov dx,dta+$1E
    int 21h

    @findnext:
    mov ah,FILE_FINDNEXT
    int 21h
    jnc @next_file

    @done:
    mov ax,4C00h
    int 21h

    s_anyfile db 'c:\*.*',0
     
  11. mike.dld

    mike.dld Гость

    Код (Text):
    var
    dta: packed record
     search_attributes: byte;
     drive_letter: char;
     search_template: array[0..10] of char;

     entry_count_within_directory: word;
     pointer_to_dta{???}: pointer;
     parent_dir_first_cluister: word;

     file_attribute: byte;
     file_time: word;
     file_date: word;
     file_size: longint;
     file_name: array[0..12] of char;

     reserved: array[0..84] of byte;
    end;

    const
    FILE_SETDTA  = $1A;
    FILE_FINDFIRST = $4E;
    FILE_FINDNEXT = $4F;
    s_anyfile: PChar = 'c:\*.*'#0;

    label
    next_file,findnext,done;

    begin
    asm
       push  ds
       mov   ax,seg dta
       mov   ds,ax
       mov   ah,FILE_SETDTA
       lea   dx,dta
       int   $21

       mov   ax,FILE_FINDFIRST shl 8 + 0
       mov   cx,00110111b { folder attributes }
       lea   dx,s_anyfile+4 { first 4 bytes = string length }
       int   $21
       jc   done
    end;
    next_file:
    asm
       test  byte[dta+$15],00010000b
       jz   findnext
    end;
       writeln(dta.file_name);
    findnext:
    asm
       mov   ah,FILE_FINDNEXT
       int   $21
       jnc   next_file
    end;
    done:
    end.
     
Загрузка...
Похожие Темы - Ассемблер
  1. alalai
    Ответов:
    0
    Просмотров:
    978
  2. Dimkawshm
    Ответов:
    2
    Просмотров:
    1.104
  3. Victoria123
    Ответов:
    0
    Просмотров:
    983
  4. MariyaStarikova
    Ответов:
    0
    Просмотров:
    1.013
  5. vladden
    Ответов:
    1
    Просмотров:
    1.881
Статус темы:
Закрыта.

Поделиться этой страницей