Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1531
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

113

ДЕНЬ 6

Программирование под MS-DOS

Почти все, что мы рассмотрели на предыдущих днях (архитектура компьютера, конструкции и команды ассемблера), касается непосредственно ассемблера, но не программирования под MS-DOS.

Конечно, в наше время программирование под MS-DOS уже неактуально. Однако, многие простые программы на ассемблере иногда быстрее и проще реализовать под MS-DOS, чем с использованием функций API под Windows. В любом случае я советую ознакомиться с материалом этого дня, т. к. некоторые сведения здесь позволяют лучше узнать архитектуру компьютера (скан-коды, аппаратные и программные прерывания, работа с видеопамятью и пр.).

Разумеется, за один день невозможно рассмотреть все особенности программирования под MS-DOS (да это и не нужно в наше время), поэтому здесь приводится только все самое необходимое без чего невозможно создание более менее полноценного приложения: чтение параметров командной строки, вывод на экран в текстовом режиме, ввод с клавиатуры, работа с файлами и пр.

6.1. Чтение параметров командной строки

На втором дне (см. разд. 2.8) мы говорили о том, что параметры командной строки, переданные программе при старте, сохраняются в структуре PSP по адресу PSP:80h.

Например, если файл был запущен следующим образом: program.exe par1 par2 par3

то здесь "program.exe par1 par2 par3" — командная строка, а " par1 par2 par3" — параметры командной строки.

Первый байт, расположенный в PSP по смещению 80h, всегда указывает длину строки параметров (см. табл. 2.2), т. е. количество символов вместе с пробелами (для примера выше длина будет равен 15). Понятно, что если файлу никаких параметров передано не было, то его значение будет равно нулю. Второй байт является пробелом (20h) — он отделяет имя файла от первого параметра, после которого идут все параметры, разделяемые пробелами. За самым последним параметром всегда располагается код клавиши <Enter> (0Dh).

В листинге 6.1 показана программа, которая принимает параметры командной строки, затем считывает параметры из PSP и выводит на экран в том же виде, в каком они были указаны в командной строке.

Параметры командной строки можно наблюдать в отладчике (рис. 6.1) в окне 5 (содержимое памяти). Для этого запустите программу под отладчиком следующим образом:

cv psp_arg.com one two three param

где one two three param — параметры командной строки.

http://www.sklyaroff.ru

114

Рис. 6.1. Параметры командной строки в PSP после загрузки программы

Листинг 6.1. Пример считывания параметров командной строки из PSP (psp_arg.asm)

.model tiny

.code

org 100h

start:

 

 

mov

cl,ds:80h

; количество символов

 

 

; в командной строке

cmp

cl,0

; если нет параметров - выходим

je

err_arg

; с соответствующим сообщением

mov

si,82h

; по смещению 82h

cld

 

; размещается командная строка

 

 

get_arg:

 

 

lods

byte ptr es:[si] ; помещаем в al очередной

 

 

; символ командной строки

mov

ah,2

; выводим символ на экран

mov

dl,al

 

int

21h

 

loop

get_arg

 

jmp

end_progr

 

err_arg:

 

 

mov

ah,09h

 

mov

dx,offset no_arg

int

21h

 

end_progr:

 

 

ret

 

 

no_arg db

"Нет параметров",13,10,'$'

end

start