【问题标题】:Creating/removing directory using assembler (tasm) on windows在 Windows 上使用汇编程序(tasm)创建/删除目录
【发布时间】:2022-01-16 06:53:07
【问题描述】:

我必须编写一个创建和删除目录的 TASM 程序,但我找到了仅创建文件的示例。

model small
.data
    handle dw 0
    filename db "file2.txt",0
.stack 256
.code
main:

    mov ax,@data
    mov ds,ax

    mov ah,3ch 
    mov cx,1         
    lea dx,filename 
    int 21h 
    jc exit

    mov handle,ax
exit:
    mov ax,4c00h
    int 21h
end main

如何修改此代码以创建目录而不是文件?以及如何删除创建的火药?

【问题讨论】:

  • int 21h 这不是 Windows。使用CreateDirectoryW
  • 使用DOS int 21h is 39h创建目录的函数代码。
  • 您的示例是针对 DOS 的,当您使用 DOS 函数CREATE SUBDIRECTORYREMOVE SUBDIRECTORY 时,它将在 32 位 Windows 中运行。您应该更新您的问题的标签。或者,如果您需要 MS Windows 的原生 PE 程序,请搜索更好的 32 位保护模式程序示例。
  • TASM 甚至可以制作原生 Windows 可执行文件,而不仅仅是 DOS?我认为 Windows 程序会使用 .386 / .model flat,stdcall。所以看起来你实际上是在制作一个纯 DOS 程序。如果您碰巧在旧的 / 32 位 Windows 系统上运行它,它可能会在 NTVDM 下运行。所以你应该修复你的标签,并检查一个 DOS 系统调用列表。必要的调用应该列在创建文件的调用旁边。

标签: windows winapi assembly mkdir tasm


【解决方案1】:

我不得不使用 masm 和 winapi。这是我的示例代码

.586
.model flat, stdcall
option  casemap:none
includelib kernel32.lib
includelib shell32.lib
include windows.inc
include kernel32.inc

.const
    sDir db 'folder', 0
    
.code
    Main PROC
        invoke CreateDirectoryA, OFFSET sDir, NULL
        invoke Sleep, 2000d
        invoke RemoveDirectoryA, OFFSET sDir
        invoke Sleep, 2000d
        invoke ExitProcess, NULL
    Main ENDP

end Main

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多