【发布时间】:2015-05-11 16:20:19
【问题描述】:
我正在编写一个汇编级程序来创建一个文件。
.model small
.data
Fn db "test"
.code
mov ax,@data
mov ds,ax
mov CX,00
lea DX,Fn
mov ah,3ch
int 21h
Mov ah,4ch
Into 21h
End
虽然程序没有错误,但没有创建文件,所以我在网上搜索了原因。
然后我找到了 ASCIIZ。
所以我用
替换了数据段.data
Fn db "test", 0
成功了。
为什么我们需要使用ASCIIZ,为什么不能使用普通字符串来创建文件?
【问题讨论】:
-
不知道您使用的是什么操作系统,这很难说,但我猜您尝试使用的例程需要一个“正常”C字符串,必须以 0 字节结束。您的原始代码不能保证“测试”之后会发生什么,因此它很可能是任何东西,包括对您的文件系统来说非法的字符。
-
因为如果您使用
ah = 3ch阅读documentation regardingint 21h,它会告诉您文件名字符串必须以零结尾。否则,它怎么知道字符串的结尾在哪里?并且Fn db "test"不会自动归零终止字符串。它必须是明确的。 -
@Joe:INT 21h 是一个典型的 MS-DOS(和衍生)系统调用。
-
旁白:始终阅读文档。根据@lurker 的评论,将字符串打印到
stdinInt 21h 函数09h 要求字符串以美元结尾$。