gpt4 book ai didi

assembly - 使用 3Dh 导致中断只返回 "Acces Denied"

转载 作者:行者123 更新时间:2023-12-04 21:07:45 25 4
gpt4 key购买 nike

配置 :

MS-DOS 16 BIT (writing in a .asm file, then compiling them with TASM and TLINK)

Windows 7 x64


我在 Assembly 中做了一个简单的程序,它应该只打开一个文件并向其中写入一个文本。
这是它的代码:
assume cs:code, ds:data
data segment
fileName db "input.txt", 0 ; We assure it is an ASCIIZ(ero) file.
toWrite db "Hello World!", "$"
data ends

code segment
writeToFile:
; pentru functia 3Dh
mov AH, 3Dh
mov AL, 0h
mov dx, offset fileName
int 21h
ret


start_program:
mov ax, data
mov ds, ax
CALL writeToFile
mov ax, 4c00h
int 21h
code ends

end start_program
我使用 TurboDebugger 来看看会发生什么。奇怪的是,它总是输入 AX值(value) 0005意思 Access Denied我可以在互联网上找到的所有搜索内容 ASSEMBLY access denied open file是关于 DLL 's 并没有帮助。
我尝试过任何方法,从重新启动我的程序到“以管理员身份”打开 dosbox。可悲的是,没有任何效果,我没有想法。
同样奇怪的是,我的一个 friend 说在激活他的 Windows 10 后,一切正常。
仅获得“拒绝访问”的原因是什么?我提到我能够创建、删除和关闭文件,但我无法打开它们。

最佳答案

为了正确操作,您的 writeToFile 过程需要

  • 以允许后续写入的访问模式打开文件
  • 检查 DOS 返回的 CF 是否一切正常

  • 我注意到您用“$”终止了您将在此文件中写入的文本。我想知道你是否知道真正写入文件的 DOS 函数只适用于 CX 中指定的长度。并且没有任何类型的分隔符。对于这个“$”字符,您可能有其他正当理由 -;
    writeToFile:
    mov ax, 3D01h ; 01h=WriteAccess
    mov dx, offset fileName
    int 21h
    jc NOK
    mov bx, ax ; Handle
    mov dx, offset toWrite
    mov cx, 12 ; Length of "Hello World!"
    mov ah, 40h
    int 21h
    jc NOK
    cmp ax, cx
    jne NOK
    NOK:
    ret

    将 NOK 标签放在哪里以及在那里做什么完全取决于您想在处理 DOS 返回的错误时花费多少精力。在这个非常简单的程序中,您可能只是从 call 返回。并让程序终止。

    关于assembly - 使用 3Dh 导致中断只返回 "Acces Denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41522563/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com