【问题标题】:Get current directory name assembly 8086 tasm获取当前目录名程序集 8086 tasm
【发布时间】:2015-12-30 13:25:05
【问题描述】:

我不知道为什么函数 47h 在缓冲区中返回 ASCIZ。如何获取当前目录的名称?请帮帮我,我的代码如下。

assume cs:code, ds:data
data segment
numed db "Directory name: $"
msge db "Error!$" ;error if jc is set
buffer db 200 dup("$") ;buffer for directory name
data ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax


mov dl,0 ;default drive
mov si,offset buffer ;si = buffer
mov ah,47h
int 21h
jc errorr
jmp final
errorr:
    mov ah,09h
    mov dx,offset msge ;error message
    int 21h
final:  
mov ah,09h
mov dx,offset buffer;print directory name
int 21h
mov ax, 4C00h
int 21h
code ends
end start

【问题讨论】:

    标签: assembly dos x86-16


    【解决方案1】:

    在 DOSBOX 0.74 中没有问题
    如果我将您的程序PAULC.EXE 放在我的目录C:\ASM 中,该目录有一个子目录EXEMPLES,然后在DOSBOX 提示符下执行这些命令,我​​会得到正确的响应:

    mount d c:\asm
    cd exemples
    ..\paulc.exe
    

    屏幕现在显示:

    EXEMPLES
    

    如果现在我从这个子目录返回并再次运行你的程序:

    cd..
    paulc.exe
    

    我得到一个空字符串。

    【讨论】:

      【解决方案2】:

      我的 MS-DOS 参考中提到了 Int 21h 函数 47h:

      如果目录是根目录,返回的字符串是nul (第一个字节 0)。

      另外,请注意 int 21h 函数 09h 需要一个以$ 结尾的字符串。

      【讨论】:

      • 那么您希望当前目录是什么?你设置了吗?
      • 我想在屏幕上打印我工作的目录名。ex:i work in d:/assembleyFolder/exemple/ -> 屏幕上必须是“目录名:example”跨度>
      • 您是从控制台还是 IDE 运行?当前目录设置好了吗?
      • 我在dosBox控制台工作。我没有设置任何东西,我唯一做的就是上面的代码。
      • 如果你没有设置当前目录,那么它仍然是根目录,由 func 47h 报告。可以在 DOSBOX 中设置当前目录吗?我不使用它。有没有可以输入CD /assembleyFolder/exemple/的命令行?
      猜你喜欢
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2010-11-24
      • 2012-06-12
      相关资源
      最近更新 更多