Assembly 如何在DOS汇编程序中获取环境变量

Assembly 如何在DOS汇编程序中获取环境变量,assembly,environment-variables,dos,x86-16,Assembly,Environment Variables,Dos,X86 16,我必须在汇编中编写程序,在DOS系统中获取和打印环境变量。我在找,不幸的是我找不到解决办法 DOS将进程的环境变量存储在中。环境块是一种数据结构,包含以NUL结尾的环境变量对及其值。环境块的最后一个条目只是一个空字符串 environment_block: db 'COMSPEC=c:\command.com',0 db 'PROMPT=$p$g',0 db 'WP=c:\wordproc',0 db

我必须在汇编中编写程序,在DOS系统中获取和打印环境变量。我在找,不幸的是我找不到解决办法

DOS将进程的环境变量存储在中。环境块是一种数据结构,包含以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二进制文件中,它位于段
DS
ES
的偏移量
0000
。如果需要加载其他段选择器,请确保记住
DS
原始值的副本,以便找到您的PSP

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

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

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

您知道如何访问环境块吗?我只找到了一个关于PSP块的信息,这就是您的意思吗?这是一个好的开始。现在我知道什么样的答案对你有用了。让我写一个。你是在写COM还是EXE二进制?COM格式。我使用ORG100H指令