0

マシンの問題は、アセンブリ言語を使用して、異なるディレクトリにある同様のファイル名を持つファイルを見つけて表示することです..tasm&tlinkまたはエミュレータ8086を使用してコンパイルされたコンソールプログラム...

私が試したコードは次のとおりです。ファイルのリストのみが表示されます。私の問題は、同様のファイル名を持つファイルのみを表示する方法がわからないことです..私の問題に関するアイデアは本当にありがたいです。ありがとう ..

.model small, c

.stack

.data
    file_spec db "*.*", 0
    DTA db 128h dup(0)
    buffer db 30 dup(0)

.code
main proc
    mov ax, @Data
    mov ds, ax
    mov dx,offset DTA
    mov ah,1Ah
    int 21h ; set DTA location

    mov dx,offset file_spec
    xor cx, cx
    mov ah,4Eh
    int 21h
    jc  quit

print_name:
    lea si, DTA + 30

next_char:
    lodsb
    int 29h
    test al, al
    jnz next_char

    mov al, 13
    int 29h
    mov al, 10
    int 29h

    mov dx, offset file_spec
    xor cx, cx
    mov ah, 4fh
    int 21h
    jnc print_name

quit:   
    mov ax, 4c00h
    int 21h
main endp
    end main

これは私が試した別のソースコードです。今回は int 21h 、 4eh 、 4fh (MS Dos で) を使用しました。同様のファイル名を持つファイルのみを表示できるようにこのコードを拡張するのを手伝ってくれませんか? どんな種類の助けも大歓迎です。前もって感謝します..

.model small, c

.stack

.data
    file_spec db "*.*", 0
    DTA db 128h dup(0)

.code
    main proc
    mov ax, @Data
    mov ds, ax
    mov dx,offset DTA
    mov ah,1Ah
    int 21h

    mov dx,offset file_spec
    xor cx, cx
    mov ah,4Eh
    int 21h
    jc  quit

print_name:
    lea si, DTA + 1eh
next_char:
    lodsb
    int 29h
    test al, al
    jnz next_char

    mov al, 13
    int 29h
    mov al, 10
    int 29h

    mov dx, offset file_spec
    xor cx, cx
    mov ah, 4fh
    int 21h
    jnc print_name
 quit:   
    mov ax, 4c00h
    int 21h
 main endp
    end main
4

1 に答える 1

0

これは難しいプロジェクトのようです、asmaj!ファイル名をリストすることから始めましょう。「類似したファイル名」とは、「異なるディレクトリにある同一のファイル名」を意味していると思います。(それ以外の場合は、「類似」を定義する必要があります)。1つのディレクトリにファイルをリストしました。別のディレクトリに切り替えるには、おそらく別のDTAを設定し、「最初に検索」からやり直す必要があります。「次を検索」が最終的に失敗した場合は、「DTAを設定」して以前のDTAに戻し(「次を検索」はそれに依存します)、そのディレクトリを続行します。これを行う「きちんとした」方法は、各DTAの「ローカル変数」(スタック上)を持つ再帰関数(それ自体を呼び出す)を使用することです。その後retの呼び出しから、「正しい」DTAが返されます。

私はこれの例を持っています-Nasm構文で(あなたが使用しているものではありません!)。「すべてのディレクトリ内のすべてのファイル」を一覧表示するだけで、重複をチェックしようとはしません。私はこれのコピーを私のホームページにリンクしていましたが、それは死んでいます-uppityISPは明らかにそれを削除しました。私はそれを見つけることができると思います、そして私はそれをyaに郵送することができます--fbkotler(豚のしっぽ)myfairpoint(小数点)net-それは「間違った」構文であり、あなたが望むすべてをしませんが、「かもしれない」手助け...

重複するファイル名を見つけるには、見つかった各ファイル名を、他のすべてのサブディレクトリで見つかったすべてのファイルと比較する必要があるようです。「文字列」命令rep cmpsbはおそらく比較を行うのに役立ちますが、それは仕事の負担です!「顧客」を満足させるのであれば、単一のディレクトリで「myfile.asm」、「myfile.obj」、「myfile.exe」(おそらく「.lst」と「.map」も)を見つける方が簡単です。 ..

私はあなたをうらやましくはありませんが、この件についてあなたからもっと多くのことを聞きたいと思っています...

于 2013-01-16T22:35:22.773 に答える