Как получить переменные окружения в программе сборки DOS - PullRequest
0 голосов
/ 30 марта 2020

Мне приходится делать программу на ассемблере, которая получает и печатает переменные окружения системы DOS. Я искал и, к сожалению, я не могу найти решение.

1 Ответ

3 голосов
/ 30 марта 2020

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 это смещение 0000 сегмента DS и ES. Если вам нужно загрузить другие селекторы сегментов, обязательно запомните копию исходного значения DS, чтобы вы могли найти свой PSP.

Сегмент блока среды можно найти по адресу 002c в PSP:

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

Затем вы можете обрабатывать переменные в блоке окружения как любую другую последовательность строк.

...