在具有 INT 21,43 的程序集上将文件属性更改为只读不起作用

Vyt*_*kas 2 x86 assembly file-attributes dosbox

我对汇编很陌生,最近我一直在努力使 INT 21,43 (将文件属性更改为只读)工作。我正在使用 Windows 10、DOSBox x86 和 Turbo 汇编器/链接器/调试器(如果这有什么区别的话)。据我所知,使用调试器,它应该可以工作(CF 未设置,并且根据文档,我没有得到应有的错误代码)。另外,如果我使用相同的 INT 21,43 获取(将 al 设置为 0)文件的文件属性,该文件已手动设置为只读,则 CX 设置为 20,据我所知,这不会使有道理,但 CF 没有设置好,所以它说它有效。我希望你能帮我解决这个问题,提前致谢。

.model small
.stack 100h

.data
    filename db "temp.txt",0 ; my file name 

.code

start:

    mov dx, @data
    mov ds, dx
    
    mov ah, 43h
    mov al, 01h ; Set file attribute
    mov cx, 01h ; 1 = read-only
    lea dx, filename ; Set pointer to filename
    int 21h
    
    mov ah, 4ch ; Return to DOS       
    mov al, 0               
    int 21h  


end start

Run Code Online (Sandbox Code Playgroud)

这是调用 INT 21,43 中断后调试器显示的内容

Sep*_*and 6

我刚刚尝试从 DOSBox 中运行的程序设置 ReadOnly 属性,但它不起作用。

DOSBox 的帮助help /all报告称该ATTRIB命令不执行任何操作,并且它只是为了兼容性而提供的。因此按理说,DOS.function 43h(获取/设置文件属性)不会被实现。

由于 DOSBox 主要是为了模拟旧的 DOS 游戏,因此可能没有理由想要更改属性。

  • [确实](https://sourceforge.net/p/dosbox/code-0/HEAD/tree/dosbox/branches/0_74_3/src/dos/dos_files.cpp#l643):“此函数不会更改文件属性” (2认同)