【问题标题】:How to get environment variables in a DOS assembly program如何在 DOS 汇编程序中获取环境变量
【发布时间】:2020-03-30 10:54:23
【问题描述】:

我必须在汇编程序中执行获取和打印环境变量 DOS 系统的程序。我正在寻找,不幸的是我找不到解决方案。

【问题讨论】:

  • 你知道如何访问环境块吗?
  • 我只找到了一个关于PSP块en.wikipedia.org/wiki/Program_Segment_Prefix的信息是你的意思吗?
  • 这是一个好的开始。现在我知道什么样的答案对你有用。让我写一个。
  • 您是在编写 COM 还是 EXE 二进制文件?
  • COM 格式。我使用 org 100h 指令

标签: assembly environment-variables dos x86-16


【解决方案1】:

DOS 将您的进程的环境变量存储在environment block 中。环境块是一个数据结构,其中包含以 NUL 结尾的环境变量对及其值。环境块的最后入口只是一个空字符串。

environment_block:
        db      'COMSPEC=c:\command.com',0
        db      'PROMPT=$p$g',0
        db      'WP=c:\wordproc',0
        db      'PATH=d:\;c:\dos;c:\utils',0
        db      0

要查找环境块,首先检索指向 PSP 的指针。在 COM 二进制文件中,PSP 可以在任何段的偏移量0000 处找到。在 EXE 二进制文件中,它位于段 DSES 的偏移量 0000 中。如果您需要加载其他段选择器,请务必记住 DS 的原始值的副本,以便找到您的 PSP。

然后可以在 PSP 中的地址 002c 找到环境块的段:

        ; assuming DS is the segment of the PSP
        mov     es, [2ch]    ; ES:0000h now points to the environment block

然后您可以像处理任何其他字符串序列一样处理环境块中的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 2012-03-24
    • 2021-12-07
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多