程序集 8086 - 使用 int21h 函数 5Ah 创建一个随机命名的文件
Assembly 8086 - Using int21h function 5Ah to create a randomly named file
正如标题所暗示的,我想使用这个函数来生成一个随机的、唯一的文件名。
我的代码:
.model tiny
.code
ORG 100H
HOST:
MOV AH, 5Ah
XOR CX, CX
MOV DX, OFFSET HI
int 21h;
MOV BX, DX
mov ax,4c00h
int 21h
mov ah,9
mov dx, OFFSET BX
int 21h
HI DW '\'
END HOST
END
这是函数的文档 ->
问题是,我不明白 DX
中应该放什么。应该创建文件的文件夹的路径?不是应该默认创建在当前目录下吗?如果没有,我该怎么做?如上所示,用 '/' 试了一下。文档说了一些关于以 'backslash' + 13 字节结尾的路径以接收生成的文件名,但老实说我不知道那是什么意思。应该在代码中添加什么才能使函数正常工作?
DOS.CreateUniquelyNamedFile函数5Ah在指定目录中创建一个名称保证唯一的文件。即使您的文档谈到 以 'backslash' + 13 字节 结尾的路径,DOS 也只创建一个 8 个字符的文件名,如“BEAAAGDB”(无扩展名)。 'backslash' + 9 字节 就足够了。当然,如果你想安全起见,只需分配所有 13 个字节即可。
要在特定目录中创建,请使用例如db '\DOS\TEMP\', 9 dup (0)
.
要在当前目录中创建,请使用 db '.\', 9 dup (0)
.
要在父目录中创建,请使用 db '..\', 9 dup (0)
.
要在根目录中创建,请使用 db '\', 9 dup (0)
或 db 10 dup (0)
.
.model tiny
.code
ORG 100h
HOST:
mov dx, offset TFile
xor cx, cx ; Attribute NORMAL
mov ah, 5Ah ; DOS.CreateUniquelyNamedFile
int 21h ; -> AX CF
; Because we exit immediately, there's no need to check the CF for failure
; nor do we need to 'close' the file (Terminate does that for us)
mov ax, 4C00h ; DOS.Terminate
int 21h
TFile db '.\', 0
; db 12 dup(?) ; implicit at the end of a .COM file
END HOST
TFile 是此 .COM 程序中的最后一项。所以在这种情况下,不需要使用超过一个零字节作为 DOS 将从该缓冲区读取的隐式长度 C 字符串的终止符。
.COM 程序已经可以使用超出文件末尾的 space 作为未初始化的缓冲区 space,因此实际路径缓冲区扩展到该缓冲区。
正如标题所暗示的,我想使用这个函数来生成一个随机的、唯一的文件名。
我的代码:
.model tiny
.code
ORG 100H
HOST:
MOV AH, 5Ah
XOR CX, CX
MOV DX, OFFSET HI
int 21h;
MOV BX, DX
mov ax,4c00h
int 21h
mov ah,9
mov dx, OFFSET BX
int 21h
HI DW '\'
END HOST
END
这是函数的文档 ->
问题是,我不明白 DX
中应该放什么。应该创建文件的文件夹的路径?不是应该默认创建在当前目录下吗?如果没有,我该怎么做?如上所示,用 '/' 试了一下。文档说了一些关于以 'backslash' + 13 字节结尾的路径以接收生成的文件名,但老实说我不知道那是什么意思。应该在代码中添加什么才能使函数正常工作?
DOS.CreateUniquelyNamedFile函数5Ah在指定目录中创建一个名称保证唯一的文件。即使您的文档谈到 以 'backslash' + 13 字节 结尾的路径,DOS 也只创建一个 8 个字符的文件名,如“BEAAAGDB”(无扩展名)。 'backslash' + 9 字节 就足够了。当然,如果你想安全起见,只需分配所有 13 个字节即可。
要在特定目录中创建,请使用例如db '\DOS\TEMP\', 9 dup (0)
.
要在当前目录中创建,请使用 db '.\', 9 dup (0)
.
要在父目录中创建,请使用 db '..\', 9 dup (0)
.
要在根目录中创建,请使用 db '\', 9 dup (0)
或 db 10 dup (0)
.
.model tiny
.code
ORG 100h
HOST:
mov dx, offset TFile
xor cx, cx ; Attribute NORMAL
mov ah, 5Ah ; DOS.CreateUniquelyNamedFile
int 21h ; -> AX CF
; Because we exit immediately, there's no need to check the CF for failure
; nor do we need to 'close' the file (Terminate does that for us)
mov ax, 4C00h ; DOS.Terminate
int 21h
TFile db '.\', 0
; db 12 dup(?) ; implicit at the end of a .COM file
END HOST
TFile 是此 .COM 程序中的最后一项。所以在这种情况下,不需要使用超过一个零字节作为 DOS 将从该缓冲区读取的隐式长度 C 字符串的终止符。
.COM 程序已经可以使用超出文件末尾的 space 作为未初始化的缓冲区 space,因此实际路径缓冲区扩展到该缓冲区。