如何使用汇编语言查找和显示具有相似文件名的文件?

时间:2013-01-16 05:59:25

标签: assembly

机器问题是使用汇编语言在不同目录中查找和显示具有类似文件名的文件。使用tasm& amp;编译的控制台程序。 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

1 个答案:

答案 0 :(得分:0)

这似乎是一个艰难的项目,asmaj!列出文件名是一个很好的开始。当你说“类似的文件名”时,我认为你的意思是“不同目录中的相同文件名”。 (否则你需要定义“相似”)。您已在一个目录中列出文件。要切换到其他目录,您可能需要设置不同的DTA并重新开始“查找第一个”。当“查找下一个”最终失败时,您需要将“设置DTA”恢复为之前的DTA(“查找下一个”取决于它)并继续该目录。执行此操作的“简洁”方法是使用递归函数(调用自身),并为每个DTA使用“局部变量”(在堆栈上)。然后,当您ret来自后续通话时,您将获得“正确”的DTA。

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

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

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