【问题标题】:how to find and display files with similar file names using assembly language?如何使用汇编语言查找和显示具有相似文件名的文件?
【发布时间】:2013-01-16 05:59:24
【问题描述】:

机器问题是在不同目录中查找并显示文件名相似的文件,使用汇编语言..使用tasm&tlink或emulator 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

【问题讨论】:

  • 帖子缺少问题部分和您遇到问题的示例代码...否则不适合雇人为您做这件事。
  • gcc -S... 或者干脆放弃课程;)。通过汇编进行文件系统交互是痛苦的。这样做没有合理的理由 - 高级语言的存在是有原因的。
  • 您甚至没有提到将使用哪个操作系统。假设是 DOS,你应该看看 INT 21H 列表:ctyme.com/intr/int-21.htm 例如,AH=4EH (FindFirst) 和 AH=4FH (FindNext)。
  • 我真的很感谢任何可以帮助我解决这个机器问题的人......我承认我在汇编语言编程方面没有扎实的基础,这就是为什么我很难实现这个 MP .我确实希望有人可以帮助我...感谢上帝保佑!

标签: assembly


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,我指的是不同目录中相同的文件名......我理解你的观点,我真诚地感谢你的想法。我知道我在汇编语言编程方面不是很擅长,但我会尽力应用你的想法......如果你能找到你上面提到的例子,如果你能把它发送到我的电子邮箱,我将不胜感激-mail (khalidjamerah@ymail.com),也许对我有帮助.. 非常感谢!
  • 我真的必须尽快解决这个机器问题...弗兰克,感谢您抽出一些时间...如果您有时间,请立即发送您上面提到的示例吗?也许它真的会有所帮助......感谢上帝保佑!
猜你喜欢
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多