【问题标题】:Creating read-only file with TASM Assembler?使用 TASM 汇编器创建只读文件?
【发布时间】:2014-01-05 22:05:36
【问题描述】:

我必须编写一个创建只读文件的 TASM 程序。我创建了文件,但它不是只读的。怎么了?代码如下:

model small
.data
    handle dw 0
    filename db "file2.txt",0
.stack 256
.code
main:

    mov ax,@data
    mov ds,ax

    mov ah,3ch 
    mov cx,1         
    lea dx,filename 
    int 21h 
    jc exit

    mov handle,ax
exit:
    mov ax,4c00h
    int 21h
end main

编辑:我将 mov cx,1 更改为 mov cx,01h 并且有效。

P.S: 我也想隐藏文件所以 我再次更改为mov cx,03h 并完成。创建的文件是只读且隐藏的。

【问题讨论】:

    标签: assembly x86 dos tasm


    【解决方案1】:
    Bit 7 = 1: Shareable
    Bit 6 = 1: Archive
    Bit 5 = 1: Directory
    Bit 4 = 1: Volume (ignored)
    Bit 3 = 1: Label
    Bit 2 = 1: System
    Bit 1 = 1: Hidden
    Bit 0 = 1: Read-only
    

    编辑: 我原来的答案是不正确的,因为我所说的值是按位计算的,所以为了清楚起见,十进制是:

    mov cx, 0       ;  No attributes. 
    mov cx, 1       ;  Read-only. 
    mov cx, 2       ;  Hidden. 
    mov cx, 4       ;  System 
    mov cx, 16      ;  Archive
    

    对于多个属性,将值相加。

    这意味着 CX 的值在您的原始帖子中是正确的,因为 1 无论是十进制还是十六进制(或二进制)都是 1,所以无论您做了什么更改,都不应该解决它。

    很高兴你让它工作了。

    【讨论】:

    • 你是对的。我试图在 64 位 Windows 8 上使用 DOSBox 编写它,但它不能完全工作。所以我在我的旧 Windows XP PC(没有 DOSBox)上编写了相同的代码,这个它工作的时间。
    • 当它们表示位域中的位时,更典型的是 OR 值在一起。例如1 | 2 而不是 1 + 2
    • 在代码中,是的,但出于此目的,结果是相同的。用户不会对其进行任何按位计算。
    • @JBES:我的意思是在 asm 源代码中,当然不是在运行时。比如mov cx, 1 | 2,或者mov cx, O_RDONLY | O_HIDDEN 什么的。
    • 在上面任何一个都可以工作,所以我重复一遍 - 不会对所需的值进行按位计算,因此在这种情况下完全没有必要,因为它是硬编码的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多