我在汇编方面遇到了一些麻烦,我使用 TASM 进行编译,使用 TLINK 进行链接(是的,我知道这些是旧的和过时的,但当前不是一个选项,所以请不要建议这样做)。 情况是这样的。用户在控制台中输入路径,程序会跳转到该目录并尝试打开其中的任何文件。当我知道文件名时,我才知道如何访问文件。那么如何做这样的事情呢?
附注虽然一般逻辑也很好,但如果您编写任何代码,请评论它,我对此非常陌生。
您必须扫描目录。根据您的 SO,这可以通过不同的方式完成。例如,如果您处于 DOS 环境,这就是我所假设的您所使用的工具,这是通过使用
4Eh
的 int 21h
功能来完成的。然后,您可以使用服务4Fh
来获取后续文件。
DS:DX
必须指向包含要搜索文件的路径的 ASCIIZ 字符串。路径必须包含文件名或某种通配符(例如,如果您想扫描整个目录,则使用 *.*
)。这是为了功能4Eh
。函数 4Fh
从函数 4Eh
或之前调用函数 4Fh
找到的文件之后的文件中恢复扫描。
其代码为:
;setup a DTA for scanning directories
mov dx,offset of your DTA block
mov ax,segment of your DTA block (normally your current data segment)
mov ds,ax
mov ah,1Ah
int 21h
;setup registers for int 21h,4Eh
;including DS:DX = ASCIIZ string with path and possibly, wilcard.
;......
;......
mov ah,4Eh
int 21h
cmp cx,0
jnz NoMoreFiles
NextFile:
;Parse DTA to obtain filename and extension of the first file found (at offset 30d)
;......
;......
mov ah,4Fh
int 21h
jc NoMoreFiles
jmp NextFile
NoMoreFiles:
有关要使用哪些 DOS 服务以及它们期望的参数的更多详细信息,请参见此处: http://bbc.nvg.org/doc/Master%20512%20Technical%20Guide/m512techb_int21.htm