 |
.CODE
mov ax,@Data
mov dx,ax ; установить регистр DS таким
; образом, чтобы он указывал
mov ah,40h ; функция DOS вывода строки
; на устройство
mov bx,4 ; описатель принтера
mov cx,Message_Length ; число печатаемых символов
mov dx,OFFSET Message ; ссылка на "Привет!"
int 21h ; вывести "Привет!" принтер
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END
В данной версии программы функция DOS вывода строки на экран
заменена на функцию DOS, которая передает информацию на выбранное
устройство или в файл, в данном случае - на принтер. Введите и
запустите программу. Посмотрите, как она напечатает на принтере
слово "Привет!". (Перед запуском программы не забудьте ее сохра-
нить при завершении работы в редакторе. При этом программа будет
сохранена в файле HELLO.ASM, а предыдущая версия программы будет
потеряна.)
Вы можете модифицировать эту программу таким образом, чтобы
она снова посылала выходные данные на экран, а не на устройство
печати, заменив просто строку:
mov bx,4 ; описатель принтера
на строку:
mov bx,1 ; описатель стандартного вывода
Сделайте такое изменение, а затем снова выполните перекомпи-
ляцию и перекомпоновку программы перед ее запуском. Запустив
программу, вы увидите, что сообщение появится на экране, а пос-
ледним символом будет графический символ перевода формата (кружок
с крестиком внизу). Этот символ программа передает на принтер,
чтобы вынудить его после вывода сообщения выполнить перевод стра-
ницы. Поскольку на экране страниц нет, он ничего не знает о пере-
воде формата и просто выводит на экран символ из набора символов
компьютера РС.
Ваша вторая программа на Турбо Ассемблере
-----------------------------------------------------------------
Теперь вы готовы к тому, чтобы ввести и запустить программу,
которая действительно что-то делает. Вернитесь в текстовый редак-
тор и введите следующую программу REVERSE.ASM:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
MAXIMUM_STRING_LENGTH EQU 1000
StringToReverse DB MAXIMUM_STRING_LENGTH DUP (?)
ReverseString DB MAXIMUM_STRING_LENGTH DUP (?)
.CODE
mov ax,@Data
mov dx,ax ; установить регистр DS таким
; образом, чтобы он указывал
mov ah,3fh ; функция DOS чтения ввода
mov bx,0 ; описатель стандартного ввода
mov cx,MAXIMUM_STRING_LENGTH ; считать до максималь-
; ного числа символов
mov dx,OFFSET StringToReverse ; сохранить строку
int 21h ; получить строку
and ax,ax ; были считаны символы?
jz Done ; нет, конец
mov cx,ax ; поместить длину строки в
; регистр СХ, который можно
; использовать, как счетчик
push cx ; сохранить в стеке длину
; строки
mov bx,OFFSET StringToReverse
mov si,OFFSET ReverseString
add si,cx
dec si ; указывает на конец буфера
; строки
ReverseLoop:
mov al,[bx] ; получить следующий символ
mov [si],al ; сохранить символы в
; обратном порядке
inc bx ; указатель на следующий
; символ
dec si ; указатель на предыдущую
; ячейку buffer
loop ReverseLoop ; переместить следующий
; символ, если он имеется
pop cx ; извлечь длину строки
mov ax,40h ; функция записи DOS
mov bx,1 ; описатель стандартного
; вывода
mov dx,OFFSET ReverceString ; напечатать строку
Done:
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END
Скоро вы увидите, что сможет делать эта программа. Для нача-
ла не забудьте ее сохранить (под именем REVERSE.ASM).
Запуск программы REVERSE.ASM
-----------------------------------------------------------------
Для запуска программы REVERSE.ASM вы должны сначала ассем-
блировать ее:
TASM reverse
а затем ввести:
TLINK reverse
для создания выполняемого файла. Запустите программу, введя в от-
вет на подсказку DOS слово reverse. В случае вывода при ассембли-
ровании сообщений об ошибках, внимательно проверьте исходный код,
сравните его с приведенным текстом, а затем попытайтесь повторить
процесс.
После запуска программы на экране останется мерцающий кур-
сор. Очевидно, программа ожидает, что вы что-нибудь введете. Поп-
робуйте ввести:
ABCDEFG
а затем нажмите клавишу ENTER. Программа выведет на экран:
GFEDCBA
и завершит работу. Снова введите reverse в командной строке. На
этот раз введите:
0123456789
и нажмите клавишу ENTER. Программа выведет на экран:
9876543210
Теперь ясно, что делает программа REVERSE.ASM: она изменяет
порядок символов во введенной строке на обратный. Быстрая работа
со строками и символами - эта одна из областей, где язык Ассем-
блера превосходно демонстрирует свои качества. Вы увидите это в
следующих нескольких главах.
Вас можно поздравить! Вы только что ввели, ассемблировали и
скомпоновали несколько программ на Ассемблере и, таким образом,
ознакомились в действии с основами программирования на Ассембле-
ре: вводом, обработкой данных и выводом.
Если вы не хотите создавать объектный файл, но хотите полу-
чить файл листинга, или если вы хотите получить файл перекрестных
ссылок, но не хотите создавать файл листинга или объектный файл,
задайте в качестве имени файла пустое (нулевое) устройство
(NULL). Например, команда:
TASM FILE1,,NUL,
ассемблирует файл FILE1.ASM в объектный файл FILE1.OBJ, не созда-
вая файла листинга, и создает файл перекрестных ссылок FILE1.XRF.
Теперь вы готовы к тому, чтобы изучить основные элементы
программирования на языке Ассемблер, о которых рассказывается в
Главе 5 "Элементы программы на Ассемблере".
Глава 3. Работа с командной строкой Турбо Ассемблера
-----------------------------------------------------------------
Данная глава посвящена ознакомлению вас с необязательными
параметрами командной строки Турбо Ассемблера. Мы опишем каждый
параметр командной строки, которые вы можете использовать для
того, чтобы изменить поведение Ассемблера, и покажем, как и где
используются командные файлы. Наконец, мы опишем также файл кон-
фигурации.
Запуск Турбо Ассемблера из DOS
-----------------------------------------------------------------
В Турбо Ассемблере имеется очень мощный и гибкий синтаксис
командной строки. Если вы запустите Турбо Ассемблер, не задав ни-
каких аргументов, например:
TASM
то на экран выведется справочная информация, (на английском язы-
ке) описывающая множество параметров командной строки и синтаксис
для спецификации ассемблируемых файлов. На Рис. 3.1 показано, как
она выглядит.
-----------------------------------------------------------------
Turbo Assembler Version 2.0 Copyright (C) 1990
by Borland International, Inc
Usage:
TASM [параметры] исх_файл [,объект_файл] [,листинг] [,пер_ссылки]
|