Предыдущий раздел | ВЫВОД СИМВОЛОВ НА ЭКРАН | Следующий раздел |
До сих пор мы записывали требуемые числа в регистры с помощью команды R Debug. Но обычно это делает команда самой программы – mov. Эта же команда выполняет пересылку чисел между регистрами.
П о м е с т и т е 1234h в АX (12h в регистр АH и 34h в АL) и АBCDh в DX (АBh в DH и CDh в DL). С помощью команды А введите машинную команду “mov ah,dl”. Эта команда пересылает (копирует) число из DL в AH. АL при этом не используется. Если вы протрассируете эту строку, то увидите, что AX=CD34h и DX=ABCDh. Изменился только AH. Теперь он содержит копию числа из DL.
Команда mov пересылает число из второго регистра в первый, и по этой причине мы пишем AH перед DL. Машинный код данной команды D488h. Существуют другие формы этой же команды mov. Они имеют другие машинные коды и выполняют другие операции пересылки. Например, следующая команда (С389h) выполняет пересылку не байтов, а слов между двумя регистрами AX и BX:
3970:0100 89C3 MOV BX, AX
Следующая форма команды mov записывает значение числа в регистр, не используя другой регистр-источник:
3970:0100 В402 MOV АН, 02
Эта команда загружает число 02h в регистр AH. Старший байт команды, 02h является числом, которое мы хотим загрузить. З а п и ш и т е эту команду в ОП и выполните ее. Затем загрузите в АН другое число: с помощью команды "Е 101" измените старший байт, чтобы он был равен, например, C1h .
Сложим все части вместе и построим длинную программу. Она будет печатать звездочку *, выполняя все операции сама, не требуя от нас установки регистров (AH и DL). Программа использует команды mov для того, чтобы установить регистры AH и DL перед выполнением команды “int 21h”, выполняющей вызов функции DOS:
15АC:0100 В402 mov ah, 02
15AC:0102 B22A mov dl, 2a
15AC:0104 CD21 int 21
15AC:0106 CD20 int 20
В в е д и т е программу и проверьте ее командой “U 100”. Убедитесь, что IP указывает на ячейку l00h. Запустите программу командой G. В итоге на экране должен появиться символ *.
Теперь у нас есть законченная программа. Запишем ее на диск в виде com-файла для того, чтобы мы могли запускать ее прямо из DOS, просто набрав ее имя. Так как у программы пока нет имени, то мы должны его присвоить.
Команда Debug N (от "Name") присваивает файлу имя перед записью на диск. Н а п е ч а т а й т е :
_N Writestr.com
Эта команда не запишет файл на диск – она только назовет его Writestr.com .
Далее мы должны сообщить Debug о том, сколько байт занимает программа, для того, чтобы он знал размер файла. Если вы посмотрите на разассемблированный листинг программы, то увидите, что каждая машинная команда в нем занимает два байта (в общем случае это не выполняется). У нас четыре команды, следовательно, программа имеет длину восемь байт.
Полученное число байт надо куда-то записать. Для этого Debug использует пару регистров ВХ:CX, и поэтому, поместив 8h в СХ, мы сообщим Debug о том, что программа имеет длину в восемь байт. ВХ должен быть предварительно установлен в ноль.
После того, как мы установили имя и длину программы, мы можем записать ее на диск с помощью команды Debug W (от "Write"):
_W
Writing 0008 bytes
Теперь на диске есть программа Writestr.com, а мы с помощью Q покинем Debug и посмотрим на нее. И с п о л ь з у й т е команду DOS dir , чтобы увидеть справочную информацию о файле:
С:\ >dir Writestr.com
Volume in drive С has no label
Directory of C:\
WRITESTR.COM 8 6-30-93 10:05a
1 File (S) 18432 bytes free
Листинг директории сообщает, что файл Writestr.com находится в корневом каталоге (\) на диске “С:”, и его длина составляет восемь байт. Чтобы загрузить и выполнить программу, наберите в ответ на приглашение DOS writestr.com и нажмите <Enter>. Вы увидите *.
Если мы хотим запустить свою com-программу не из DOS, а из Debug, то запуск Debug следует выполнить вместе с требуемым загрузочным модулем. Пример такого запуска: Debug Writestr.com. После этого с данной программой можно работать так, как будто мы создали ее только что с помощью Debug, а не считали с диска. Для сохранения скорректированной программы на диске следует выполнить те же операции, что и для нового файла.
Предыдущий раздел | В начало | Следующий раздел |