Assembly 汇编8086-使用int21h函数5Ah创建随机命名的文件

Assembly 汇编8086-使用int21h函数5Ah创建随机命名的文件,assembly,dos,x86-16,temporary-files,Assembly,Dos,X86 16,Temporary Files,正如标题所暗示的,我想使用这个函数来生成一个随机的、唯一的文件名 我的代码: .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 以下是函数-> 问题是,我不明白应该在

正如标题所暗示的,我想使用这个函数来生成一个随机的、唯一的文件名

我的代码:

.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在指定目录中创建一个具有保证唯一名称的文件。尽管您的文档中提到了以“反斜杠”+13字节结尾的路径,但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)

TFile是这个.COM程序中的最后一项。因此,在这种情况下,不需要使用超过一个零字节作为DOS将从该缓冲区读取的隐式长度C字符串的终止符


.COM程序已经可以使用文件结尾以外的空间作为未初始化的缓冲区空间,因此实际路径缓冲区会扩展到该缓冲区。

DOS.CreateUniquelyNamedFile函数5Ah在指定目录中创建具有保证唯一名称的文件。尽管您的文档中提到了以“反斜杠”+13字节结尾的路径,但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)

TFile是这个.COM程序中的最后一项。因此,在这种情况下,不需要使用超过一个零字节作为DOS将从该缓冲区读取的隐式长度C字符串的终止符


.COM程序已经可以将文件末尾以外的空间用作未初始化的缓冲区空间,因此实际路径缓冲区会扩展到该缓冲区。

您需要为目录和生成的文件名分配足够大的空间,文件名的长度为13(大概为8.3格式,12字节,终止为零)。如果要将其放在当前目录中,请使用点反斜杠预设缓冲区。\n并确保其大小至少为15。请原谅我的坚持,但我到底要怎么做?是否只是将HI(缓冲区变量)更改为-->HI DW'.\'的问题?请原谅我的愚蠢,我是一个绝对的初学者,我不能完全理解你的答案。如果你能告诉我应该对代码进行哪些修改,我将非常感激。HI DB 13 dup(?)提供了缓冲区。但是我应该把.\?
HI DB'.\,13 dup(0)
放在哪里呢?谢谢!现在,该功能按预期工作!您需要为目录和生成的文件名分配足够大的空间,文件名的长度为13(假定8.3格式为12字节,终止为零)。如果要将其放在当前目录中,请使用点反斜杠预设缓冲区。\n并确保其大小至少为15。请原谅我的坚持,但我到底要怎么做?是否只是将HI(缓冲区变量)更改为-->HI DW'.\'的问题?请原谅我的愚蠢,我是一个绝对的初学者,我不能完全理解你的答案。如果你能告诉我应该对代码进行哪些修改,我将非常感激。HI DB 13 dup(?)提供了缓冲区。但是我应该把.\?
HI DB'.\,13 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