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