我试图简单地通过编写一个程序来删除与程序在同一文件夹中的文件,但是当我运行它时,我得到“非法路径”。这是代码:
masm
model small
.data
filename db "my_file.txt"
point_fname dd filename
.stack 256
.code
main:
mov ax,@data
mov ds,ax
lds dx,point_fname
mov ax,41h
int 21h
jc exit
nop
exit:
mov ax,4c00h
int 21h
end main
不应该搜索程序的.ASM文件在哪里,或者我应该给出路径名?
此外,我不知道我应该如何给DX路径(据我所知,它应该设置在那里)。我应该用文件名写吗?
答案 0 :(得分:3)
您需要注意的一些事项。
根据Ralf Brown's excellent interrupt list,使用int21 / ah = 41删除文件。通过将ax
设置为0041
,您将ah
设置为零,这是“终止程序”功能。你需要:
mov ah, 41h
其次,文件名是ASCIZ,意味着它应该以零字节终止:
filename db "my_file.txt", 0
第三,你似乎有一些不必要的间接(la point_fname
)。 ds:dx
寄存器对应直接指向文件名,您应该能够在没有额外数据项的情况下执行此操作。
你在这里延伸我的记忆,但我认为你会放弃point_fname
和lds
调用而只是将文件名的偏移量直接加载到dx
中,例如:< / p>
mov dx, offset filename
indirection-with-lds方法可能会工作,但似乎是一种不必要的复杂化。
你可能也要小心,这种东西仍然适用于Windows的现代版本(它可能会,也可能不会)。
微软是后向兼容性的忠实信徒,但是这些东西是在MSDOS 2中引入的,并且可能不支持超出8.3限制或NTFS的文件名这样的奇妙新事物: - )
如果您在DosBox或运行Windows 98或更低版本的VM下运行,那么您应该没问题,但我对此之外的功能至少有一点谨慎。