assembly - 程序集 8086 - 使用 int21h 函数 5Ah 创建一个随机命名的文件
问题描述
正如标题所暗示的,我想使用这个函数来生成一个随机的、唯一的文件名。
我的代码:
.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
。应在其中创建文件的文件夹的路径?不应该在当前目录下默认创建吗?如果没有,我该怎么做?如上所示,使用“/”进行了尝试。文档说明了以“反斜杠”+ 13 个字节结尾的路径以接收生成的文件名,但老实说,我不知道这应该是什么意思。应该在代码中添加什么以使该功能起作用?
解决方案
DOS.CreateUniquelyNamedFile 函数 5Ah 在指定目录中创建一个具有保证唯一名称的文件。即使您的文档提到以 'backslash' + 13 bytes 结尾的路径,DOS 也会创建一个 8 个字符的文件名,如“BEAAAGDB”(无扩展名)。'反斜杠' + 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 程序已经可以将文件末尾以外的空间用作未初始化的缓冲区空间,因此实际的路径缓冲区会扩展到该空间。
推荐阅读
- javascript - React - Generate input field via dropdown
- java - Fireabase Realtime Database client requests have expired, I have re enabled them, but still entries are not created in the db?
- python - Django save multiple versions of a Image within a class
- node.js - Node.js 中的 Multer middlware 在 req.body 中返回空对象,在 req.file 中返回未定义对象
- c++ - Why I can't use my class without parenthesis?(in C++)
- scala - 运行时异常 java.lang.NoSuchMethodError: com.google.common.base.Optional.toJavaUtil()L 与 Spark-BigQuery 连接器
- laravel - 找不到Vuejs查看应用程序问题Larevel 7
- java - Apache POI 自定义格式(#.##0,00)不起作用
- python - 如何从列表中查找和删除具有给定总字母数的字符串对
- c++ - C ++如何停止调整Sf :: Text on screen resize(但在同一位置)