【发布时间】:2017-05-22 05:04:39
【问题描述】:
配置:
MS-DOS 16 BIT(写入 .asm 文件,然后用 TASM 和 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 相关,但这并没有帮助。
我尝试过任何方法,从重新启动程序到以“管理员身份”打开 dosbox。可悲的是,没有任何效果,我没有想法。
还有一个奇怪的是,我的一个朋友说激活他的windows 10后,一切正常。
只获得“拒绝访问”的原因是什么?我提到我能够创建、删除和关闭文件,但我无法打开它们。
【问题讨论】:
-
AX是5并不意味着访问本身被拒绝,只有当CF设置为指示错误时。否则它只是你的文件句柄。那么,您检查过CF的值吗? -
不,因为直到现在我都在使用不需要
CF的函数并且忘记了它。嗯你是对的!CF为 0。谢谢。我将删除此帖子。 -
这是一个问得很好的问题(我们看到的不多),可惜答案很简单:)
-
你也在
AL寄存器中传递0,这是访问模式。0表示“只读”,不会帮助您写入文件! -
也谢谢你,科迪·格雷!我被这个问题困扰了半个小时!
标签: assembly x86-16 dos tasm dosbox