如何使用Turbo Assembly程序删除文件?

时间:2014-01-06 01:23:30

标签: file assembly tasm

我试图简单地通过编写一个程序来删除与程序在同一文件夹中的文件,但是当我运行它时,我得到“非法路径”。这是代码:

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路径(据我所知,它应该设置在那里)。我应该用文件名写吗?

1 个答案:

答案 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_fnamelds调用而只是将文件名的偏移量直接加载到dx中,例如:< / p>

mov  dx, offset filename

indirection-with-lds方法可能会工作,但似乎是一种不必要的复杂化。


可能也要小心,这种东西仍然适用于Windows的现代版本(它可能会,也可能不会)。

微软是后向兼容性的忠实信徒,但是这些东西是在MSDOS 2中引入的,并且可能不支持超出8.3限制或NTFS的文件名这样的奇妙新事物: - )

如果您在DosBox或运行Windows 98或更低版本的VM下运行,那么您应该没问题,但我对此之外的功能至少有一点谨慎。