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!列出文件名是一个良好的开端。当您说“相似的文件名”时,我假设您的意思是“不同目录中的相同文件名”。(否则您需要定义“相似”)。您已经在一个目录中列出了文件。要切换到不同的目录,您可能需要设置不同的 DTA 并使用“首先查找”重新开始。当“查找下一个”最终失败时,您需要将 DTA 设置回您以前的 DTA(“查找下一个”取决于它)并继续该目录。执行此操作的“简洁”方法是使用递归函数(调用自身)和每个 DTA 的“局部变量”(在堆栈上)。然后,当您ret从后续呼叫中恢复时,您将获得“正确”的 DTA。

我有一个例子——在 Nasm 语法中(不是你正在使用的!)。它只列出“所有目录中的所有文件”,不会尝试检查重复项。我的主页上有这个链接的副本,但它已经死了 - uppity ISP 显然已经删除了它。我想我能找到它,我可以把它邮寄给你——fbkotler(猪尾巴)myfairpoint(小数点)网络——它的语法“错误”,不能做你想做的一切,但“可能”是一些帮助...

在我看来,要查找重复的文件名,您需要将找到的每个文件名与在所有其他子目录中找到的每个文件进行比较。“字符串”指令rep cmpsb可能对进行比较有用,但它是一项艰巨的工作!只要在一个目录中找到“myfile.asm”、“myfile.obj”和“myfile.exe”(也可能是“.lst”和“.map”)会更容易,如果这能让“客户”满意的话。 ..

我不羡慕你,但希望能听到更多关于这个问题的消息……

于 2013-01-16T22:35:22.773 回答